فهرست

  • مفاهیم پایه مسیریابی
  • استفاده از چند متد مسیریابی بصورت همزمان
  • انتقال به سایر مسیر ها
  • انتقال به یک view
  • مسیریابی با پرامتر
  • مسیریابی با پارمتر اختیاری
  • اعتبارسنجی پارامترها در مسیریابی
    • whereNumber
    • whereAlpha
    • whereAlphaNumberic
    • whereIn
    • where
  • نامگذاری برای مسیرها
  • گروهبندی مسیرها
  • مسیرهای خطا
  • مشاهده لیست مسیرها
  • کش کردن مسیرها

(Routing) به فرآیند هدایت درخواست‌های کاربر به منابع مناسب در سرور را مسیر دهی می گویند بعنوان مثال کاربر می‌خواهد مشخصات یک محصول را مشاهده کند

http://local/product/12

در لاراول، مفهوم مسیردهی (Routing) به شما این امکان را می‌دهد که درخواست‌های ورودی (URLها) را به کنترلرها یا نمای (View)های مناسب هدایت کنید یا دستورات مناسب را بر اساس مسیر اجرا کنید

  • اجرای یک تابع
  • اجرای یک متد از controller
  • نمایش یک view

متدهای route

با استفاده از متدهای زیر میتونیم مسیر های دلخواه را از کاربر دریافت کنیم

برای دریافت اطلاعات از url استفاده میشودroute::get($uri,$callback)
برای ایجاد اطلاعات از post استفاده میشودroute::post($uri,$callback)
برای بروزرسانی اطلاعات استفاده میشودroute::put($uri,$callback)
برای بروزرسانی اطلاعات استفاده میشودroute::patch($uri,$callback)
برای حذف اطلاعات استفاده میشودroute::delete($uri,$callback)
برای دریافت اطلاعات بیشتر درباره یک روت مشخص استفاده میشودroute::options($uri,$callback)

انواع مسیر دهی در لاراول

1. مسیردهی ساده ،نمایش یک view مشخص برای تعریف یک مسیر ساده، می‌توان از متدهای HTTP مانند get، post، put، delete و patch استفاده کرد:

Route::get('/about', function () {
return view('about');
});

در این مثال، درخواست مسیر /about به نمای about.blade.php هدایت می‌شود.

2. مسیردهی با پارامتر

برای دریافت پارامتر از URL، می‌توان از متغیرهای درون آکولاد استفاده کرد:

Route::get('/user/{id}', function ($id) {
return 'User ' . $id;
});

در این مثال، مقدار id از URL استخراج شده و در متغیر $id قرار می‌گیرد.

2.1.فیلتر کردن پارامترها

برای فیلتر کردن میتوانیم از where استفاده کنیم

  • whereNumber بررسی میکند ورودی مورد نظر تنها عدد باشد
  • WhereAlpha بررسی میکند ورودی مورد نظر رشته باشد
  • whereAlphaNumeric هم عدد و هم رشته باشد
  • where از عبارت regx استفاده میکند

مثال:

Route::get('/user/{id}', function ($id) {
return 'User ' . $id;
})->whereNumber('id')

مثال:در درخواست ارسالی id باید عددی باشد و message رشته ای

Route::get('/user/{id}/message/{string}', function ($id,$string) {
return 'User :' . $id.'message:'.$string;
})->whereNumber('id')->WhereAlpha ('string')

مثال:در درخواست ارسالی نام کاربری فقط حروف کوچک و بزرگ باشد

Route::get('/user/{userName}',function($userName){
//
})->where('userName',[a-Z]+)

مثال:ایجاد محدودیت برای زبان و شناسه درخواستی

Route::get('/{lang}/page/{id}',function($lang,$id){
//
})->where(['lang'=>'[a-z]{2}','id'=>'\d{4,}')

مثال: امکان تکرار هر کراکتر حتی / داخل درخواست

Route::get('/search/{search}',function($search){
return($search)
})->where(['search'=>'.+')

3.مسیردهی به کنترلر:اجرای یک متد از یک کنترولر

برای هدایت درخواست‌ها به متدهای کنترلر، استفاده می شود

Route::get('/posts', [PostController::class, 'index']);

در اینجا، درخواست مسیر /posts به متد index در PostController هدایت می‌شود.

4.مسیردهی با نام (Named Routes)

برای نام‌گذاری مسیرها و استفاده از آن‌ها در سایر بخش‌های برنامه، می‌توان از متد name استفاده کرد:

4.1. جلوگیری از تکرار URLها در کد (DRY Principle)

به جای استفاده مستقیم از آدرس‌ها در چندین بخش برنامه (مثل لینک‌ها، ریدایرکتها و ...)، از نام مسیر استفاده می‌کنیم تا اگر URL تغییر کرد، فقط نیاز به اصلاح در یک مکان باشد.

بدون Named Route (مشکل تکرار و خطا):اگر /post را تغییر دهیم باید در تمام لینک ها تغییر ایجاد کنیم

نمایش پست

با Named Route (کد تمیز و قابل مدیریت):در صورت نیتز به تغییر تنها روت را تغییر میدهیم

Route::get('/posts/{slug}', [PostController::class, 'show'])->name('posts.show');
نمایش پست

4.2. ریدایرکت‌های آسان (Redirects)

می‌توانید به جای آدرس‌دهی مستقیم، از نام مسیر برای ریدایرکت استفاده کنید.

return redirect()->route('profile', ['id' => 1]);

برای تولید URL مربوط به این مسیر، می‌توان از تابع route استفاده کرد:

4.3. استفاده در فرم‌ها (Form Actions)

Route::post('/posts', [PostController::class, 'store'])->name('posts.store');


@csrf

ذخیره

5.مسیردهی در کنترلرها (Controller Routes)

return redirect()->route('dashboard');

6. مسیردهی با گروه‌بندی

برای گروه‌بندی مسیرها با ویژگی‌های مشترک مانند پیشوند URL، نام مشترک یا میانه‌افزار (Middleware)، می‌توان از متد prefix، name و middleware استفاده کرد:

مثال: تمامی مسیرهای داخل گروه با پیشوند /admin خواهند بود.

Route::prefix('admin')->group(function () {
Route::get('/dashboard', function () {
// ...
});
});

7.مسیردهی پیش‌فرض (Fallback Routes)

برای تعریف مسیری که در صورت عدم تطابق سایر مسیرها با درخواست، اجرا شود، می‌توان از متد fallback استفاده کرد:

Route::fallback(function () {
return view('404');
});

این مسیر باید آخرین مسیر تعریف‌شده باشد تا در صورت عدم تطابق سایر مسیرها، اجرا شود.

8.مسیریابی که شامل چندین روت همزمان باشد

Route دارای متدی به نام matchهست که می توانیم چندنوع درخواستhttp را به یک مسیر مجاز کنیم در مثال زیر مسیر هر دونوع درخواست GETوPOSTراقبول میکند:


Route::match(['get', 'post'], '/', function()
{
return 'Hello World';
});

9.مسیریابی که شامل همه روت همزمان باشد
در صورتیکه بخواهیم همه خواستها راقبول کنید از متد any استفاده میکنیم مثال http://www.example.com/foo هر درخواستی را قبول میکند:


Route::any('foo', function()
{
return 'Hello World';
});

9.1.مسیریابی انتقال

برای انتقال یک درخواست به مسیر دیگر از redirect استفاده می شود

Route::redirect('/home','/')

مسیر / را به مسیر /home تغییر میدهد

9.2.مسیریابی به یک view

Route::view('/contact','contact')

با مراجعه به مسیر contact/ ویوی contact نمایش داده میشود

9.3.ارسال پارامتر به view

Route::view('/contact','contact',['userId'=>'258'])

در جدول زیر، مهم‌ترین متدها و کاربردهای کلاس Route در لاراول نمایش داده شده است:

متد/ویژگینحوه استفادهکاربردمثال
مسیرهای پایه
get()Route::get(uri, callback)تعریف مسیر GETRoute::get('/users', fn() => 'Users List')
post()Route::post(uri, callback)تعریف مسیر POSTRoute::post('/users', [UserController::class, 'store'])
any()Route::any(uri, callback)پاسخ به همه متدهای HTTPRoute::any('/contact', ContactController::class)
match()Route::match(methods, uri, callback)پاسخ به چند متد خاصRoute::match(['get', 'post'], '/login', [AuthController::class, 'login'])
مسیرهای Resource
resource()Route::resource(uri, controller)ایجاد تمام مسیرهای CRUDRoute::resource('users', UserController::class)
apiResource()Route::apiResource(uri, controller)ایجاد مسیرهای API (بدون create/edit)Route::apiResource('posts', PostController::class)
نام‌گذاری مسیرها
name()Route::...->name('route.name')اختصاص نام به مسیرRoute::get('/profile', fn() => ...)->name('profile')
محدودیت‌ها
where()Route::...->where('param', 'regex')اعتبارسنجی پارامترهاRoute::get('/user/{id}', ...)->where('id', '[0-9]+')
middleware()Route::...->middleware('middleware')اعمال میدلورRoute::get('/admin', ...)->middleware('auth')
پیشوند و گروه‌بندی
prefix()Route::prefix('admin')->group(...)اضافه کردن پیشوند به URIRoute::prefix('api')->group(...)
group()Route::group([options], callback)گروه‌بندی مسیرهاRoute::group(['middleware' => 'auth'], fn() => { ... })
Route Model Binding
مدل در پارامترRoute::get('/users/{user}', ...)تزریق خودکار مدلRoute::get('/users/{user}', fn(User $user) => ...)
متدهای کمکی
view()Route::view(uri, view, [data])بازگرداندن view بدون کنترلرRoute::view('/welcome', 'welcome')
redirect()Route::redirect(from, to, status)ریدایرکتRoute::redirect('/here', '/there')
permanentRedirect()Route::permanentRedirect(from, to)ریدایرکت دائم (301)Route::permanentRedirect('/old', '/new')