# Shani Web Application Framework
Shani est un cadre Web open source conçu pour permettre un développement rapide des applications avec un minimum d'efforts tandis que les performances, la sécurité, la créativité et les pratiques de développement d'applications Web modernes coexistent.
Utilisez Shani pour créer une application côté cilent ou côté serveur. Vous pouvez également utiliser votre cadre frontal préféré pendant que Shani se tient sur back-end, ou vice versa.
Shani s'exécute bien sur Linux et Mac OS, mais pour les utilisateurs de Windows, ils peuvent utiliser le sous-système Windows pour Linux (WSL).
Aucune installation n'est requise.
Pour démarrer le serveur Web de l'application Shani , exécutez la commande suivante sur le terminal:
$ php index.phpL'application Shani a la structure du projet suivante
/root
apps/ (Contains user applications. Create your applications here)
config/ (Contains important server and hosts configurations)
hosts/ (Contains host configurations files (hostname.yml). Register your application here)
localhost.yml (can be customized)
ssl/ (Contains server ssl certificate files for)
mime.yml
server.yml (Server configuration are written here, and can be customized.)
gui/ (Contains support for GUI building)
assets/ (Contains static files e.g: .css, .js,fonts etc shared by all applications)
html/ (Contains html templates comes with framework)
library/ (Contains files comes with framework that can be used directly by user application)
shani/ (Contains core framework files)
index.php (The entry point of a Shani application)
Une structure de dossier d'application utilisateur typique peut apparaître comme suit:
apps/
demo/
v1/
modules/ (Can be renamed)
module1_name/ (Can be desired module name)
src/ (Can be renamed)
get/ (This is the request method as directory)
Resource.php (Can be any resource file)
views/ (can be renamed)
resource/ (All lowercase, must match resource file name)
lang/ (Can be renamed)
resource/ (All lowercase, must match resource file name)
breadcrumb/(Can be renamed)
resource/ (All lowercase, must match resource file name)
functions/ (can be renamed)
function-name.php (Must match function name in resource file class)
resource.php (must match module name)
module1_name.php (must match module name)
Supposons que nous voulons créer une application appelée demo ayant la version 1.0 ( v1 ). Notre application a un module appelé greetings et un fichier de ressources appelé Hello.php .
Maintenant, regardez l'exemple suivant d'un fichier de ressources:
<?php
namespace apps demo v1 modules greetings web get {
use shani engine http App ;
final class Hello
{
private App $ app ;
public function __construct ( App & $ app )
{
$ this -> app = $ app ;
}
/**
* Display greetings from Shani.
*/
public function world ()
{
//sending output to user agent using default view file (world.php)
$ this -> app -> render ();
}
}
} Création du fichier de vue: ( apps/demo/v1/modules/greetings/views/hello/world.php )
<h1>Hello From Shani</h1>Compte tenu de notre exemple ci-dessus, notre structure de dossiers d'application sera comme ceci:
apps/
demo/
v1/
modules/
greetings/
src/
get/
Hello.php
views/
hello/
world.php
L'étape suivante consiste à enregistrer notre application afin qu'elle puisse être disponible sur le Web. Vous pouvez le faire en allant sur /config/hosts/ et créer un fichier de configuration appelé localhost.yml . Vous pouvez choisir n'importe quel nom.
Souviens-toi! Chaque application doit avoir son propre fichier de configuration
Ce qui suit est la configuration de l'application par défaut fournie avec Shani
# A user application must have atleast one version.
VERSIONS :
" 1.0 " :
# Environment variables are customs, you can create any e.g DEV, TEST, PROD or any
# Must extends shaniadvisorsConfiguration
ENVIRONMENTS :
DEV : appsdemov1configSettings
# Active environment can any one of the provided above.
ACTIVE_ENVIRONMENT : DEV
DEFAULT_LANGUAGE : sw
# Whether an application is running or not
RUNNING : true
" 2.0 " :
ENVIRONMENTS :
DEV : appsdemov2configSettings
ACTIVE_ENVIRONMENT : DEV
DEFAULT_LANGUAGE : sw
RUNNING : true
# The default application version
DEFAULT_VERSION : " 2.0 "Permettez-nous de personnaliser ce fichier en fonction de nos besoins d'application:
VERSIONS :
" 1.0 " :
ENVIRONMENTS :
DEV : appsdemov1configDevSettings
TEST : appsdemov1configTestSettings
PROD : appsdemov1configProdSettings
ACTIVE_ENVIRONMENT : DEV
DEFAULT_LANGUAGE : sw
RUNNING : true
DEFAULT_VERSION : " 1.0 " L'étape suivante consiste à créer ces fichiers de classe de configuration. Nous les créerons sous apps/demo/v1/config/ . Un certain contenu peut être comme ça:
<php
namespace apps demo v1 config {
use shani advisors Configuration ;
use shani engine http App ;
final class DevSettings extends Configuration
{
public function __construct ( App & $ app , array & $ configurations )
{
parent :: __construct ( $ app , $ configurations );
}
//Add all unimplemented methods here
}
} Supposons que notre application est disponible via http://localhost:8008 , nous voulons également que notre application soit disponible via http://127.0.0.1:8008 , et http://example.local , ou plus ...
Il y a le concept d'alias, c'est lorsque l'application est disponible via plus d'un nom d'hôte. Tout comme nous avons créé un fichier localhost.yml , nous allons créer un fichier 127.0.0.1.alias et example.local.alias de fichier.local.alias.
N'oubliez pas que le fichier localhost.yml doit être disponible avant de créer un fichier .alias , sinon votre serveur écrasera
127.0.0.1.alias contenu du fichier
localhost
example.local.alias contenu du fichier
localhost
Comme nous l'avons vu, tous les fichiers .alias doivent contenir un nom d'hôte vers lequel ils pointent. C'est ainsi que vous créez des alias (ES) dans l'application Shani .
Encore une fois, supposons que notre application est disponible via localhost:8008 . Les ports par défaut pour notre serveur Web sont 8008 pour HTTP et Port 44380 pour HTTPS. Nous pouvons utiliser l'URL suivante pour appeler notre world de fonction.
$ curl http://localhost:8008/greetings/0/hello/0/worldFélicitations! Vous avez terminé la première étape pour devenir un développeur Shani .
L'application Shani suit le modèle URL suivant
http://hostname[:port]/module-name/param1/resource-name/param2/function-name[/more-params][?query=q1]
En décomposant le modèle ci-dessus, nous pouvons voir que
module-name représente le module de ressource actuel demandé par l'utilisateur. Il s'agit d'un répertoire où réside toutes les sous-ressources sous ce module.param1 et param2 sont les identificateurs de ressources, peuvent être un nombre, une chaîne ou quoi que ce soitresource-name ou parfois connu sous controller-name est un sous-ressource. C'est la mise en œuvre réelle de l'application, etfunction-name est un nom de fonction disponible dans la définition de la classe de ressources. Après le nom de la fonction, vous pouvez ajouter plus de paramètres ou ajouter une chaîne de requêteExemple:
http://localhost:8008/products/201/sales/10/details
L'application Shani utilise la conversion de case de kebab vers Camel pour convertir l'URL en noms valides.
module-name dans URL représente un répertoire module-name dans la structure du projet.resource-name dans URL représente une classe ResourceName dans le répertoire module-name et le répertoire resource-name dans un répertoire de vuefunction-name dans URL représente un functionName dans un fichier de classe ResourceName , et une vue function-name.php dans un répertoire de vueD'autres pièces d'URL restent inchangées.
Les demandes de traction sont les bienvenues. Pour les changements majeurs, veuillez d'abord ouvrir un problème pour discuter de ce que vous souhaitez changer.
Assurez-vous de mettre à jour les tests, le cas échéant.
GPL-3.0