# Shani Web Application Framework
Shani é uma estrutura da web de código aberto projetado para permitir o desenvolvimento rápido de aplicativos com esforços mínimos, enquanto o desempenho, a segurança, a criatividade e as práticas modernas de desenvolvimento de aplicativos na Web coexistem.
Use Shani para criar um aplicativo do lado cilente ou do lado do servidor. Você também pode usar sua estrutura de front-end favorita, enquanto Shani está no back-end ou vice-versa.
Shani funciona bem no Linux e Mac OS, no entanto, para os usuários do Windows, eles podem usar o Subsistema do Windows para Linux (WSL).
Nenhuma instalação é necessária.
Para iniciar o Shani Application Web Server, execute o seguinte comando no terminal:
$ php index.phpSHANI APLICAÇÃO tem a seguinte estrutura do projeto
/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)
Uma estrutura típica da pasta de aplicativos de usuário pode aparecer como o seguinte:
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)
Vamos supor que queremos criar um aplicativo chamado demo com a versão 1.0 ( v1 ). Nosso aplicativo possui um módulo chamado greetings e um arquivo de recursos chamado Hello.php .
Agora, veja o seguinte exemplo de um arquivo de recurso:
<?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 ();
}
}
} Criando arquivo de visualização: ( apps/demo/v1/modules/greetings/views/hello/world.php )
<h1>Hello From Shani</h1>Considerando o nosso exemplo acima, nossa estrutura de pasta de aplicativos será assim:
apps/
demo/
v1/
modules/
greetings/
src/
get/
Hello.php
views/
hello/
world.php
O próximo passo é registrar nosso aplicativo para que ele possa estar disponível na web. Você pode fazer isso indo para /config/hosts/ e criar um arquivo de configuração chamado localhost.yml . Você pode escolher qualquer nome.
Lembrar! Cada aplicativo deve ter seu próprio arquivo de configuração
A seguir, a configuração de aplicativo padrão que vem com 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 "Vamos personalizar este arquivo para atender às necessidades de nosso aplicativo:
VERSIONS :
" 1.0 " :
ENVIRONMENTS :
DEV : appsdemov1configDevSettings
TEST : appsdemov1configTestSettings
PROD : appsdemov1configProdSettings
ACTIVE_ENVIRONMENT : DEV
DEFAULT_LANGUAGE : sw
RUNNING : true
DEFAULT_VERSION : " 1.0 " A próxima etapa é criar esses arquivos de classe de configuração. Vamos criá -los em apps/demo/v1/config/ . Algum conteúdo pode ser assim:
<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
}
} Vamos assumir que nosso aplicativo está disponível no http://localhost:8008 , também queremos que nosso aplicativo esteja disponível via http://127.0.0.1:8008 e http://example.local , ou mais ...
Chega o conceito de aliases, é quando o aplicativo está disponível por mais de um nome de host. Assim como criamos o arquivo localhost.yml , criaremos o arquivo 127.0.0.1.alias e example.local.alias .
Lembre -se de que o arquivo localhost.yml deve estar disponível antes de criar o arquivo .alias , caso contrário, seu servidor esmagará
127.0.0.1.alias Conteúdo do arquivo
localhost
example.local.alias Conteúdo do arquivo
localhost
Como vimos, todos os arquivos .alias devem contém um nome de host que eles apontam. É assim que você cria alias (s) no aplicativo Shani .
Novamente, vamos supor que nosso aplicativo esteja disponível via localhost:8008 . As portas padrão para o nosso servidor da Web são 8008 para HTTP e porta 44380 para HTTPS. Podemos usar o seguinte URL para chamar nosso world de funções.
$ curl http://localhost:8008/greetings/0/hello/0/worldParabéns! Você concluiu o primeiro passo para se tornar um desenvolvedor Shani .
O aplicativo Shani segue o seguinte padrão de URL
http://hostname[:port]/module-name/param1/resource-name/param2/function-name[/more-params][?query=q1]
Quebrando o padrão acima, podemos ver que
module-name representa o módulo de recurso atual solicitado pelo usuário. Este é um diretório em que todas as sub-resmunções neste módulo residem.param1 e param2 são os identificadores de recursos, podem ser um número, string ou qualquer coisaresource-name ou, em algum momento, conhecido como controller-name é um sub-remource. É a implementação real do aplicativo efunction-name é um nome de função disponível na definição da classe de recursos. Após o nome da função, você pode adicionar mais parâmetros ou anexar uma string de consultaExemplo:
http://localhost:8008/products/201/sales/10/details
O aplicativo Shani usa a conversão de estojo kebab para camel para converter o URL em nomes válidos.
module-name em URL representa um diretório module-name na estrutura do projeto.resource-name em URL representa uma classe de ResourceName no diretório module-name e diretório de resource-name em um diretório de visualizaçãofunction-name no URL representa um functionName em um arquivo de classe de nome ResourceName e uma visualização function-name.php em um diretório de visualizaçãoOutras peças de URL permanecem inalteradas.
Solicitações de tração são bem -vindas. Para grandes mudanças, abra um problema primeiro para discutir o que você gostaria de mudar.
Certifique -se de atualizar os testes conforme apropriado.
GPL-3.0