Laravel 多键路由绑定

Laravel 可以通过两种方式进行路由模型绑定。

在模型中指定路由的键

/**
 * 获取该模型的路由的自定义键名。
 *
 * @return string
 */
public function getRouteKeyName()
{
    return 'slug';
}

在服务提供者中手动进行绑定

Route::bind('post', function ($value) {
    return App\Post::where('slug', $value)->first() ?? abort(404);
 });
}

如何同时支持 idslug 的路由模型绑定呢?同样有两种方式实现。

一是在模型重写 resolveRouteBinding 方法

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

重写

/**
 * Retrieve the model for a bound value.
 *
 * @param  mixed  $value
 * @return \Illuminate\Database\Eloquent\Model|null
 */
public function resolveRouteBinding($value)
{
    if( is_numeric($value) ){
        return self::findOrFail($value);
    } else {
        return self::whereSlug($value)->firstOrFail();
    }
}

也可以在服务提供者中进行绑定

Route::bind('post', function ($value) {
    if( is_numeric($value) ){
        return App\Post::findOrFail($value);
    } else {
        return App\Post::whereSlug($value)->firstOrFail();
    }
 });
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!