# Shani Web Application Framework
Shani es un marco web de código abierto diseñado para permitir el desarrollo rápido de aplicaciones con esfuerzos mínimos, mientras que el rendimiento, la seguridad, la creatividad y las prácticas modernas de desarrollo de aplicaciones web coexisten.
Use shani para construir una aplicación del lado cilent o del lado del servidor. También puede usar su marco frontal favorito, mientras que Shani se encuentra en el back-end o viceversa.
Shani funciona bien en el sistema operativo Linux y Mac, sin embargo, para los usuarios de Windows pueden usar el subsistema de Windows para Linux (WSL).
No se requiere instalación.
Para iniciar el servidor web de la aplicación Shani , ejecute el siguiente comando en el terminal:
$ php index.phpLa aplicación Shani tiene la siguiente estructura del proyecto
/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)
Una estructura de carpeta de aplicación de usuario típica puede aparecer como la siguiente:
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)
Supongamos que queremos crear una aplicación llamada demo que tenga la versión 1.0 ( v1 ). Nuestra aplicación tiene un módulo llamado greetings y un archivo de recursos llamado Hello.php .
Ahora, mire el siguiente ejemplo de un archivo de recursos:
<?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 ();
}
}
} Creación del archivo de vista: ( apps/demo/v1/modules/greetings/views/hello/world.php )
<h1>Hello From Shani</h1>Teniendo en cuenta nuestro ejemplo anterior, nuestra estructura de carpeta de aplicaciones será así:
apps/
demo/
v1/
modules/
greetings/
src/
get/
Hello.php
views/
hello/
world.php
El siguiente paso es registrar nuestra aplicación para que pueda estar disponible en la web. Puede hacerlo yendo a /config/hosts/ y crea un archivo de configuración llamado localhost.yml . Puedes elegir cualquier nombre.
¡Recordar! Cada aplicación debe tener su propio archivo de configuración
La siguiente es la configuración de aplicación predeterminada que viene con 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 "Permítanos personalizar este archivo para adaptarse a nuestras necesidades de aplicación:
VERSIONS :
" 1.0 " :
ENVIRONMENTS :
DEV : appsdemov1configDevSettings
TEST : appsdemov1configTestSettings
PROD : appsdemov1configProdSettings
ACTIVE_ENVIRONMENT : DEV
DEFAULT_LANGUAGE : sw
RUNNING : true
DEFAULT_VERSION : " 1.0 " El siguiente paso es crear estos archivos de clase de configuración. Los crearemos en apps/demo/v1/config/ . Algunos contenidos pueden ser así:
<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
}
} Supongamos que nuestra aplicación está disponible a través de http://localhost:8008 , también queremos que nuestra aplicación esté disponible a través de http://127.0.0.1:8008 , y http://example.local , o más ...
Viene el concepto de alias, es cuando la aplicación está disponible a través de más de un nombre de host. Al igual que creamos el archivo localhost.yml , vamos a crear 127.0.0.1.alias archivo y example.local.alias archivo.
Recuerde que el archivo localhost.yml debe estar disponible antes de crear el archivo .alias , de lo contrario, su servidor se aplastará
127.0.0.1.alias contenido del archivo
localhost
example.local.alias contenido del archivo
localhost
Como hemos visto, todos los archivos .alias deben contener un nombre de host al que apunten. Así es como creas alias (ES) en la aplicación Shani .
Nuevamente, supongamos que nuestra solicitud está disponible a través de localhost:8008 . Los puertos predeterminados para nuestro servidor web son 8008 para HTTP y el puerto 44380 para HTTPS. Podemos usar la siguiente URL para llamar a nuestro world de funciones.
$ curl http://localhost:8008/greetings/0/hello/0/world¡Felicidad! Has completado el primer paso para convertirte en un desarrollador de Shani .
La aplicación Shani sigue el siguiente patrón de URL
http://hostname[:port]/module-name/param1/resource-name/param2/function-name[/more-params][?query=q1]
Desglosando el patrón de arriba, podemos ver que
module-name representa el módulo de recursos actual solicitado por el usuario. Este es un directorio donde reside todos los subconocimientos bajo este módulo.param1 y param2 son los identificadores de recursos, pueden ser un número, cadena o cualquier cosaresource-name o en algún momento conocido como controller-name es un subcontrato. Es la implementación real de la aplicación, yfunction-name es un nombre de función disponible en la definición de clase de recursos. Después del nombre de la función, puede agregar más parámetros o agregar una cadena de consultaEjemplo:
http://localhost:8008/products/201/sales/10/details
La aplicación Shani utiliza la conversión de casos Kebab a Camel para convertir la URL en nombres válidos.
module-name en URL representa un directorio module-name en la estructura del proyecto.resource-name en URL representa una clase de ResourceName en el directorio module-name y directorio resource-name en un directorio de vistafunction-name en URL representa un functionName en un archivo de clase ResourceName , y una vista function-name.php en un directorio de vistaOtras piezas de URL permanecen sin cambios.
Las solicitudes de extracción son bienvenidas. Para cambios importantes, abra primero un problema para discutir lo que le gustaría cambiar.
Asegúrese de actualizar las pruebas según corresponda.
GPL-3.0