# Shani Web Application Framework
Shani ist ein Open -Source -Web -Framework, das eine schnelle Anwendungsentwicklung mit minimalen Anstrengungen ermöglicht, während Leistung, Sicherheit, Kreativität und moderne Webanwendungsentwicklungspraktiken zusammenarbeiten.
Verwenden Sie Shani , um eine Cilent-Side- oder serverseitige Anwendung zu erstellen. Sie können auch Ihr bevorzugter Front-End-Framework verwenden, während Shani auf Back-End steht oder umgekehrt.
Shani läuft gut unter Linux und Mac OS, für Windows -Benutzer können sie jedoch Windows Subsystem für Linux (WSL) verwenden.
Es ist keine Installation erforderlich.
Führen Sie den folgenden Befehl auf Terminal aus, um Shani Application Web Server zu starten:
$ php index.phpDie Shani -Anwendung hat die folgende Projektstruktur
/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)
Eine typische Struktur der Benutzeranwendungsordner kann wie folgt angezeigt werden:
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)
Nehmen wir an, wir möchten eine Anwendung namens demo mit Version 1.0 ( v1 ) erstellen. Unsere Anwendung verfügt über ein Modul namens greetings und eine Ressourcendatei namens Hello.php .
Schauen Sie sich nun das folgende Beispiel einer Ressourcendatei an:
<?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 ();
}
}
} Ansicht Datei erstellen: ( apps/demo/v1/modules/greetings/views/hello/world.php )
<h1>Hello From Shani</h1>In Anbetracht unseres obigen Beispiels wird unsere Anwendungsordnerstruktur wie folgt sein:
apps/
demo/
v1/
modules/
greetings/
src/
get/
Hello.php
views/
hello/
world.php
Der nächste Schritt besteht darin, unsere Anwendung so zu registrieren, dass sie im Web verfügbar sein kann. Sie können dies tun, indem Sie zu /config/hosts/ und eine Konfigurationsdatei namens localhost.yml erstellen. Sie können einen beliebigen Namen auswählen.
Erinnern! Jede Anwendung muss eine eigene Konfigurationsdatei haben
Im Folgenden ist die Standardkonfiguration für Anwendungen, die mit Shani geliefert wird
# 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 "Lassen Sie uns diese Datei so anpassen, dass sie unseren Anwendungsanforderungen entspricht:
VERSIONS :
" 1.0 " :
ENVIRONMENTS :
DEV : appsdemov1configDevSettings
TEST : appsdemov1configTestSettings
PROD : appsdemov1configProdSettings
ACTIVE_ENVIRONMENT : DEV
DEFAULT_LANGUAGE : sw
RUNNING : true
DEFAULT_VERSION : " 1.0 " Der nächste Schritt besteht darin, diese Konfigurationsklassendateien zu erstellen. Wir erstellen sie unter apps/demo/v1/config/ . Einige Inhalte können so sein:
<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
}
} Nehmen wir an, unsere Bewerbung ist über http://localhost:8008 verfügbar. Wir möchten auch, dass unsere Bewerbung über http://127.0.0.1:8008 und http://example.local oder mehr ...
Es kommt das Konzept der Aliase, wenn die Anwendung über mehr als einen Hostnamen verfügbar ist. Genau wie wir localhost.yml -Datei erstellt haben, werden wir die Datei 127.0.0.1.alias und example.local.alias -Datei erstellen.
Denken Sie daran, dass die Datei localhost.yml vor dem Erstellen .alias -Datei verfügbar sein muss, da sonst Ihr Server vernichtet wird
127.0.0.1.alias Dateiinhalte
localhost
example.local.alias Dateiinhalte
localhost
Wie wir gesehen haben, müssen alle .alias -Dateien einen Hostnamen enthalten, auf den sie verweisen. So erstellen Sie Alias (ES) in der Shani -Anwendung.
Nehmen wir wieder an, unsere Bewerbung ist über localhost:8008 erhältlich. Die Standardports für unseren Webserver sind 8008 für HTTP und Port 44380 für HTTPS. Wir können die folgende URL verwenden, um unsere world zu nennen.
$ curl http://localhost:8008/greetings/0/hello/0/worldHerzlichen Glückwunsch! Sie haben den ersten Schritt abgeschlossen, um Shani -Entwickler zu werden.
Die Shani -Anwendung folgt dem folgenden URL -Muster
http://hostname[:port]/module-name/param1/resource-name/param2/function-name[/more-params][?query=q1]
Wenn wir das obige Muster abbauen, können wir das sehen
module-name repräsentiert das aktuelle Ressourcenmodul, das der Benutzer angefordert hat. Dies ist ein Verzeichnis, in dem sich alle Unterressourcen unter diesem Modul befinden.param1 und param2 sind die Ressourcenkennung, können eine Nummer, eine Zeichenfolge oder irgendetwas seinresource-name oder irgendwann als controller-name bezeichnet, ist eine Unterressource. Es ist die tatsächliche Implementierung der Anwendung undfunction-name ist ein Funktionsname, der in der Definition der Ressourcenklassen verfügbar ist. Nach dem Funktionsnamen nach Funktionsnamen können Sie weitere Parameter hinzufügen oder eine Abfragebarstellung anhängenBeispiel:
http://localhost:8008/products/201/sales/10/details
Shani Application verwendet Kebab, um die Camel -Fallkonvertierung zu konvertieren, um URL in gültige Namen umzuwandeln.
module-name in der URL repräsentiert ein module-name Verzeichnis in der Projektstruktur.resource-name in der URL repräsentiert eine ResourceName -Klasse im module-name und resource-name Verzeichnis in einem View-Verzeichnisfunction-name in der URL repräsentiert einen functionName in einer ResourceName -Klassendatei und eine function-name.php in einem AnsichtsverzeichnisAndere URL -Teile bleiben unverändert.
Pull -Anfragen sind willkommen. Für wichtige Änderungen öffnen Sie zuerst ein Problem, um zu besprechen, was Sie ändern möchten.
Bitte stellen Sie sicher, dass Sie nach Bedarf Tests aktualisieren.
GPL-3.0