【发布时间】:2017-11-21 06:37:47
【问题描述】:
我看到了关于这个问题的其他主题,没有解决。
所以在 Laravel 5.4 Route Model Binding 中,我们可以将路由绑定到模型,如下所示:
在web.php中定义路由:
web.php:
Route::get('/users/{user}', UsersController@show);
UsersController@show:
public function show(User $user){
// now we already have access to $user because of route model binding
// so we don't need to use User::find($user), we just return it:
return view(users.show, compact('user'));
}
上面的代码可以正常工作,所以在我们的控制器中我们可以在不找到用户的情况下返回 $user,我们已经有了它。
但想象一下:
web.php:
Route::patch('/users/archive', UsersController@archive);
已编辑: 现在上面的行创建了一个 patch 路由,我们在路由 url 中没有 {user},用户id 正在通过表单发布。
UsersController@archive:
public function archive(Request $request, User $user){
// how can I access the $user here without using User::find($user);
// I get to this action via a form which is posting `user` as a value like `5`
dd($request->user); // this now echo `5`
// I can do:
// $user = User::find($request->user);
// and it works, but is there a way to not repeat it every time in every action
}
我尝试过的: 在 RouteServiceProvider::boot() 我有:
Route::model('user', 'App\User');
以上是我在谷歌上找到的,但不起作用。
我将不胜感激。
编辑:
它似乎不再被称为Route Model Binding,因为我们在route 中没有{user},那是因为我的代码不起作用,user 变量被posted 到控制器,它只是可通过$request->user访问。
这个是路由模型绑定:
Route::patch('users/{user}/archive', UsersController@archive);
这不是:
Route::patch('users/archive', UsersController@archive);
因为我们没有{user},它是通过表单posted 并且只能通过$request->user 访问。
(路由模型绑定的定义如有错误请指正)
所以:
简而言之,我想要实现的目标:在发送到我的UsersController 的每个请求中,如果我将user 变量作为post 变量发送,它必须绑定到User::findOrFail($request->user) 然后@987654342 @ 必须在我的控制器操作中可用。
我想实现这一点,因为在每一个动作中我都在重复自己做User::findOrFail($request->user) 而我不想这样做,所以我想检查每个请求是否有variable name 像model name ,它们应该是有界的。
【问题讨论】:
-
你试过
public function archive(Request $request, User $user) -
@AliRasheed 是的,不工作
-
试试
dd($request->all()) -
@aldrin27 它显示了所有发布的数据,我还有
"user" => "5" -
@aldrin27 但是当我这样做时:
dd($user->id)它是null,所以绑定不起作用
标签: php laravel laravel-5 eloquent