Laravel show() 参数为空
Laravel show() parameter are null
我正在使用 Laravel 版本 5.6.26。我的 show() 参数得到空值。为什么?以及如何解决?谢谢
web.php
Route::get('/peoples', 'UsersController@index')->name('peoples');
Route::get('/peoples/{id?}', 'UsersController@show');
UserController.php
public function show(User $user)
{
$user = User::where('id', $user->id)->first();
//$user = User::find($user->id)->first();
return dd($user);
//return view('profile',['user' => $user]);
}
user.blade.php 当我点击 <a href="/peoples/{{$user->id}}" >
时,它显示 null
<h4><a href="/peoples/{{$user->id}}" > {{$user->name}}</a></h4>
结果
但如果我这样做,我可以获得价值
public function show(User $user)
{
$user = User::where('id',1)->first();
//$user = User::find($user->id)->first();
return dd($user);
//return view('profile',['user' => $user]);
}
如果您的变量名称 ($user
) 与您的路由声明相似,您定义 show
方法的方式即 show(User $user)
称为路由模型绑定。但是您的路由声明是 /peoples/{id?}
因此 User
实例不会在您的控制器中创建。所以只需将路由声明重命名为 /peoples/{user?}
.
路由模型绑定的用例是您不希望 query/load 模型与路由参数相关。因此,如果您按照我提到的方式定义路线,则不需要 $user = User::where('id', $user->id)->first();
查询。因为 Laravel 会自动实例化那个 $user
和路由中传递的 id
的 User
模型。
如果您想 query/load 手动 User
模型,请保持现有路由声明不变。并将控制器方法声明更改为 show($id = null)
您正在控制器中注入 User
模型,但未访问路由路径。如果你想访问路由中设置的{id}
,你也必须在你的控制器中访问它。
所以你的 UserController
会像
public function show(User $user, $id)
{
$user = User::where('id', $id)->first();
dd($user);
}
当您在控制器的方法 show()
中使用 User
键入 hinted 时,Laravel 将使用 Service Container.
自动注入该方法
您的UserController.php的代码应该是:
public function show(User $user) {
// no need to fetch user again. Laravel had already done that for you.
dd($user);
return view('profile', compact('user'));
}
我正在使用 Laravel 版本 5.6.26。我的 show() 参数得到空值。为什么?以及如何解决?谢谢
web.php
Route::get('/peoples', 'UsersController@index')->name('peoples');
Route::get('/peoples/{id?}', 'UsersController@show');
UserController.php
public function show(User $user)
{
$user = User::where('id', $user->id)->first();
//$user = User::find($user->id)->first();
return dd($user);
//return view('profile',['user' => $user]);
}
user.blade.php 当我点击 <a href="/peoples/{{$user->id}}" >
时,它显示 null
<h4><a href="/peoples/{{$user->id}}" > {{$user->name}}</a></h4>
结果
但如果我这样做,我可以获得价值
public function show(User $user)
{
$user = User::where('id',1)->first();
//$user = User::find($user->id)->first();
return dd($user);
//return view('profile',['user' => $user]);
}
如果您的变量名称 ($user
) 与您的路由声明相似,您定义 show
方法的方式即 show(User $user)
称为路由模型绑定。但是您的路由声明是 /peoples/{id?}
因此 User
实例不会在您的控制器中创建。所以只需将路由声明重命名为 /peoples/{user?}
.
路由模型绑定的用例是您不希望 query/load 模型与路由参数相关。因此,如果您按照我提到的方式定义路线,则不需要 $user = User::where('id', $user->id)->first();
查询。因为 Laravel 会自动实例化那个 $user
和路由中传递的 id
的 User
模型。
如果您想 query/load 手动 User
模型,请保持现有路由声明不变。并将控制器方法声明更改为 show($id = null)
您正在控制器中注入 User
模型,但未访问路由路径。如果你想访问路由中设置的{id}
,你也必须在你的控制器中访问它。
所以你的 UserController
会像
public function show(User $user, $id)
{
$user = User::where('id', $id)->first();
dd($user);
}
当您在控制器的方法 show()
中使用 User
键入 hinted 时,Laravel 将使用 Service Container.
您的UserController.php的代码应该是:
public function show(User $user) {
// no need to fetch user again. Laravel had already done that for you.
dd($user);
return view('profile', compact('user'));
}