Laravel 中的路由模型绑定和父子验证
Route model binding and parent child validation in Laravel
假设我有这样一条路线:
Route::get('users/{user}/posts/{post}', 'PostController@show')
并且我已经为 App\User
到 {user}
和 App\Post
到 {post}
设置了路由模型绑定。我已经看到我能够为任何给定用户调用任何现有的 post 来获取屏幕上的内容。有没有通用的地方可以为绑定模型分配约束?
您可以使用 $router->bind()
来控制模型的获取方式:
Route::get('/user/{name}', 'PostController@show');
$router->bind('user', function($value) {
return App\User::where('name', $value)->first();
});
您可以使用 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);
});
}
}
这肯定是laravel的差距。我做了一个小包裹来帮忙。
https://github.com/tarekadam/laravel-orm-binding-validation
- 使用中间件而不是验证。
- 附加中间件以便绑定 运行。
- 定义控制器中的预期关系。
参见包装上的 README.md。
假设我有这样一条路线:
Route::get('users/{user}/posts/{post}', 'PostController@show')
并且我已经为 App\User
到 {user}
和 App\Post
到 {post}
设置了路由模型绑定。我已经看到我能够为任何给定用户调用任何现有的 post 来获取屏幕上的内容。有没有通用的地方可以为绑定模型分配约束?
您可以使用 $router->bind()
来控制模型的获取方式:
Route::get('/user/{name}', 'PostController@show');
$router->bind('user', function($value) {
return App\User::where('name', $value)->first();
});
您可以使用 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);
});
}
}
这肯定是laravel的差距。我做了一个小包裹来帮忙。 https://github.com/tarekadam/laravel-orm-binding-validation
- 使用中间件而不是验证。
- 附加中间件以便绑定 运行。
- 定义控制器中的预期关系。
参见包装上的 README.md。