在Laravel中路由模型绑定和父子验证

时间:2016-02-01 14:13:25

标签: php laravel routes model-binding

说我有一条路线:

Route::get('users/{user}/posts/{post}', 'PostController@show')

我为App\User{user}App\Post{post}设置了路线模型绑定。我已经看到我可以为任何给定用户调用任何现有帖子来获取屏幕上的内容。是否存在可以为绑定模型分配约束的通用位置?

3 个答案:

答案 0 :(得分:1)

您可以使用$router->bind()来控制模型的获取方式:

Route::get('/user/{name}', 'PostController@show');

$router->bind('user', function($value) {
    return App\User::where('name', $value)->first();
});

答案 1 :(得分:1)

你可以使用Route::bind并为函数设置第二个变量来访问当前路径,它的参数如下:

class RouteServiceProvider extends ServiceProvider{
    public function boot(Router $router)
    {
        $router->bind('user', function($value) {
            return App\User::findOrFail($value);
        });

        $router->bind('post', function($value, $route) {
            return $route->parameter('user')->posts()->findOrFail($value);
        });
    }
}

答案 2 :(得分:0)

这肯定是laravel中的空白。我做了一些包装来帮助。 https://github.com/tarekadam/laravel-orm-binding-validation

  1. 不使用中间件进行验证。
  2. 附加中间件,以便绑定已经运行。
  3. 在控制器中定义期望的关系。

请参阅包装上的README.md。