# Shani Web Application Framework
Shani - это веб -структура с открытым исходным кодом, предназначенную для обеспечения быстрого разработки приложений с минимальными усилиями, в то время как производительность, безопасность, креативность и современные методы разработки веб -приложений сосуществовают.
Используйте Shani , чтобы создать приложение на стороне ресурсов или сервер. Вы также можете использовать свою любимую фронтальную каркас, пока Шани стоит на заднем плане, или наоборот.
Шани хорошо работает на Linux и Mac OS, однако для пользователей Windows они могут использовать подсистему Windows для Linux (WSL).
Установка не требуется.
Чтобы запустить веб -сервер приложения Shani , запустите следующую команду на терминале:
$ php index.phpПриложение Shani имеет следующую структуру проекта
/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)
Типичная структура папки приложений пользователя может отображаться в следующем:
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)
Давайте предположим, что мы хотим создать приложение под названием demo , имеющая версию 1.0 ( v1 ). В нашем приложении есть один модуль, называемый greetings , и один файл ресурса с именем Hello.php .
Теперь посмотрите на следующий пример файла ресурса:
<?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 ();
}
}
} Создание файла просмотра: ( apps/demo/v1/modules/greetings/views/hello/world.php )
<h1>Hello From Shani</h1>Учитывая наш пример выше, наша структура папок приложений будет похожа на следующее:
apps/
demo/
v1/
modules/
greetings/
src/
get/
Hello.php
views/
hello/
world.php
Следующим шагом является регистрация нашего приложения, чтобы оно было доступно в Интернете. Вы можете сделать это, перейдя в /config/hosts/ и создав файл конфигурации с именем localhost.yml . Вы можете выбрать любое имя.
Помнить! Каждое приложение должно иметь свой собственный файл конфигурации
Ниже приведена конфигурация приложения по умолчанию, которая поставляется с 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 "Позвольте нам настроить этот файл в соответствии с нашими потребностями приложения:
VERSIONS :
" 1.0 " :
ENVIRONMENTS :
DEV : appsdemov1configDevSettings
TEST : appsdemov1configTestSettings
PROD : appsdemov1configProdSettings
ACTIVE_ENVIRONMENT : DEV
DEFAULT_LANGUAGE : sw
RUNNING : true
DEFAULT_VERSION : " 1.0 " Следующим шагом является создание этих файлов класса конфигурации. Мы создадим их в рамках apps/demo/v1/config/ . Некоторый контент может быть похож на так:
<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
}
} Предположим, что наше заявление доступно через http://localhost:8008 , мы также хотим, чтобы наше заявление было доступно через http://127.0.0.1:8008 и http://example.local или больше ...
Поступает концепция псевдонимов, это когда приложение доступно через более чем одно имя хоста. Так же, как мы создали файл localhost.yml , мы собираемся создать файл 127.0.0.1.alias и файл example.local.alias .
Помните, что файл localhost.yml должен быть доступен перед созданием файла .alias , в противном случае ваш сервер сокрушит
127.0.0.1.alias Файл Содержание
localhost
example.local.alias
localhost
Как мы видели, все файлы .alias должны содержать имя хоста, на которое они указывают. Так вы создаете псевдоним (ES) в приложении Shani .
Опять же, давайте предположим, что наше приложение доступно через localhost:8008 . Порты по умолчанию для нашего веб -сервера составляют 8008 для HTTP и Port 44380 для HTTPS. Мы можем использовать следующий URL, чтобы вызвать наш world функций.
$ curl http://localhost:8008/greetings/0/hello/0/worldПоздравляю! Вы выполнили первый шаг, чтобы стать разработчиком Shani .
Приложение Shani следует следующему шаблону URL -адреса
http://hostname[:port]/module-name/param1/resource-name/param2/function-name[/more-params][?query=q1]
Разбивая приведенный выше шаблон, мы видим, что
module-name представляет текущий модуль ресурса, запрашиваемый пользователем. Это каталог, в котором проживают все суб-ресурсы в этом модуле.param1 и param2 являются идентификаторами ресурсов, могут быть число, строка илиresource-name или когда-то известное как controller-name -это подзадача. Это фактическая реализация приложения, иfunction-name -это имя функции, доступное в определении класса ресурсов. После имени функции вы можете добавить больше параметров или добавить строку запросаПример:
http://localhost:8008/products/201/sales/10/details
Shani Application использует преобразование корпуса CAMEL для преобразования URL в действительные имена.
module-name в URL представляет собой каталог module-name в структуре проекта.resource-name в URL представляет собой класс ResourceName в каталоге module-name и каталоге resource-name в каталоге просмотраfunction-name в URL представляет собой имя functionName в файле класса ResourceName и представление function-name.php в каталоге просмотраДругие части URL остаются неизменными.
Приглашаются запросы. Для серьезных изменений, пожалуйста, сначала откройте проблему, чтобы обсудить, что вы хотели бы изменить.
Пожалуйста, обязательно обновите тесты по мере необходимости.
GPL-3.0