راکت
حل شده

Route model binding در لاراول

2 پاسخ

سلام
آیا امکانش هست route model binding رو جوری پیاده کرد که با دو تا فیلد کار کنه مثلا id و slug
کنترلر های من از نوع resource هست
@hesammousavi
@ali.bayat
@Alimotreb
@mhyeganeh
@eniack

Davood
Davood
@dfardabasi
ثبت پرسش جدید

پاسخ‌ها

2
علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

بهترین پاسخ

هر مدل الکوئنت در لاراول میتونه یک کلید اصلی رو برای Route Model Binding استفاده کنه
که با متد getRouteKeyName داخل هر مدل قابل تعریف کردنه

هر چند برای حالت های خاص یه متد resolveRouteBinding هم داریم که به شکل زیر استفاده میشه:

/**
 * Retrieve the model for a bound value.
 *
 * @param  mixed  $value
 * @param  string|null  $field
 * @return \Illuminate\Database\Eloquent\Model|null
 */
public function resolveRouteBinding($value, $field = null)
{
    return $this->where('name', $value)->firstOrFail();
}

کاری که میتونی بکنی اینه که داخل متد boot سرویس پروایدر RouteServiceProvider بری یک Route رو مشخصا bind کنی:

Route::bind('modelName', function($value) {
        return Post::where('slug', $value)
            ->orWhere(function($query) use ($value) {
                if (is_numeric($value)) {
                    $query->where('id', $value);
                }
            })->firstOrFail();
});
Davood
Davood
@dfardabasi

تخصص: PHP - Laravel

سلام
@ali.bayat
ممنون استاد کمک بزرگی کردید
سپاس از محبتتون

شاید پاسخ شما همین‌جا باشد

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام