Laravel 8 自定义解析逻辑

2021-07-16 17:57 更新

如果您希望使用自己的解析逻辑,应该使用 Route::bind 方法。传递给 bind 方法的 闭包 将接收 URI 中大括号对应的值,并返回您想要在该路由中注入的类的实例:

/**
 * 定义你的路由模型绑定, pattern 过滤器等
 *
 * @return void
 */
public function boot()
{
    Route::bind('user', function ($value) {
        return App\Models\User::where('name', $value)->firstOrFail();
    });

    // ...
}

或者,您可以重写 Eloquent 模型上的 resolveRouteBinding 方法。 此方法会接受 URI 中大括号对应的值,并且返回你想要在该路由中注入的类的实例:

/**
 * 检查绑定值的模型
 *
 * @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();
} 

如果路由使用隐式绑定作用域resolveChildRouteBinding 方法将用于解析父模型的子绑定:

/**
 * 检索子模型以获取绑定值。
 *
 * @param  string  $childType
 * @param  mixed  $value
 * @param  string|null  $field
 * @return \Illuminate\Database\Eloquent\Model|null
 */
public function resolveChildRouteBinding($childType, $value, $field)
{
    return parent::resolveChildRouteBinding($childType, $value, $field);
} 


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号