Davood
3 سال پیش توسط Davood مطرح شد
2 پاسخ

Route model binding در لاراول

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


ثبت پرسش جدید
علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 3 سال پیش آپدیت شد
3

هر مدل الکوئنت در لاراول میتونه یک کلید اصلی رو برای 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
تخصص : PHP - Laravel
@dfardabasi 3 سال پیش مطرح شد
0

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


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

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