قهرمان اول لاراول – Routing
مسیریابی لاراول
در این آموزش قصد داریم تا Routing برای فریم ورک لاراول توضیح بدیم . اما اول از اون بهتره بدونیم که مسیر درخواست ها و پاسخگویی لاراول چطوریه.
ساختار چرخه ی درخواست در لاراول (MVC Request Life Cycle)
همونطور که مشاهده می کنین هر درخواست که توسط کاربر برای سرور ارسال میشه:
ابتدا وارد Routing شده سپس با توجه به درخواست به Controller مشخص شده فرستاده میشه . اگر نیاز به تعامل با دیتابیس وجود داشته باشه Controller از طریق Model با دیتا بیس تعامل میکنه.
نتایج حاصل رو از Model دریافت میکنه و در نهایت اونا رو برای View می فرسته و View برای کاربر قابل مشاهده خواهد بود .
Routing (مسیریابی)
روت بدی های همون Routing یا به فارسی مسیریابی به لطف موتور routing لاراول خیلی آسون شده در حالی که این مبحث برای خیلی از توسعه دهنده ها یک مصیبت حساب میشه ولی به لطف لاراول دیگه از این چیزا خبری نیست.
فایل مربوط به Routing رو میتونین از مسیر زیر پیدا کنید :
root/routes/web.php
اگر این فایلو باز کنید با چینین منظره ای روبه رو میشین :
<?php
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', function () {
return view('welcome');
});
اما توضیحات : اگر دقت کنید هر روت یا همون مسیر از سه بخش تشکیل شده . شکل بالای روت که می بنید بنا بر خود لاراول ، مسیربای ساده نام داره .
Route::requste_type(‘URL’,’CALLBACK’);
برای یک مثال :
Route::get(‘/posts’,callback_function);
url یا آدرس اینترنتی یک Route
اول بخش دومو میگیم بعد چون که اینجوری راحت تر قابل فهم میشه واسه ما . بخش دوم آدرس روت یا همون مسیر رو مشخص میکنه.
توی مثال بالا دقت کنید مسیر /post مشخص شده یعنی هر وقت درخواستی به شکل زیر بیاد روت بالا عمل خواهد کرد.
larave.dev/posts
الان شما می تونین این مسیر رو به هر شکلی که بخوایین تعویض کنید برای مثال :
laravel.dev/category/posts
که این روت به شکل زیر میشه .
Route::get('/category/posts',callback)
آما همونطور که میبنید این روت ها و مسیرها به صورت استاتیک هستش اما چطور میشه یک روت داینامیک درست کرد . به مثال زیر توجه کنید .
Route::get('/category/posts/{id}',callback)
اگر به مثال بالا توجه کنید متوجه {id} میشد . این به این معناس که بعد از این روت استاتیکی که معلوم شده هر چی اومد توی متغییر ایدی ذخیره کن و برای ما بفرست . برای مثال :
larave.dev/category/posts/23
Route::get('/category/posts/{id}',function($id){
return $id;
})
توی این مثال ای روت داینامیک عدد 23 رو بر میگردونه و شما متوجه میشین که چطور میشه به پارامتر های ارسالی از get رو دسترسی پیدا کرد. مثال بعدی :
larave.dev/category/posts/23/first-post
Route::get('/category/posts/{id}/{url}',function($id , $url){
return $id . ' - ' $url;
})
توی این مثال عدد 23 در متغییر $id قابل دسترسی خواهد بود و first-post در متغییر $url .
Callback Function یا عملگر یک Route
بخش سوم callback . در بخش سوم باید معلوم کنید که بعد از تشخیص روت باید چه عملی اتفاق بیوفته .توی مثال اول :
Route::get('/', function () {
return view('welcome');
});
روت بعد از تشخیص سریعا View به اسم wellcome رو برمیگردونه یا میتونه یک کدو انجام بده یا کنترلی رو اجرا کنه . برای مثال :
Route::get('foo', function () {
return 'Hello World';
});
توی این مثال عبارت hello word نشان داده خواهد شد و اما برای ارسال به کنترل دیگه ای :
Route::get('/user', 'UserController@index');
در این روت کنترل UserController رو درخواست کرده و متد index رو خواسته . البته ما اینجا فقط این قسمت رو به صورت ساده توضیح میدیم و در قسمت controller ها این مبحث مفصل بحث خواهد شد.
Route type یا نوع درخواست ارسالی از طرف کاربر برای Route
بخش اول هر روت که نوع درخواست روت نشون میده .
مثلا : get که توی مثال بالا می بینید . یعنی هر وقت دستوری از نوع get به سرور با مشخصات که تعیین شده برسه این روت اعمال میشه.
خش اول هر روت که نوع درخواست روت نشون میده . مثلا : get که توی مثال بالا می بینید . یعنی هر وقت دستوری از نوع get به سرور با مشخصات که تعیین شده برسه این روت اعمال میشه.
اما چند نوع درخواست داریم.
Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);
امروزه توی مرورگرهای مدرن فقط get , post رو میتونیم داشته باشیم ولی لاراول تونسته این روت ها رو با ترفندی برای ما ایجاد کنه .
این نوع روت های مختلف باعث میشه تا ما ادرس کمتری داشته باشیم و باعث سردرگمی ما توی پروژه های بزرگ نمیشه .مثلا:
-
Route::get('posts', $callback);
- برای گرفتن تمامی پست ها
-
Route::get('posts/{id}', $callback);
- برای گرفتن یک پست
-
Route::post('posts', $callback);
- برای ایجاد کردن پست جدید
-
Route::put('posts/{id}', $callback);
- برای اپدیت کردن یک پست
-
Route::delete('posts/{id}', $callback);
- برای حدف یک پست
انواع دیگر Routing
علاوه بر انواع روت های گفته شده انواع دیگری از روت های دیگر هم وجود دارد که فقط اینجا ذکرشون میکنیم ، زیرا توضیحشون هم خیلی وقت گیره و در این سطح استفاده نمیشه.
البتع سعی میکنم توی آموزش ساخت وبلاگ از این نوع Route ها هم استفاده بشه تا شما بیشتر متوجه اونا بشین .
روت با ساختار match
Route::match(['get', 'post'], '/', function () {
//
});
روت با ساختار any
Route::any('/', function () {
//
});
روت با ساختار redirect
Route::redirect('/here', '/there');
Route::redirect('/here', '/there', 301);
Route::permanentRedirect('/here', '/there');
روت با ساختار View
Route::view('/welcome', 'welcome');
البته همچنان انواع روت های دیگری هم وجود دارن که بهشون اشاره نشد ولی سعی میشه که توی آموزش ها ازشون استفاده بشه .
البته در صورت تمایل شما برای اطلاعات بیشتر میتونین از لینک زیر این مبحثو بیشتر مطالعه کنید .
https://laravel.com/docs/6.0/routing
تمرین و نتیجه گیری
الان میخوایین برای شروع اولین روت خودمونو درس کنیم . ابتدا باید روت اول سایتو عوض کنیم .
Route::get('/', function () {
return view('frontpage');
});
همونطور که متوجه شدین اسم view رو تغییر دادیم به frontpage یعنی در صورت درخواست روت اولیه یا همان وب سایت اصلی باید view که برای صفحه frontpage هست رو نشون بده.
برای ساخت این view از مسیر زیر عمل میکنید.
root/master/resources/views
بعد توی همون پوشه views یک فایل به اسم frontpage.blade.php رو میسازین.
توجه کنید که پسوند .blade.php رو باید رعایت کنین تا لاراول بتونه template engine رو استفاده کنه.
برای این که این روت خالی نمونه از یک قالب آماده بوت استرپ استفاده می کنیم که من قبلا براتون توی این فایل txt گذاشتم .
کافی شما فقط محتویات این فایلو توی view جدیدی که درس کردین کپی کنین و تمام.