آموزش مسیردهی Routing در لاراول 6 ، در این پست Routing ها در لاراول را آموزش خواهیم داد.همچنین نحوه ی ایجاد URL های SEO friendly با Routing لاراول را مورد بحث قرار خواهیم داد.مسیردهی یا Routing لاراول برای استفاده به دلیل انعطاف پذیری آن بسیار ساده و آسان است.با ما همراه باشید.
سرفصل های آموزش مسیردهی Routing در لاراول 6
Routing یکی از عناصر اصلی هر فریمورک تحت وب است. استفاده از مسیردهی یا Routing لاراول به دلیل انعطاف پذیری آن بسیار ساده و آسان است. در این پست خواهیم دید که چگونه می توان از Routing برای تولید URL های SEO friendly استفاده کرد. با ما همراه باشید.
Routing راهی برای ایجاد یک URL درخواست برای برنامه شما است.در لاراول همه درخواست ها با کمک Route ها نگاشت می شوند. تمام Route ها در پوشه routes ایجاد می شوند.
برای برنامه وب خود می توانید مسیرها یا Route های مربوط به برنامه را در فایل web.php تعریف کنید و برای API همه مسیرها در فایل api.php تعریف می شوند.
در ادامه نحوه تعریف مسیر برای وب را مشاهده می کنید:
Route::get('/', function () {
return view('welcome');
});
به عنوان مثال کد بالا یک Route را تعریف می کند که یک درخواست ” / ” را دریافت می کند و view با نام welcome را برمی گرداند.
تعریف Route ها در لاراول بسیار ساده است ، شما Route جدیدی را با فاساد Route:: شروع می کنید و سپس در پیِ آن نوع درخواستی که می خواهید به آن Route اختصاص دهید می آورید. تابعی که بعد از دریافت درخواست اجرا می شود یا به بیانی دیگر تابعی که به موجب پردازش درخواست اجرا می شود، بعد از آن خواهد آمد. در اینجا تمام متد های Route یا انواع درخواستی که می توانید در لاراول استفاده کنید ، آورده شده است:
شما می توانید یک متد کنترلر را به یک Route منتقل کنید یا به عباری دیگر پاس بدهید.زمانی که کاربر از یک Route بازدید می کند متد تعریف شده در کنترلر برای انجام کارهای تعریف شده اجرا می شود.
به جای پاس دادن یک تابع closure در پارامتر دوم یک Route ، می توانید مانند زیر یک کنترلر به همراه یک متد به آن پاس دهید.
Route::get('/about', 'WebController@about');
در قطعه کد بالا ، route با فاساد Route:: شروع شده است و سپس متد درخواستی که استفاده می کنیم که در بالا از متد get استفاده کرده ایم.
در مرحله بعد یک مسیر ‘/about’ تعریف می کنیم و سپس یک کنترلر به همراه متد آن که می خواهیم به این route متصل باشد (با اضافه کردن علامت @ قبل از نام متد) را تعریف می کنیم.
دقیقاً مانند سایر فریمورک های تحت وب ، پاس دادن پارامتر در route های لاراول امکان پذیر است. در ادامه مسیر یا route ی ایجاد می کنیم که یک عدد بگیرد و سپس آن را روی صفحه نمایش چاپ کند.
Route::get('/page/{num}', function ($num) {
echo "عدد گرفته شده: ". $num;
});
همچنین بخوانید: آموزش لاراول 6 از ابتدا | گام به گام
در قطعه کد بالا ، مسیری را ایجاد کردیم که یک پارامتر num را می گیرد و آن را به تابع route منتقل می کند.
اکنون ، هر زمان که از /page بازدید کنید با پاس دادن پارامتر num به عنوان مثال /page/4 ، روی صفحه نمایش شما در صفحه 4 چاپ می شود. پارامتر num می تواند هر عددی باشد.
همچنین می توان پارامتر route را به پارامترهای اختیاری تبدیل کرد. فقط کافیست علامت ? را به انتهایی نام پارامتر اضافه کنیم تا پارمتر به پارامتر اختیاری تبدیل شود. برای مثال ، برای کد مثال بالا ، می توانیم پارامتر را مانند زیر تغییر دهیم.
Route::get('/page/{num?}', function ($num = 4) {
echo "عدد گرفته شده: ". $num;
});
حال اگر بدون پاس دادن پارامتر از route بازدید کنیم ، به طور پیش فرض $num روی 4 تنظیم می شود.
در کد مثال بالا ، پارامتر $num ما هر ورودی مانند رشته دریافت می کند ،اما اگر بخواهیم نوع پارامتر را برای یک عدد معتبر محدود کنیم ، چه باید کرد. در لاراول ما می توانیم با افزودن متد where به route محدودیت ها را در route تعیین یا اعمال کنیم.متد where یک نام و یک عبارات با قاعده (Regular Expressions) را به عنوان پارامتر می گیرد. در ادامه محدودیتی را در route مثال فوق تعریف می کنیم تا فقط یک عدد معتبر را بپذیرد.
Route::get('/page/{num?}', function ($num = 4) {
echo "عدد گرفته شده: ". $num;
})->where('num', '[0-9]+');
در کد مثال بالا ، ما قانون یا قاعده ای را برای گرفتن فقط عدد معتبر برای پارامتر num تعریف کرده ایم. حال اگر بخواهیم یک رشته را منتقل کنیم یا به عبارتی پاس بدهیم ، با NotFoundHttpException مواجه خواهیم شد.
لاراول راهی آسان برای نامگذاری route های ما فراهم می کند که با استفاده از آنها لازم نیست URI را در view های blade خود کد گذاری کنیم.به عنوان مثال ، اگر بخواهیم اطلاعات یک فرم را به یک آدرس (URL) ارسال کنیم به جای اینکه یک URL طولانی را برای action فرم ست کنیم کافیه فقط از نام route استفاده می کنیم.
شما می توانید مانند زیر از متد name برای نام گذاری route ها استفاده کنید:
Route::post('/submit', 'ContactFormController@submitForm')->name('contact.submit');
اکنون می توانیم action فرم را مانند زیر تنظیم کنیم:
<form action="{{ route('contact.submit') }}" /></form>
گروه های route لاراول به ما این امکان را می دهند که خصوصیات route مانند prefix ، middlewares و namespaces را در میان کلیه route های داخل آن گروه به اشتراک بگذاریم.
ویژگی ها یا خصوصیات به اشتراک گذاشته شده در قالب آرایه به عنوان اولین پارامتر متد Route::group تعیین می شوند.
Route::group(['prefix' => 'posts', 'as' => 'posts.'], function () {
Route::get('/', 'PostController@index')->name('index');
Route::get('/create', 'PostController@create')->name('create');
Route::post('/store' 'PostController@store')->name('store');
});
همچین بخوانید: ساخت RESTful API برای عملیات CRUD در لاراول به همراه احراز هویت با استفاده از Passport
در گروه route بالا URL های زیر ایجاد می شود:
/posts : با نام posts.index
/posts/create : با نام posts.create
/posts/store : با نام posts.store
در گروه route بالا پیشوند یا prefix همه route های درون گروه posts می باشد و قبل از نام همه ی route ها posts. اضافه می شود (چون در گروه route خود برای نام های route ها از as => posts استفاده کرده ایم ).
همچنین می توان برای route ها ، گروه های تودرتو ایجاد کرد.در کد مثال بالا ما می خواهیم route های create و store را فقط برای کاربران تایید شده ایجاد کنیم.برای این کار ، ما یک گروه route دیگر ایجاد می کنیم ، دو route به آن اضافه می کنیم و سپس مانند زیر یک middleware برای route ها ست می کنیم.
Route::group(['prefix' => 'posts', 'as' => 'posts.'], function () {
Route::get('/', 'PostController@index')->name('index');
Route::group(['middleware' => ['auth']], function () {
Route::get('/create', 'PostController@create')->name('create');
Route::post('/store' 'PostController@store')->name('store');
});
});
ما همچنین می توانیم با استفاده از گروه های route برای کنترلرها مانند زیر namespace (namespace در php مطالعه شود) تعریف کنیم.
Route::group(['namespace' => 'Post'])
// this route group will load all controllers
//from within the "App\Http\Controllers\Post"
بنابراین ، در کد مثال بالا ، namespace را درست مانند زیر تعریف خواهیم کرد.
Route::group(['namespace' => 'Post','prefix' => 'posts', 'as' => 'posts.'], function () {
Route::get('/', 'PostController@index')->name('index');
Route::group(['middleware' => ['auth']], function () {
Route::get('/create', 'PostController@create')->name('create');
Route::post('/store' 'PostController@store')->name('store');
});
});
توجه
می توانید به جای استفاده از فرمت آرایه (همانطور که در بالا استفاده کرده ایم) ، از prefix() ، namespace() و سایر متدهای route استفاده کنید. ما ترجیح می دهیم از قالب آرایه استفاده کنیم به این دلیل که کدنویسی را تمیزتر می کند.
کش کردن همه ی route ها باعث سریعتر شدن برنامه ما می شود.گاهی اوقات ممکن است در شرایطی قرار بگیریم که route های ما مطابق آنچه انتظار می رود کار نکنند. این ممکن است به دلیل کش شدن route های ما باشد. برای پاک کردن کلیه route های کش شده می توانیم از دستور artisan زیر استفاده کنیم.
php artisan route:clear
همچنین اگر بخواهیم route ها را کش کنیم ، می توانیم دستور artisan زیر را برای کش کردن تمام route ها اجرا کنیم.
php artisan route:cache
با استفاده از دستور artisan زیر می توانیم کلیه route های ثبت شده در برنامه خود را پیدا کنیم.
php artisan route:list
با استفاده از دستور فوق ، می توانیم نام ها ، URL ها و middleware های مورد استفاده در route ها را مشاهده کنیم که این برای اهداف اشکال زدایی بسیار مفید است.
لاراول سیستم مسیردهی بسیار قدرتمندی را ارائه می دهد. برای کسب اطلاعات بیشتر در مورد Routing ، می توانید به داکیومنت رسمی Laravel Routing نیز مراجعه کنید.