استفاده از پارامترها در لاراول

چاپ

اگر قصد دارید برای route خود تعدادی پارامتر تعریف کنید(منظور متغیرهایی هستند که در ساختار URL قرار دارند) به راحتی می توانید آنها را طبق مثال 3.5 تعریف کنید و سپس آنها را به کلوژر پاس دهید:

(مثال 3.5)

Route::get('users/{id}/friends', function ($id) {
   //
});

 


ارتباط بین پارامترهای route و پارامترهای کلوژر یا کنترلر

همان طور که در مثال 3.5 مشاهده می کنید، متداول ترین راه این است که برای پارامترهای route (در اینجا {id}) و پارامترهای درون تابع یعنی id$، نام های مشابهی تعریف کنید. اما این کار جز در زمان متصل کردن route و model اجباری نیست. 

تنها راهی که می توانیم مشخص کنیم که کدام پارامتر route با کدام پارامتر از متد تطابق دارد، ترتیب قرار گیری آنها از سمت چپ به راست است. درست مثل زیر:

Route::get('users/{userId}/comments/{commentId}', function (
   $thisIsActuallyTheRouteId,
   $thisisReallyTheCommentId
) {
   //
});

 توصیه می شود که نام پارامترها یکسان انتخاب شود. اما این کار واجب نیست. 


شما همچنین می توانید با قرار دادن یک علامت سوال(?) پس از نام پارامتر، کاری کنید که این پارامتر اختیاری شود. این موضوع در مثال 3.6 نشان داده شده است. در این صورت شما باید یک مقدار پیش فرض را برای متغیر مربوطه ی route ارائه دهید. 

Route::get('users/{id?}', function ($id = 'fallbackId') {
  //
});

 شما همچنین می توانید با استفاده از عبارات منظم، تعیین کنید که اگر یک پارامتر با آن عبارت منظم تطابق داشته باشد 

همچنین می توانیم تعیین کنیم که پارامتر ما با یک عبارات منظم تطابق داشته باشد، به مثال 3.7 توجه کنید: 

Route::get('users/{id}', function ($id) {
  //
})->where('id', '[0-9]+');
Route::get('users/{username}', function ($username) {
  //
})->where('username', '[A-Za-z]+');
Route::get('posts/{id}/{slug}', function ($id, $slug) {
  //
})->where(['id' => '[0-9]+', 'slug' => '[A-Za-z]+']);

 حالا اگر کاربر به یکی از routeها برود اما پارامتری که وارد می کند با  عبارات منظم تطابقی نداشته باشد دستورات کلوژر اجرا نخواهند شد. 

 

در کدهای بالا، به دلیل اینکه routeها از بالا به سمت پایین اجرا می شوند، اگر کاربر از مسیر users/abc استفاده کند، کلوژر اجرا نخواهد شد.اما این route با دومین کلوژر تطابق دارد و بنابراین دومین کلوژر اجرا خواهد شد. از طرف دیگر، اگر کاربر به مسیر posts/abc/123 برود، این مسیر با هیچ یک از کلوژرها تطابق ندارد؛ بنابراین یک خطای 404 به کاربر برگردانده خواهد شد.