مزایای استفاده از Route Groups
یکی از مشکلات ما برنامه نویس ها نوشن کدهای تکراری هست که باعث میشه خوانایی برنامه پایین بیاد و حجم کدها افزایش پیدا کنه و توسعه برنامه را سخت و غیر ممکن کنه!. اگر ما بتوانیم این مشکل را حل کنیم سرعت برنامه نویسی به طور قابل توجهی افزایش پیدا میکنه و لاراول با امکاناتی خوبی که داره توانسته حجم کد های نوشته شده را کاهش بده و خوانایی کدها را بالا ببره.
موضوعی که درموردش میخوایم صحبت کنیم طریقه استفاده از Route Group هست که باهاش میتونیم روت هامون رو گروه بندی کنیم و قسمت های مشترک آنها رو حذف کنیم و در گروه اصلی آنها وارد کنیم . که استفاده از اون تا حد زیادی به کم کردن کد های تکراری و درنتیجه خوانایی بیشتر کمک میکنه .
به مثال زیر توجه کنید :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// app/routes.php Route::group(array('before' => 'onlybrogrammers'), function () { // First Route Route::get('/first', function () { return 'Dude!'; }); // Second Route Route::get('/second', function () { return 'Duuuuude!'; }); // Third Route Route::get('/third', function () { return 'Come at me bro.'; }); }); |
توی مثال بالا ما داریم از متد Group از فاساد/سرویس Route استفاده میکنیم . و اولین پارامتر ما یک آرایه از خصوصیاتی که میخوایم به گروه روت ها اعمال کنیم است . این خصوصیات عبارت اند از ( فیلترها ، Namespace ، Middleware ، Where ، Domain ) که در نهایت این خصوصیات میتونه بر روی روت های عضو این گروه اعمال بشه .
زمانی که شما روت های جدید به این گروه اضافه میکنید روت های شما خصوصیات این گروه رو ارث بری میکنند . در مثال بالا سه روتی که ما در این گروه تعریف کرده ایم فیلتر onlyprogrammers
بر روی آنها اعمال خواهد شد .
اگر روت های شما ساختار URL مشابهی دارند با اعمال خصوصیت prefix
در گروه ، میتوانید حجم انبوهی از کدهای تکراری را توی فایل routes.php حذف کنید.
به مثال زیر توجه کنید :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Route::group(array('prefix' => 'books'), function () { // First Route Route::get('/first', function () { return 'The Colour of Magic'; }); // Second Route Route::get('/second', function () { return 'Reaper Man'; }); // Third Route Route::get('/third', function () { return 'Lords and Ladies'; }); }); |
هر سه روت بالا از این به بعد با آدرس های زیر قابل دسترس خواهند بود :
1 2 3 4 5 |
/books/first /books/second /books/third |
مثالی دیگر ، ما میخوایم بخش ادمین وبسایت مون با پسوند /admin شروع بشه و این بخش نیاز به سیستم احراز هویت داره ، برای این کار فقط کافیه نقاط اشتراک روت هامون رو در Route::group تعریف کینم :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Route::group(['prefix' => 'admin', 'middleware' => 'auth'], function () { // main page for the admin section (app/views/admin/dashboard.blade.php) Route::get('/', function () { return View::make('admin.dashboard'); }); // subpage for the posts found at /admin/posts (app/views/admin/posts.blade.php) Route::get('posts', function () { return View::make('admin.posts'); }); // subpage to create a post found at /admin/posts/create (app/views/admin/posts-create.blade.php) Route::get('posts/create', function () { return View::make('admin.posts-create'); }); }); |
و همچنین میتوانیم برای تمامی پارامتر هایی موجود در روت های عضو آن گروه محدودیت ایجاد نماییم .
1 2 3 4 5 6 7 |
Route::group([ 'prefix' => 'accounts/{account_id}', 'where' => ['account_id' => '[0-9]+'], ], function() { // Define Routes Here }); |
استفاده از Namespace در گروه روت ها :
شما از روت های زیادی استفاده میکنید که خصوصیات یکسانی دارند ، مثلا تمامی روت های admin شما درnamespace (فضای نام) \Controllers\Admin قرار دارند پس بهتره برای همه آنها یک Group تعریف کنیم و Namespace را در آن قرار دهیم تا در تمامی روت های زیرگروه آن اعمال شود .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Route::group(['namespace' => 'Admin'], function() { get('admin/news', [ 'uses' => 'NewsController@index' ]); post('admin/news/add', [ 'uses' => 'NewsController@create' ]); any('admin/users', [ 'uses' => 'UserController@index' ]); // ... }); |
در مثال بالا ما برای خوانایی بیشتر از هلپرهای get و post و any استفاده کرده ایم .
مستندات فارسی در مورد Route و Route Group
با سلام و تشکر
چطور میتوان در لاراول ۵٫۳ تمامی در خواستهای ارسال شده را بدون پردازش یا واگذاری به Route خاصی دریافت نمود و بعد بر روی آن عملیاتی را انجام داد؟
مثلا اگر ادرس زیر ارسال شد
domain.com/user/?id=200&p=300
چگونه میتوان تمامی آدرس بالارا داشته باشیم
user/?id=200&p=300
باز هم از لطف شما تشکر میکنم
سلام
تشکر بابت مطلب مفیدتون
برای دادن دسترسی مدیریتی به یکسری از متدها آیا باید همه اون ها رو تک تک داخل :
Route::group([‘prefix’ => ‘panel’, ‘before’ => ‘jwt-auth’], function () {
Route::get(‘users/profile/show’, ‘ProfileController@show’);
});
نوشت؟
یعنی راهی ندارد که بگویم هرچی یو ار ال که با کلمه پنل مثلا شروع می شوند رو خودکار از فیلتر:
jwt-auth
عبور بده بجای اینکه ما بیایم تک تک روت ها رو داخل این بلاک کنترلی بنویسیم؟
یعنی در یک نقطه تعریف کنیم:
Route::group([‘prefix’ => ‘panel’, ‘before’ => ‘jwt-auth’], function () {
});
در هر جای دیگه که نوشتیم
Route::get(‘panel/users/profile/show’, ‘ProfileController@show’);
خودکار از فیلتر
jwt-auth
عبور کن؟؟
ممنون می شوم راهنمایی کنید.
سلام . خیر دوست عزیز شما اشتباه برداشت کردی .
شما تمامی روت هایی که اون فیلتر روش اجرا بشه رو توی group قرار بده تا فیلتر بر روی همش اعمال بشه . نه اینکه برای هر روت یه group بسازی!
سلام
تشکر بابت پاسختون
فرمایش شما درست
ولی من به دلیل ماژولار بودن پروژه چندین فایل روت در پوشه های متفاوت دارم که باید برای همه این قسمت رو تکرار کنیم.
راهی ندارد که بر اساس پرفیکس مسیر ها قبلش از فیلتری یک جا عبور داده شوند؟