Laravel 8 自定义解析逻辑
如果您希望使用自己的解析逻辑,应该使用 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);
}