# Shani Web Application Framework
Shani هو إطار ويب مفتوح المصدر مصمم لتمكين تطوير التطبيقات السريعة بأقل الجهود في حين أن الأداء والأمان والإبداع وممارسات تطوير تطبيقات الويب الحديثة تتعايش.
استخدم Shani لإنشاء تطبيق Cilent-Side أو Server-Side. يمكنك أيضًا استخدام إطار العمل الأمامي المفضل لديك بينما يقف Shani على الواجهة الخلفية ، أو العكس.
يعمل Shani بشكل جيد على Linux و Mac OS ، ولكن بالنسبة لمستخدمي Windows يمكنهم استخدام نظام Windows الفرعي لـ Linux (WSL).
لا يلزم التثبيت.
لبدء خادم الويب الخاص بتطبيق Shani ، قم بتشغيل الأمر التالي على Terminal:
$ 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 . يمكنك اختيار أي اسم.
يتذكر! يجب أن يكون لكل تطبيق ملف تكوين خاص به
فيما يلي تكوين التطبيق الافتراضي الذي يأتي مع شاني
# 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 نمط عنوان 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 Kebab إلى تحويل حالة الجمل لتحويل عنوان 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