الجزء 9: Route Resources
في هذا الجزء سنتعلم كيف نكتب
مجموعة توجيهات عن طريق سطر برمجي واحد بأستخدام الRoute Resources ,
في الأجزاء السابقة تعلمنا كيف نسترجع كافة الأخبار بأستخدام التوجيه التالي:
في الأجزاء السابقة تعلمنا كيف نسترجع كافة الأخبار بأستخدام التوجيه التالي:
get(‘news’,’NewsController@index’);
وكيف نظهر خبر معين بأستخدام
التوجيه التالي:
get(‘news/{slug}’,’NewsController@show’);
وكيف نذهب الى تعديل اي خبر:
get(‘news/{slug}/edit’,’NewsController@edit’);
وعند حفظ صفحة تعديل الخبر سنتوجه
للتوجيه التالي:
patch(‘news/{slug}’,’NewsController@update’);
لاحظ كتبنا 4 توجيهات واخرى يجب
كتابتها مثل انشاء خبر جديد, وتخزين الخبر , وحذف خبر معين:
get(‘news/create’,’NewsController@create’);
post(‘news/{slug}’,’NewsController@store’);
delete(‘news/{slug}’,’NewsController@destroy’);
ملاحظة:لأظهار التوجيهات التي يحتويها الموقع قم بكتابة الكود
التالي في نافذة الأوامر:
php artisan route:list
تخيل لو انشأنا توجيهات للمستخدمين
, سنستعمل نفس المفهوم!!! ولكن هل سنعيد كتابة الكود اعلاه مع كل جزء من الموقع؟؟!
الجواب لا, بل وبكل سهولة يمكن
اختصار التوجيهات المذكورة اعلاه عن طريق سطر برمجي واحد التالي:
$router->resource(‘news’,’NewsController’);
لاحظ استخدمت دالة resource مع كائن
التوجيه $router , دالة resource تقبل ثلاث parameter اول قيمة هو اسم التوجيه الذي يمثل الكل Collection وباقي التوجيهات تأتي تبعاً له, ثاني قيمة هي الController الذي
سيتعامل مع تلك التوجيهات, وثالث قيمة هي لتحديد ما اذا نريد ادراج كافة التوجيهات
او توجيهات محددة حسب اسمها.
طبعاً الناتج لذلك السطر البرمجي, ثمان
توجيهات بالشكل الأفتراضي:
ACTION
|
NAME
|
URI
|
NewsController@index
|
news.index
|
GET|HEAD news
|
NewsController@create
|
news.create
|
GET|HEAD news/create
|
NewsController@store
|
news.store
|
POST news
|
NewsController@show
|
news.show
|
GET|HEAD news/{news}
|
NewsController@edit
|
news.edit
|
GET|HEAD news/{news}/edit
|
NewsController@update
|
news.update
|
PUT news/{news}
|
NewsController@update
|
PATCH news/{news}
|
|
NewsController@destroy
|
news.destroy
|
DELETE news/{news}
|
ربما تسأل لماذا هذه التوجيهات؟ كيف تكون بهذا الشكل؟ ولماذا بهذا الشكل؟
الجواب في الجزء الثاني من هذه
الدورة تعلمت عند انشاء اول Controller هو NewsController عن طريق artisan
وايضاً حددنا الTag –plain مع امر انشاء ذلك الController لكي ينشأ Controller فارغ؟
السؤال اذا لم نحدد ذلك الTAG ماذا سيحدث اي بالشكل التالي: php artisan make:controller NewsController
سينشأ الController مع دوال
افتراضية بالترتيب التالي:
- Index
- Create
- Store
- Show
- Edit
- Update
- Destroy
هذا هو الجواب, التوجيهات المنشأة
عن طريق دالة resource ستعتبر ان الController يحتوي على
الدوال اعلاه كدوال افتراضية وبذلك انشأت 8 توجيهات للدوال السبع في الController مع الملاحظة
انه يوجد توجيهين لحفظ تعديل الخبر Patch,Put.
السؤال هنا ثلاث دوال في موقع
الأخبار لم ننشأها في الNewsController وهي create,store and destroy وعلى الرغم من ذلك عند استخدام دالة resource مع التوجيه
سيتم التوجيه لتلك الدوال الغير موجودة وبذلك سيحدث خطأ عدم وجود دالة لمعالجة
ذلك!!!
الجواب عن طريق تحديد اي من
التوجيهات التي نريد اضافتها في ثالث قيمة من دالة resource كالأتي:
$router->resource(‘news’,’NewsController’,[
‘only’=>[‘index’,’show’,’edit’,’update’]
]);
او يمكن تحديد اي من التوجيهات
التي لا نريدها:
$router->resource(‘news’,’NewsController’,[
‘except=>[‘create,’store’,’delete’]
]);
للننشأ تطبيق بسيط لفهم ذلك, سأنشأ
controller للمستخدمين
سأسميه userController بدون
تزويد الأمر بTAG --plain:
php artisan make:controller usersController
ثاني شيء انشاء توجيه لكل تلك
الدوال عن طريق سطر برمجي واحد في routes.php وبأستخدام دالة resource:
$router->resource('users','usersController');
سأقوم بتعديل ثلاث دوال في الuserController لأسترجاع استجابة عند زيارة التوجيه:
public function
index()
{
return 'Welcome to users panel';
}
public function create()
{
return 'Oh, you\'re new user want to
register welcome :)';
}
public function show($id)
{
return 'Welcome user with ID: '.$id;
}
بما ان الأجابة تكون لثلاث دوال
التالية index,show,create سأقوم بزيارة كل وحدة على حدة:
Comments
Post a Comment