از مزیت های ÙØ±ÛŒÙ…ورک لاراول نسبت به سایر ÙØ±ÛŒÙ…ورک های PHP Ù…Ø¨ØØ« Routing آن است Ú©Ù‡ Ù…ÛŒ توان مدیریت خوبی روی مسیرها داشت.
در مسیر app/Http Ùˆ ÙØ§ÛŒÙ„ routes.php Ù…ÛŒ توانیم تمامی مسیرهای برنامه را در آنجا تعری٠و مدیریت کنیم.این ÙØ§ÛŒÙ„ توسط کلاس App\Providers\RouteServiceProvider بارگزاری Ù…ÛŒ شود.
یک مثال ساده:
Route::get('/', function() {
return 'Hello World';
});
کلاس Route چند متد دارد Ú©Ù‡ نوع درخواست http را مشخص میکند. در مثال بالا متد get Ùقط در خواست های GET به این مسیر را قبول میکند. سایر متدها Ú©Ù‡ نوع درخواست http را مشخص میکنند delete, patch, put , postÙ…ÛŒ باشند. این متد دوتا پارامتر Ù…ÛŒ گیرد Ú©Ù‡ اولی مسیری است Ú©Ù‡ بعد از نام دامنه سایت Ù…ÛŒ آید مثال در آدرس http://www.example.com/about مسیری Ú©Ù‡ وارد میکنیم about است .
در پارامتر دومی هم Ù…ÛŒ توانیم بدون Ø§Ø³ØªÙØ§Ø¯Ù‡ از کنترلر Ùˆ اکشن Ùˆ با دادن یک تابع بی نام در همین روتر آن را مدیریت کنیم.
کلاس Route دارای متد دیگری به نام match هست که می توانیم چند نوع درخواست http را به یک مسیر مجاز کنیم در مثال زیر مسیر هردونوع درخواست GET و POST را قبول می کند :
Route::match(['get', 'post'], '/', function() {
return 'Hello World';
});
در صورتی Ú©Ù‡ بخواهیم مسیر همه در خواست ها را قبول کنید از متد any Ø§Ø³ØªÙØ§Ø¯Ù‡ میکنیم مثال آدرس http://www.example.com/foo هر درخواستی را قبول میکند :
Route::any('foo', function() {
return 'Hello World';
});
HTML درخواست های DELETE , PUT یا PATCH را پشتیبانی نمی کند برای اینکه یک ÙØ±Ù… HTML را با این متدها تعری٠کنیم کاÙیه یک تگ input از نوع hidden Ùˆ با نام method _تعری٠میکنیم Ùˆ به value آن یکی از مقادیر PATCH, DELETE, PUT را بدهید مثال:
<form action=”/foo/bar” method=”POST”>
<input type=”hidden” name=”_method” value=”PUT”>
<input type=”hidden” name=”_token” value=”<?php echo csrt_token();?>”>
</form>
در مثال بالا آدرس http://www.example.com/foo/bar در روتر با متد put قابل Ø¯Ø±ÛŒØ§ÙØª است Ú©Ù‡ Ù…ÛŒ توانیم برای PATCH , DELETE هم به همین صورت عمل کنیم. کاربرد این متدها را در بخش کنترلر ها ØªØ´Ø±ÛŒØ Ø®ÙˆØ§Ù‡Ù… کرد. همچنین یک تگ از نوع مخÙÛŒ به نام _token هم در ÙØ±Ù… وجود دارد Ú©Ù‡ در یک پست جداگانه در مورد ÙØ±Ù… ها Ùˆ کار با آنها ØªÙˆØ¶ÛŒØ Ø®ÙˆØ§Ù‡Ù… داد.
مسیر با پارامتر
به همراه مسیر Ù…ÛŒ توانیم هر تعداد پارامتر را هم ارسال کنیم Ùقط کاÙÛŒ است نام پارامترها را داخل آکوالد قرار دهیم. به مثال های زیر توجه کنید:
Route::get('user/{id}', function($id) {
return 'User '.$id;
});
Route::get('user/{name?}', function($name = null) {
return $name;
});
Route::get('user/{name?}', function($name = 'John') {
return $name;
});
در مثال های بالا همانطور Ú©Ù‡ مشاهده کردید Ù…ÛŒ توانیم برای پارامترها یک مقدار پیش ÙØ±Ø¶ یا null هم در نظر Ú¯Ø±ÙØª تا درصورت وارد نکردن مقداری برای پارامتر در url خطایی ایجاد نشود. همچنین باید جلوی نام پارامتر های اختیاری یک عالمت ? قرار دهیم.
Ø§ÙØ²ÙˆØ¯Ù† عبارت منظم به پارامتره
Ù…ÛŒ توانیم با Ø§ÙØ²ÙˆØ¯Ù† متد where به انتهای متد get برای هر پارامتر یک عبارت منظم هم تعری٠کرد تا مثال id Ùقط مقدار عدد مورد قبول باشد. در صورتی Ú©Ù‡ چند پارامتر را بخواهیم برایش عبارت منظم تعری٠کنیم آنها را داخل آرایه قرار Ù…ÛŒ دهیم.
Route::get('user/{id}/{name}', function($id, $name) {
//
}) ->where(['id' => '[0-9]+', 'name' => '[a-z]+'])
همچنین Ù…ÛŒ توانیم برای یک پارامتر خاص در Ú©Ù„ برنامه یک عبارت منظم عمومی تعری٠کنیم به این صورت Ú©Ù‡ در کلاس RouteServiceProvider در دایرکتوری app/Providers در متد boot این عبارت را قرار دهیم مثال در مثال زیر کاربر در routing هرجایی از پارامتر id Ø§Ø³ØªÙØ§Ø¯Ù‡ کرد Ùقط مجاز به دادن مقدار عددی به آن است Ùˆ دیگر مانند بالا نیاز به تعری٠متد where نیست :
$router->pattern('id', '[0-9]+');
مسیردهی به یک کنترلر و اکشن
Route::get('user/{id}', 'UserController@showProfile');
در پارامتر دوم Ùقط کاÙÛŒ است بین نام کلاس کنترلر Ùˆ اکشن یک عالمت @ قرار دهیم.
نامگزاری مسیر
با Ø§Ø³ØªÙØ§Ø¯Ù‡ از کلمه as Ù…ÛŒ توانیم برای مسیر یک نام هم تعری٠کنیم Ùˆ همچنین با Ø§Ø³ØªÙØ§Ø¯Ù‡ از uses Ù…ÛŒ توانیم آن را به اکشن Ùˆ کنترلر خاصی هدایت کنیم.
Route::get('user/profile', [
'as' => 'profile', 'uses' => 'UserController@showProfile'
]);
از کاربردهای نامگزاری مسیر برای ایجاد Ùˆ ساختن url است Ú©Ù‡ Ù…ÛŒ توانیم با Ø§Ø³ØªÙØ§Ø¯Ù‡ از تابع Ú©Ù…Ú©ÛŒ route نام مسیر را به آن بدهیم مثال در مثال بالا با دادن نام profile آدرس http://www.example.com/user/profile ایجاد خواهد شد Ùˆ همچنین برای ریدایرکت به یک مسیر هم کاربرد دارد.
$url = route('profile');
$redirect = redirect()->route('profile');
مسیردهی گروهی
در لاراول می توانیم یک دسته از مسیرها را که مثال در یک قسمت از url خود مشترک هستند یا middleware مشترکی دارند و یا دارای یک namespace مشترک هستند را در یک گروه قرار دهیم. همچنین می توانیم domain-sub ها را از این طریق مدیریت کنیم.
Route::group(['prefix' => 'admin'], function() {
Route::get('users', function() {
// Matches The '/admin/users' URL
});
})
در مثال بالا تمامی مسیرهایی که با admin شروع می شوند را داخل این گروه قرار می دهیم.
برای اطلاعات و مثال های بیشتر در این مورد می توانید به اینجا مراجعه کنید.