بزن بریم سراغ یکی از خوشگلترین و کاربردیترین امکانات لاراول:
🔁 Route Model Binding
این قابلیت باعث میشه بهجای گرفتن id از URL و بعد دستی پیدا کردن مدل، خود لاراول بهصورت خودکار مدل مربوطه رو از دیتابیس پیدا کنه و به اکشن کنترلر بفرسته.
✅ ۱. Route Model Binding ساده (Implicit Binding)
مثال:
در کنترلر:
لاراول خودش Post::findOrFail($id) رو اجرا میکنه! ✨
{post} با نام متغیر $post مطابقت داره و مدل Post به اون bind میشه.
🔍 پشت پرده
وقتی مینویسی {post}، لاراول میفهمه که باید از مدل Post استفاده کنه و مقدار id در URL رو تو جدول posts جستجو کنه.
🛠 شرط: نام پارامتر باید با نام متغیر مدل یکی باشه
✅ ۲. Route Model Binding صریح (Explicit Binding)
وقتی میخوای بر اساس فیلد دیگهای غیر از id مدل رو بیاری (مثلاً slug) ⬇️
🧩 تعریف در RouteServiceProvider
🛤 روت
حالا لاراول به جای id، دنبال پستی با slug = $value میگرده.
✅ استفاده از getRouteKeyName() در مدل
راه بهتر برای Binding با slug:
الان بدون نیاز به تغییر در RouteServiceProvider:
و کنترلر:
✅ در API ها هم همینطور:
🧨 خطا اگر پیدا نشه؟
لاراول خودش بهصورت خودکار 404 برمیگردونه اگر چیزی پیدا نکنه.
نیازی به findOrFail نداری.
✅ ترکیب با روابط Eloquent:
البته تو این حالت باید اطمینان داشته باشی که پست واقعاً متعلق به اون یوزر هست.
✨ مزایای Route Model Binding
| ویژگی | مزیت |
|---|---|
| کوتاهتر شدن کد کنترلر | حذف findOrFail |
| امنیت | اگر پیدا نشه => 404 |
| قابلیت استفاده با slug و uuid | با getRouteKeyName() |
| ترکیب عالی با Resourceها | خروجی زیباتر برای API |
اگه خواستی یه مثال واقعی با مدلهای Post, Category, User و slug بسازم و چند تا route حرفهای بنویسم، فقط بگو 😉