بخش دهم - Route Model Binding
Route Model Binding به ما اجازه میدهد تا به صورت مستقیم و خودکار مدلهای لاراول را از URL به دست آوریم و در کنترلر استفاده کنیم. به عنوان مثال، اگر یک Post داریم و بخواهیم یک پست خاص را با استفاده از شناسه (ID) در URL بازیابی کنیم، معمولاً بدون استفاده از این ویژگی کدی شبیه به زیر مینویسیم:
Route::get('/posts/{id}', function($id) {
$post = Post::findOrFail($id);
return view('posts.show', compact('post'));
});اما با استفاده از Route Model Binding میتوانیم کد را سادهتر کنیم:
Route::get('/posts/{post}', function(Post $post) {
return view('posts.show', compact('post'));
});لاراول از مقدار {post} در مسیر استفاده میکند تا مدل Post را بر اساس مقدار (به طور پیشفرض id) جستجو کرده و به کنترلر ارسال کند.
نکته: این قابلیت برای انواع مدلها قابل استفاده است و شما میتوانید از Custom Keyها نیز استفاده کنید.
همانطور که توضیح داده شد، {post} به طور پیشفرض بر اساس فیلد id جست و جو می کند، اما میتوانید به سادگی فیلد پیشفرض را تغییر دهید:
Route::get('/posts/{post:slug}', function(Post $post) {
return view('posts.show', compact('post'));
});در کد بالا به جای {post}، از {post:slug} استفاده شده، به این معنی که از فیلد slug برای جست و جو استفاده شود، میتوانید فیلد مورد نظر را به جای slug بنویسید.
همچنین میتوانید فیلد پیشفرض را در مدل تغییر دهید:
class Post extends Model
{
public function getRouteKeyName()
{
return 'slug';
}
}
در این صورت با نوشتن {post} به طور پیشفرض از فیلد slug برای جست و جو استفاده می شود.
▫️ 🟠
🔎 #laravel #لاراول #فصل_۴
💠 @AmirhDeveloper
.