【发布时间】:2016-04-19 09:12:32
【问题描述】:
laravel 中的Route Binding 是什么。为什么我们使用这个。你能用简单的话解释一下吗?
【问题讨论】:
标签: laravel laravel-5 laravel-5.1 laravel-routing
laravel 中的Route Binding 是什么。为什么我们使用这个。你能用简单的话解释一下吗?
【问题讨论】:
标签: laravel laravel-5 laravel-5.1 laravel-routing
以下是 Laravel 网站上关于路由模型绑定的详细说明,我觉得很容易理解。
Laravel 模型绑定提供了一种将类实例注入路由的便捷方式。例如,您可以注入与给定 ID 匹配的整个 User 类实例,而不是注入用户的 ID。
首先,使用路由器的模型方法为给定参数指定类。您应该在 RouteServiceProvider::boot 方法中定义模型绑定:
将参数绑定到模型
public function boot(Router $router)
{
parent::boot($router);
$router->model('user', 'App\User');
}
接下来,定义一个包含 {user} 参数的路由:
Route::get('profile/{user}', function(App\User $user)
{
//
});
由于我们已经将 {user} 参数绑定到 App\User 模型,一个 User 实例将被注入到路由中。因此,例如,对 profile/1 的请求将注入 ID 为 1 的 User 实例。
如果您希望指定自己的“未找到”行为,请将闭包作为第三个参数传递给模型方法:
Route::model('user', 'User', function()
{
throw new NotFoundHttpException;
});
如果您希望使用自己的解析逻辑,则应使用 Route::bind 方法。传递给 bind 方法的闭包将接收 URI 段的值,并应返回要注入到路由中的类的实例:
Route::bind('user', function($value)
{
return User::where('name', $value)->first();
});
关于路由的详细说明可以在 this link 到 Laravel 文档中找到。
【讨论】:
这里有两个链接可以给你一些粗略的想法:
否则,@KhanShahrukh 给出的解决方案应该可以解决您的疑问。
【讨论】: