Skip to main content

الدرس التاسع: توجيه المصادر Route Resource


الجزء 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

Popular posts from this blog

PART #2: Registration and Login System Tutorial Using PHP and MYSQL

PART #2: Registration and Login System Tutorial Using PHP and MYSQL Registration and login system using PHP and MySQL database, in this part you will do the following: 1- Creating the registration page. 2- Validating the registration form. 3- Sending the activation link on successful registration. note: you can find the mailserver tool here: [MailServerTool] Good luck. PHP,Mysql,Programming,web development,How to,Technology,web programming,web project ideas,safaa al-hayali,saf3al2a,Registration and login,Registration and login in php,php and mysql login system,registration system using php and mysql,login and register php,login and register php with database,database,php tutorial,learn php,tutorial

How To Play .srt Subtitles File in Windows Media Player

How To Play .srt Subtitles File in Windows Media Player links: https://sourceforge.net/projects/wmpsub/ wmp,.srt Subtitles File in Windows Media Player,How To Play .srt Subtitles File in Windows Media Player,How To,Safaa Al-Hayali,saf3al2a,srt subtitle in WMP,Windows,Windows Media Player,media,.ass,local subtitles

Virtual Box : How to Increase Disk Size - Windows

How to increase disk size or disk storage in oracle virtual box the command you have to use: vboxmanage.exe modifymedium "[YourPathToVdiFileOfYourVirtualMachine]" --resize [NUMBER] virtual,box,vbox,oracle,partition,size,disk,increase,resize,windows,10,microsoft,vdi,vboxmanage,configuration,Safaa AL-Hayali,saf3al2a,Oracle,VirtualBox,How to,windows 10