ECO هو إطار PHP لـ PHP 5.5+
مثال تثبيت:
# wget shayanderson.com/eco.zip
# unzip ./eco.zip
يمكن إعداد الطرق الأساسية في app/com/route.php ، على سبيل المثال:
// set routes
return [
// class method
' / ' => ' IndexController->home ' ,
// namespace
' login ' => ' AccountUserController->login ' ,
// callable
' logout ' => function () { /* do something */ },
// more routes
]; سيقوم الطلب / بالاتصال بـ Method home في فئة الفئة IndexController في ملف ملف app/mod/IndexController.php .
سيقوم الطلب /login باستدعاء طريقة login في الفئة AccountUserController في ملف app/mod/Account/UserController.php .
يمكن استخدام طرق HTTP محددة للطرق:
eco:: route ( ' GET@api/user/:id ' , function ( $ id ) { /* GET method */ });
eco:: route ( ' DELETE@api/user/:id ' , function ( $ id ) { /* DELETE method */ });
eco:: route ( ' POST@api/user/:id? ' , function ( $ id = null ) { /* POST method */ });
// or handle multiple HTTP methods
eco:: route ( ' POST|PUT@api/user/:id? ' , function ( $ id = null ) { /* POST or PUT method */ });يتم دعم طرق HTTP هذه:
DELETE،GET،HEAD،PATCH،POST،PUT
يمكن أن تكون عروض عمليات الاسترجاع على الطريق اسمًا قابلاً للاتصال أو قابلاً للاتصال (يجب أن يكون عنصر الصفيف الأول هو وحدة التحكم/الإجراء):
function auth () { /* do something */ }
eco:: route ( ' account/secure ' ,
[ ' AccountController->secure ' , ' auth ' , function () { /* invoked */ }]);تحذير: لا تعمل عمليات الاسترجاعات على الطريق مع إعداد المسار الديناميكي
يمكن استخدام مستقديات المسار الديناميكي للتطبيقات الأكبر التي تحتوي على العديد من الطرق (طرق التحميل البطيئة) ، على سبيل المثال:
eco:: route ( ' account* ' , ' AccountController::getRoutes() ' ); الآن جميع الطلبات التي تبدأ مع /account سوف تقوم بتحميل الطرق باستخدام الطريقة:
class AccountController
{
public static function getRoutes ()
{
return [
' account/login ' => ' AccountController->login ' ,
// do not have to use class name if in same class:
' account/logout ' => ' logout '
];
}
}يمكن أيضًا تعيين إعداد المسار الديناميكي (طرق التحميل البطيئة) مباشرةً كمصفون ، مثال:
eco:: route ( ' account* ' , [
' AccountController ' , // the class name must be first (index:0)
' account/login ' => ' login ' ,
' account/logout ' => ' logout '
]);توجيه CLI سهل الاستخدام ، على سبيل المثال:
eco: route ( ' bin/test/:id ' , function ( $ id ) {
echo ' CLI test, id: ' . $ id ;
});الآن يمكن إصدار أمر CLI:
$ php index.php bin/test/5
Bin test: 5
سيعمل المسار أعلاه أيضًا في متصفح الويب. لإنشاء مسار CLI فقط (لن يعمل في متصفح الويب) إضافة
$إلى بداية الطريق ، على سبيل المثال:
// this route will only work as CLI command
// the request '/bin/test/5' in a Web browser would result in a 404 error
eco: route ( ' $bin/test/:id ' , function ( $ id ) {
echo ' CLI test, id: ' . $ id ;
});معلمات الطريق المسماة:
eco:: route ( ' user/:id ' , ' UserController->view ' ); سيتم تمرير قيمة :id إلى طريقة Callable أو Class:
class UserController
{
public function view ( $ id )
{
// do something
}
}يمكن استخدام المعلمات الاختيارية:
eco:: route ( ' page/:id/:title? ' , function ( $ id , $ title = null ) {});مثال على معلمات البرية:
eco:: route ( ' product/:info+ ' , function ( $ info ) {
// if request is '/product/1/abc/x'
// $info is an array: ['1', 'abc', 'x']
});يمكن استخدام عمليات الاسترداد لمعلمة Route بعدة طرق مختلفة:
eco:: route ( ' page/:title:strtoupper ' , ' PageController->view ' );أو تعيين عوائد معلمة في Array (يجب أن يكون عنصر الصفيف الأول هو طريقة الفئة / قابلة للاتصال):
eco:: route ( ' page/:title ' , [ ' PageController->view ' , [ ' title ' => ' strtoupper ' ]]);أيضًا ، يمكن تعيين عوامل عمليات الاسترجاعات العالمية للمعلمة ، على سبيل المثال:
// globally set route param callback
// now every ':id' param will use this callback
// global param callbacks are overwritten by local ones
eco:: param ( ' id ' , function ( $ id ) { return strtoupper ( $ id ); });
// or use multiple param names:
eco:: param ([ ' x ' , ' y ' , ' z ' ], function ( $ val ) { });يمكن أيضًا استخدام عروض عمليات الاسترجاع على الطريق مع عروض تراجعات المعلمات:
eco:: route ( ' page/:title ' , [
' PageController->view ' ,
' route_callback ' ,
function () { /* route callback */ },
// route param callback
[ ' title ' => ' strtoupper ' ]
]);يمكن استخدام تعبيرات معلمة الطريق العادية ، إذا فشلت المباراة ، فلن يتم استدعاء المسار:
eco:: route ( ' user/:id@[0-9]+ ' , ...);ترتيب بناء الجملة عند استخدام أنواع مختلفة من المعلمات و/أو الجمع بين عمليات الاسترجاعات والتعبيرات العادية ، إليك بناء الجملة الصحيحة:
// when using callback with regular expression
// the callback must come first:
eco:: route ( ' user/:id:strtoupper@[0-9]+ ' , ...);
// use optional param and callback:
eco:: route ( ' user/:id/:name?:strtoupper ' , ...);
// use optional param and regular expression:
eco:: route ( ' user/:id/:name?@[a-z]+ ' , ...);
// use optional param, callback and regular expression:
eco:: route ( ' user/:id/:name?:strtoupper@[a-z]+ ' , ...);
// use wildcard param and callback:
eco:: route ( ' user/:params+:strtoupper ' , ...);
// use wildcard param and regular expression:
eco:: route ( ' user/:params+@[a-z]+ ' , ...);
// use wildcard param, callback and regular expression:
eco:: route ( ' user/:params+:strtoupper@[a-z]+ ' , ...);يمكن استخدام كائن العرض في إجراءات المسار:
class PageController
{
public function get ( $ id )
{
$ page = PageModel:: get ( $ id );
// set view param
eco:: view ()-> set ( ' title ' , $ page -> title );
// or use view() helper function
// view()->set('title', $page->title);
// or like this:
view ()-> author = $ page -> author ;
// load template file 'page/view'
// and can also set view param 'content'
view ( ' page/view ' , [
' content ' => $ page -> content
]);
}
}يمكن أيضًا الوصول إلى معلمات الطريق باستخدام طرق فئة
Router.
app/tpl/page/view.tpl file مثال:
<?php include PATH_TEMPLATE_GLOBAL . ' header.tpl ' ; ?>
<h1> <?= $ title ?> </h1>
<p>Author: <?= $ author ?> </p>
<?= $ content ?>
<?php include PATH_TEMPLATE_GLOBAL . ' footer.tpl ' ; ?> مثال على رسائل التسجيل:
eco:: log ()-> error ( ' Bad error / fatal ' );
eco:: log ()-> warning ( ' Warning conditions ' );
eco:: log ()-> notice ( ' Notice message ' );
eco:: log ()-> debug ( ' File has loaded ' );يمكن استخدام الفئات عند تسجيل رسالة:
// category 'payment'
eco:: log ()-> error ( ' Failed to access payment gateway ' , ' payment ' );يمكن أيضًا إضافة معلومات تصحيح الأخطاء:
eco:: log ()-> warning ( ' Request failed ' , /* category optional */ null ,
[ ' request ' => ' x ' , ' client ' => ' y ' ]);احصل على سجل كامل:
$ log = eco:: log ()-> get ();الإعداد مثال معالج السجل المخصص:
eco:: log ()-> setHandler ( function ( $ message , $ level , $ category , $ info ){
// if sending message to database
// do no send if database connection error, example:
// if(substr($message, 0, 17) == 'SQLSTATE[HY000] [')
// {
// return false;
// }
// handle custom logging
return true ; // handled
});إذا لم يرد معالج السجل المخصص القابل للاتصال
true، فسيستمر المسجل الداخلي كالمعتاد
أمثلة خطأ الزناد:
eco:: error ( ' Error message ' );
// or use helper function
error ( ' Something bad ' );
// custom error code
error ( ' Page not found ' , 404 );
// add log category
error ( ' Failed to load user ' , null , ' account ' );
// by default the HTTP error response code is sent
// to not send HTTP code use:
error ( ' Page not found ' , 404 , ' category ' false ); يمكن الوصول إلى آخر رسالة خطأ (وفئة الخطأ) المرسلة إلى وظيفة eco::error() باستخدام:
$ error_message = eco:: errorGetLast ();
$ error_category = eco:: errorGetLastCategory ();يمكن استخدام رد اتصال 404 للتعامل مع 404 قبل استدعاء خطأ
يمكن استخدام السنانير لتحميل الملفات أو استخدام عمليات الاسترجاعات أثناء التنفيذ ، أمثلة:
// called before routing starts
eco:: hook (eco:: HOOK_BEFORE , function () { /* do something */ });
// called before the route callable or class method is called
// include a file example:
eco:: hook (eco:: HOOK_MIDDLE , PATH_LIB . ' hook/middle.php ' );
// called after dispatching
eco:: hook (eco:: HOOK_AFTER , function () { /* do something */ });يتم التعامل مع إعدادات التكوين والبيئة بشكل منفصل.
يوجد ملف إعدادات التكوين ECO في app/com/conf/eco.conf.php ويحتوي على جميع إعدادات الإطار. يمكن العثور على جميع وثائق إعدادات تكوين ECO في الملف.
يمكن تخزين إعدادات تكوين التطبيق بواسطة ECO ، مثال:
// load config file(s) using path
eco:: conf ( PATH_CONF . ' app.conf.php ' );
eco:: conf ( PATH_CONF . ' api.conf.php ' );
// or load config settings using array
eco:: conf ([ ' local ' => [ ' path ' => ' x ' , ' filename ' => ' y ' ]]);
// use config settings
$ app_username = eco:: conf ()-> app -> username ;
$ local_path = eco:: conf ()-> local -> path ; يجب أن تُرجع ملفات التكوين صفيفًا ، app.conf.php مثال:
return [
' app ' => [
' username ' => ' x ' ,
' password ' => ' y '
],
' core ' => [ /* more */ ]
];لا يمكن كتابة إعدادات التكوين عند استخدام ملفات متعددة ، لذلك يجب أن تكون مفاتيح الصفيف الأساسية فريدة من نوعها حتى في الملفات المختلفة. لا تستخدم أبدًا مفتاح الصفيف الأساسي
_ecoالذي يستخدمه ECO لإعدادات الإطار الداخلي.
يمكن أيضًا استخدام إعدادات التكوين بشكل منفصل عن ECO ، على سبيل المثال:
// do not store internally
$ conf = eco:: conf ( PATH_CONF . ' app.conf.php ' , false );
// use config settings
$ app_username = $ conf -> app -> username ;تقدم ECO الطرق التالية:
eco::autoload($paths) - Autoloader Classeco::breadcrumb() - Access Breadcrumb Class ( breadcrumb() وظيفة المساعد المتاحة)eco::clear($key) - متغير عالمي واضحeco::conf($file_path, $store) - ملف إعدادات تكوين التطبيق / تحميل ملف ( conf() وظيفة المساعد المتاحة)eco::db($connection_id) - Access Database Class ( db() وظيفة المساعد المتاحة)eco::error($message, $code, $category, $http_response_code) - توجيه خطأ ( error() وظيفة المساعد)eco::filter() - Access Data Filter Class ( filter() وظيفة المساعد المتاحة)eco::flash() - Access Session Flash Class ( flash() وظيفة المساعد المتاحة)eco::format() - فئة تنسيق بيانات الوصول ( format() وظيفة المساعد المتاحة)eco::get($key) - احصل على متغير عالميeco::has($key) - تحقق من وجود متغير عالميeco::hook($name, $callback) - أضف خطافًاeco::log() - فئة سجل الوصول ( logger() وظيفة المساعد المتاحة)eco::model() - Todel Class Loader ( model() وظيفة المساعد المتاحة)eco::param($id, $callback) - خريطة مسار المعلمة رد الاتصال ( param() وظيفة المساعد المتاحة)eco::request() - Access request Class ( request() وظيفة المساعد المتاحة)eco::response() - فئة الاستجابة للوصول ( response() وظيفة المساعد المتاحة)eco::route($route, $action) - Map Routeeco::router() - Access Core Router Classeco::run() - قم بتشغيل التطبيقeco::service() - Service Class Loader ( service() وظيفة المساعد المتاحة)eco::session() - فئة جلسة الوصول ( session() وظيفة المساعد المتاحة)eco::set($key, $value) - اضبط متغيرًا عالميًاeco::stop() - أوقف تطبيق التطبيق ( stop() وظيفة المساعد بأمانeco::validate() - بيانات الوصول إلى صحة بيانات الفئة ( validate() متوفرة)eco::view($template, $view_params) - تحميل ملف قالب عرض و Access View Class ( view() وظيفة المساعد المتاحة) يمكن استخدام الفئات الأساسية لتبسيط مهام التطبيق الشائعة:
EcoCache - فئة ذاكرة التخزين المؤقت من جانب الخادمEcoDatabase - فئة قاعدة البيانات الأساسيةEcoForm - HTML Form Core ClassEcoHttp - HTTP request Core ClassEcoModel - فئة نموذج قاعدة البياناتEcoTable - HTML Table Core Class تتوفر فصول المساعدة هذه:
EcoBenchmark - مساعد القياسEcoSystemBreadcrumb - Access with eco::breadcrumb() أو breadcrumb() وظيفة المساعدةEcoSystemFilter - Access with eco::filter() أو filter() وظيفة المساعدEcoSystemSessionFlash - Access with eco::flash() أو flash() وظيفة المساعدEcoSystemFormat - Access with eco::format() أو format() وظيفة المساعدEcoSystemRequest - Access with eco::request() أو request() وظيفة المساعدEcoSystemRegistryService - Access with eco::service() أو service() وظيفة المساعدEcoSystemSession - Access with eco::session() أو session() وظيفة المساعدEcoSocketClient و EcoSocketServer - إنشاء مساعدينEcoSystemValidate - Acccess مع eco::validate() أو validate() وظيفة المساعد يمكن استخدام وظائف المساعد للوصول بسرعة إلى طرق Eco الأساسية أو غيرها من الوظائف المفيدة. العثور على وظائف المساعد وثائق هنا.
يمكن تمديد ECO عن طريق تمديد فئة EcoSystem Core. في البداية هذا الإعداد في ملف app/com/bootstrap.php :
// set Eco access class
class eco extends Eco System {} يمكن استخدام الفئة الممتدة لإضافة طرق أو تجاوز طرق تجاوز EcoSystem .
^ العودة إلى الأعلى