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



假设我有一条路线,如下所示:

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

我已经为要{user} AppUser和要{post} AppPost设置了路由模型绑定。我已经看到我可以为任何给定用户调用任何现有帖子以获取屏幕上的内容。是否有一个通用的地方可以向绑定模型分配约束?

您可以使用Route::bind并为函数设置第二个变量来访问当前路由及其参数,如下所示:

class RouteServiceProvider extends ServiceProvider{
    public function boot(Router $router)
    {
        $router->bind('user', function($value) {
            return AppUser::findOrFail($value);
        });
        $router->bind('post', function($value, $route) {
            return $route->parameter('user')->posts()->findOrFail($value);
        });
    }
}
您可以使用

$router->bind()来控制获取模型的方式:

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

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

这当然是拉拉维尔的一个空白。 我做了一个小包裹来帮忙。https://github.com/tarekadam/laravel-orm-binding-validation

  1. 使用中间件而不是验证。
  2. 追加中间件,以便绑定已运行。
  3. 在控制器中定义预期关系。

请参阅包装上的 README.md。

最新更新