بسيطة وسريعة وعملية للغاية. minasrouter هو أحد مكونات مسارات PHP لمشاريع MVC! لقد تم تصميمه لتجريد أفعال RESTfull
(GET, POST, PUT, PATCH, DELETE)
وتقديمها بطريقة بسيطة وسهلة في وحدة تحكم التطبيق.
يعمل
minasrouter
على معالجة جميع المعلومات بشكل منفصل، مما يجعل العملية أسهل للمطور ويسرع عملية تطوير/تقدم المشروع.
بسيطة وسريعة وعملية للغاية. minasrouter هو أحد مكونات مسارات PHP لمشاريع MVC! إنه مصمم لتجريد أفعال RESTfull (GET، POST، PUT، PATCH، DELETE) وتقديمها ببساطة وسهولة في وحدة تحكم التطبيق.
يعمل minasrouter ويعالج جميع المعلومات بشكل منفصل، مما يسهل العملية للمطور ويسرع تطوير/تقدم المشروع.
(Yes, it really is a few minutes)
مع خطين تبدأ في استخدام الطرق!
ربما كنت شخصًا يتعلم من خلال المشاهدة، يمكنك الوصول إلى مجلد المثال، الذي يحتوي على مثال لهندسة المجلدات لكيفية استخدامنا minasrouter .
يمكنك التحقق من جميع الاختبارات التي تم إجراؤها هنا. يتمتع!
يتوفر minasrouter عبر Composer require
:
" require " {
"nicollassilva/ minasrouter " : " ^1.0 "
}
أو تشغيل في المحطة :
composer require nicollassilva/ minasrouter
لبدء استخدام minasrouter ، يجب إعادة توجيه كل إدارة التنقل إلى ملف المسار الافتراضي لنظامك، والذي سينفذ عملية معالجة المسار بالكامل ويعيد ما تم تكوينه افتراضيًا. قم بالتكوين وفقًا للأمثلة أدناه ووفقًا لخادمك.
لبدء استخدام minasrouter ، يجب إعادة توجيه كل إدارة التنقل إلى ملف المسار الافتراضي لنظامك، والذي سيقوم بعملية معالجة المسار بالكامل ويعيد ما تم تكوينه افتراضيًا. قم بالتكوين وفقًا للأمثلة أدناه ووفقًا لخادمك.
RewriteEngine on
Options All -Indexes
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} (www.)?localhost
RewriteRule (.*) https:// %{HTTP_HOST} [L,R=301]
RewriteCond %{REQUEST_URI} !public/
RewriteRule (.*) /public/$1 [L]
RewriteEngine On
# Options All -Indexes
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# URL Rewrite
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php?route=/$1 [L,QSA]
# ## Do not use the settings below if you are using developing in a local environment, use only in production.
# # WWW Redirect
# RewriteCond %{HTTP_HOST} !^www. [NC]
# RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# # HTTPS Redirect
# RewriteCond %{HTTP:X-Forwarded-Proto} !https
# RewriteCond %{HTTPS} off
# RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
location / {
if ( $script_filename !~ "-f" ){
rewrite ^(.*)$ /index.php?route=/ $1 break;
}
}
لبدء المكونات:
<?php
require __DIR__ . " /../vendor/autoload.php " ;
use minasrouter Router Route ;
// The second argument is optional. It separates the Controller and Method from the string
// Example: "Controller@method"
Route:: start ( " http://yourdomain.com " , " @ " );
Route:: get ( " / " , function () {
// ...
});
// ... all routes here
// You will put all your routes before this function
Route:: execute ();
طُرق:
وظيفة | المعلمة | المعلمة | المعلمة |
---|---|---|---|
يحصل | سلسلة $uri | رد اتصال $ | |
بريد | سلسلة $uri | رد اتصال $ | |
يضع | سلسلة $uri | رد اتصال $ | |
رقعة | سلسلة $uri | رد اتصال $ | |
يمسح | سلسلة $uri | رد اتصال $ | |
مباراة | صفيف $httpVerbs | سلسلة $uri | رد اتصال $ |
أي | سلسلة $uri | رد اتصال $ |
مثال:
Route:: get ( ' /users ' , [ App Controllers User::class, ' index ' ]);
Route:: post ( ' /users ' , [ App Controllers User::class, ' store ' ]);
Route:: put ( ' /users/{id} ' , [ App Controllers User::class, ' update ' ]);
Route:: patch ( ' /users/{id} ' , [ App Controllers User::class, ' update ' ]);
Route:: delete ( ' /users/{id} ' , [ App Controllers User::class, ' delete ' ]);
// The router allows you to register routes that respond to any HTTP verb:
Route:: any ( ' / ' , function () {
// ...
});
// Sometimes you may need to register a route that responds to multiple HTTP verbs:
Route:: match ([ " GET " , " POST " ], " / " , function () {
// ...
});
طُرق:
وظيفة | المعلمة |
---|---|
اسم | سلسلة اسم $ |
إلى | سلسلة اسم $ |
مثال:
Route:: get ( " /users/create " , function () {
// ...
})-> name ( " user.create " );
Route:: get ( " /users/2 " , function () {
// ...
})-> as ( " user.show " );
Route:: get ( " / " , function () {
// ...
})-> name ( " web.index " );
Route:: get ( " /user/{id} " , function ( $ id ) {
echo $ id ;
})-> name ( " user.show " );
Route:: get ( " /post/{id?} " , function ( $ id ) {
if (! $ id ) {
// ...
}
// ...
})-> name ( " post.show " );
طُرق:
وظيفة | المعلمة | المعلمة |
---|---|---|
أين | صفيف المعلمات $ | |
WhereParam | سلسلة $param | سلسلة $ regex |
حيثرقم | سلسلة $param | |
حيث ألفا | سلسلة $param | |
حيثAlphaNumeric | سلسلة $param | |
حيثUuid | سلسلة $param |
مثال:
Route:: get ( " /user/{id} " , [ App Controllers UserController::class, " show " ])
-> name ( " user.show " )
-> where ([ " id " => " [0-9]+ " ]);
// whereParam is alias of where method
Route:: get ( " /profile/{slug} " , [ App Controllers UserController::class, " profile " ])
-> name ( " user.profile " )
-> whereParam ( " id " , " [0-9]+ " );
Route:: get ( " /book/{id} " , [ App Controllers BookController::class, " show " ])
-> name ( " book.show " )
-> whereNumber ( " id " );
يعد العمل مع البرامج الوسيطة هنا أمرًا سهلاً للغاية، نحتاج فقط إلى تمرير الأسماء الكاملة للفئات أو تعيينها على أنها عالمية، ومن هناك، نستخدم الاسم المستعار الخاص بها.
ملاحظة: من المهم أن تقوم بوضع كافة المسارات أدناه. لن تحتوي المسارات فوق هذه الفئة على هذه البرامج الوسيطة العالمية.
Route:: globalMiddlewares ([
' isLogged ' => App Middlewares isLogged::class,
' isAdmin ' => App Middlewares isAdmin::class
]);
// ... all routes
يمكنك استخدام التابع الوسيط لتعيين برمجية وسيطة للمسار.
Route:: get ( " /musics " , function () {
// ...
})-> middleware ( " isLogged " );
Route:: get ( " /musics " , function () {
// ...
})-> middleware ([ " isLogged " ]);
يمكنك تعيين برمجيات وسيطة متعددة للمسار عن طريق تمرير مجموعة من أسماء البرامج الوسيطة إلى أسلوب البرمجيات الوسيطة.
Route:: get ( " /musics " , function () {
// ...
})-> middleware ( " first, second " );
Route:: get ( " /movies " , function () {
// ...
})-> middleware ([ " first " , " second " ]);
عند تعيين برمجيات وسيطة، يمكنك أيضًا تمرير اسم الفئة المؤهلة بالكامل:
use App Middlewares VerifyCsrfToken ;
Route:: get ( " /series " , function () {
// ...
})-> middleware (VerifyCsrfToken::class);
Route:: get ( " /series " , function () {
// ...
})-> middleware ( App Middlewares VerifyCsrfToken::class);
في بعض الأحيان، تقوم بإنشاء مجموعة من المسارات باستخدام برمجيات وسيطة، ولكنك تريد أن يكون مسار واحد فقط أو عدد قليل من المسارات بدون برمجيات وسيطة محددة، ويمكنك القيام بذلك.
Route:: middleware ([ ' auth ' , ' api ' ])-> group ( function () {
Route:: get ( ' / ' , function () {
// All middlewares will works in this route
});
Route:: get ( ' /no-api ' , function () {
// Only the auth middleware works here
})-> withoutMiddleware ( ' api ' );
});
جميع الطرق:
وظيفة | المعلمة | ::وظيفة | ->الوظيفة |
---|---|---|---|
مساحة الاسم | سلسلة مساحة الاسم $ | نعم | نعم |
بادئة | سلسلة البادئة $ | نعم | نعم |
اسم | سلسلة اسم $ | نعم | نعم |
الوسيطة | سلسلة $ الوسيطة | نعم | نعم |
يمكن تسمية طرق المجموعة بطريقة ثابتة أو عادية، ولا تنس استدعاء مجموعة دالة لإدراجها كمسارات داخل الإغلاق.
أمثلة:
Route:: name ( " admin. " )-> group ( function () {
Route:: get ( " / " , function () {
// admin.index
})-> name ( " index " );
});
Route:: prefix ( " admin/ " )-> group ( function () {
Route:: get ( " /index " , function () {
// http://localhost/admin/index
})-> name ( " index " );
});
Route:: namespace ( " AppControllers " )-> group ( function () {
Route:: get ( " /user/{id} " , [ " User " , " show " ])-> name ( " show " );
// AppControllersUser
});
Route:: middleware ( App Middlewares isLogged::class)-> group ( function () {
Route:: get ( " /user/{id} " , [ " User " , " show " ])-> name ( " show " );
});
Route:: namespace ( " AppControllersAdmin " )
-> middleware ([ " isLogged " , " isAdmin " ])
-> name ( " admin. " )
-> prefix ( " admin " )
-> group ( function () {
// ...
});
يمكنك استخدام المسارات مع البرامج الوسيطة الفردية ضمن مجموعة المسارات.
Route:: namespace ( " isLogged " )-> group ( function () {
Route:: get ( " /posts " , function () {
// ...
})-> middleware ( " isAdmin " );
// ...
});
ربما تريد مسارًا تتجاهل فيه اسم المجموعة، يمكنك استخدام المعلمة الثانية لطريقة الاسم لذلك.
Route:: name ( " admin. " )-> group ( function () {
Route:: get ( " /posts " , function () {
// name: app.posts
})-> name ( " app.posts " , true );
});
طُرق:
وظيفة | المعلمة | المعلمة | المعلمة |
---|---|---|---|
إعادة توجيه | سلسلة $uri | إعادة توجيه السلسلة $ | رمز الحالة $ = 302 |
إعادة توجيه دائمة | سلسلة $uri | إعادة توجيه السلسلة $ |
مثال:
// Returns 302 status code by default.
Route:: redirect ( " /here " , " /there " );
Route:: redirect ( " /here " , " /there " , 301 );
// permanentRedirect always returns 301
Route:: permanentRedirect ( " /here " , " /there " );
// You can return an existing route
Route:: redirect ( " /index " , " web.index " );
يكون المسار الاحتياطي مسؤولاً في حالة عدم وجود مسار مسجل بعنوان URL هذا. عندما لا يكون هناك مسار طلبه المستخدم، سيتم استدعاء المسار الاحتياطي.
Route:: fallback ( function () {
echo ' Route error! ' ;
// ...
});
ملاحظة: كن حذرًا إذا كنت تريد إعادة التوجيه إلى مسار موجود، وإذا كان يحتوي على وسائط ديناميكية، فسوف يُرجع التعبير العادي بالكامل وسيتسبب في حدوث خطأ.
كن حذرًا عند إعادة التوجيه إلى مسار موجود، لأنه إذا كان يحتوي على وسائط ديناميكية، فسوف يُرجع التعبير العادي بالكامل ويتم إرجاع الخطأ.
في كل مرة يتم فيها استدعاء المسار واستدعاء طريقة الإغلاق أو وحدة التحكم، سيكون لديك مثيل minasrouter HttpRequest كمعلمة. إذا كان المسار يحتوي على معلمات ديناميكية (إلزامية أو اختيارية)، فيجب تمريرها قبل استلام مثيل الطلب.
وظيفة | المعلمة | المعلمة |
---|---|---|
com.getParams | ||
طريق | ||
عنوان URL | ||
fullUrl | ||
header | سلسلة رأس $ | سلسلة $افتراضية |
hasHeader | سلسلة رأس $ | |
الملكية الفكرية | ||
استفسار | ؟ سلسلة $ الاستعلام | ؟ سلسلة $ الافتراضي |
الجميع | ؟ سلسلة $ باستثناء | |
getMethod | ||
isMethod | سلسلة $expectedMethod |
يتم تمرير المعلمات الديناميكية للمسار مباشرة في الطريقة مع مثيل الطلب.
مثال:
use minasrouter Http Request ;
Route:: get ( " / " , function ( Request $ request )) {
// ...
});
Route:: get ( " /user/{id} " , function ( $ id , Request $ request )) {
// ...
});
Route:: get ( " /posts/{slug?} " , function ( $ slug , Request $ request )) {
// ...
});
Route:: get ( " /book/{slug} " , function ( $ slug , Request $ request ) {
// Retrieving all dynamic parameters
print_r ( $ request -> getParams ());
});
طريقة الطلب هي الطريقة التي تحتوي على جميع بيانات النموذج ومعلمات الاستعلام ومعلمات المسار الديناميكي ورأس الطلب بالكامل.
يقوم أسلوب المسار بإرجاع معلومات مسار الطلب. لذا، إذا كان الطلب الوارد مستهدفًا http://localhost/foo/bar ، فسوف يُرجع التابع المسار foo/bar :
$ uri = $ request -> path ();
لاسترداد عنوان URL الكامل للطلب الوارد، يمكنك استخدام التابعين url أو fullUrl . سيعيد التابع url عنوان URL بدون سلسلة الاستعلام، بينما يتضمن التابع fullUrl سلسلة الاستعلام:
$ url = $ request -> url ();
$ urlWithQueryString = $ request -> fullUrl ();
يمكنك استرداد رأس الطلب من مثيل minasrouter HttpRequest باستخدام طريقة الرأس. إذا لم يكن الرأس موجودًا في الطلب، فسيتم إرجاع قيمة فارغة. مع ذلك، يقبل التابع header وسيطًا ثانيًا اختياريًا سيتم إرجاعه إذا لم يكن الرأس موجودًا في الطلب:
$ value = $ request -> header ( " Header-Name " );
$ value = $ request -> header ( " Header-Name " , " default " );
يمكن استخدام التابع hasHeader لتحديد ما إذا كان الطلب يحتوي على رأس معين:
if ( $ request -> hasHeader ( " Header-Name " )) {
// ...
}
يمكن استخدام الأسلوب BearerToken لاسترداد الرمز المميز للحامل من رأس التفويض. إذا لم يكن هناك مثل هذا الرأس، فسيتم إرجاع القيمة null.
$ token = $ request -> bearerToken ();
يمكن استخدام طريقة ip لاسترداد عنوان IP الخاص بالعميل الذي قدم الطلب إلى موقع الويب الخاص بك:
$ ipAddress = $ request -> ip ();
ستقوم طريقة الاستعلام باسترداد القيم من سلسلة الاستعلام فقط:
$ id = $ request -> query ( " id " );
إذا كانت بيانات قيمة سلسلة الاستعلام المطلوبة غير موجودة، فسيتم إرجاع الوسيطة الثانية لهذه الطريقة:
$ developer = $ request -> query ( " developer " , " Nicollas " );
يمكنك استدعاء أسلوب الاستعلام دون أية وسائط لاسترداد كافة قيم سلسلة الاستعلام.
$ query = $ request -> query ();
يمكنك الوصول إلى بيانات queryString وإدخالها مباشرة، مثل خصائص فئة الطلب.
// http://localhost/?foo=bar
$ foo = $ request -> foo ;
// <input type="text" name="title" value=" minasrouter ">
$ title = $ request -> title ;
يمكنك استرداد جميع بيانات إدخال الطلب الوارد كمصفوفة باستخدام التابع all . يمكن استخدام هذه الطريقة بغض النظر عما إذا كان الطلب الوارد من نموذج HTML أو طلب XHR. إذا كنت تريد إلغاء بعض البيانات، فيمكنك تمريرها كمعلمة ثانية.
$ data = $ request -> all ();
// all, except csrf_token, page
$ data = $ request -> all ( " csrf_token, page " );
سيُرجع أسلوب getMethod فعل HTTP للطلب. يمكنك استخدام التابع isMethod للتحقق من تطابق فعل HTTP مع سلسلة نصية معينة:
$ httpMethod = $ request -> getMethod ();
if ( $ request -> isMethod ( ' POST ' )) {
// ...
}