关于laravel 8.x 文档中 路由 章节中关于 显式绑定 隐式绑定的疑问?
首先在文档中对隐式绑定的示例以及描述我可以理解
代码如下
Route::get('api/users/{user}', function (App\Models\User $user) {
return $user->email;}
);
Laravel 会自动处理在路由或控制器方法中,与类型提示的变量名相匹配的路由段名称的的 Eloquent 模型。
我觉得这里对隐式绑定已经说的挺清楚了。只要路由的变量和类型提示变量名匹配就会自动处理。
但是后文对显式绑定的示例似乎没能说明白显式绑定是什么定义,或者说有什么用。
要注册显式绑定,请使用路由器的 model 方法为给定的参数指明参数对应的类。您应该在 RouteServiceProvider 类的 boot 方法的开头定义显式模型绑定
接下来,定义一个包含 {user} 参数的路由
文档中对显式绑定的示例如下
public function boot()
{
Route::model('user', \App\Models\User::class);
// ...
}
Route::get('profile/{user}', function (App\Models\User $user)
{
});
实际上如果不在boot()中定义如上的模型绑定,我访问该地址时依旧能够对模型进行正确解析。
并且这条在显示绑定中做示例的路由的定义似乎也符合隐式绑定的定义。
希望有人能为我解答一下,这两种绑定的具体区别?
「约定大于配置」这是框架的主要思想之一。默认约定:路由参数需与模型类名一致。
所以很容易理解,显示绑定,针对参数中的字符串与数据表名不一致的情况
@LiamHao 但是隐式绑定可以采用自定义键名来做到不一致,你的意思是说,用通用的显式绑定来避免在路由中手动指定键名吗?
显示绑定其中一个作用就是给用户提供一个自定义的功能。
举个列子你就明白了。
路由:
测试