Laravel show()参数为null

问题描述 投票:0回答:3

我使用的是Laravel 5.6.26版。我的show()参数获取null值。为什么?以及如何解决?谢谢

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>

结果

https://imgur.com/QlaiFse

但如果我喜欢这样,我就可以获得价值

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]);
    }
laravel laravel-routing
3个回答
2
投票

如果您的变量名称(show)与您的路线声明相似,那么您定义show(User $user)方法(即$user)的方式称为路径模型绑定。但是您的路由声明是/peoples/{id?}所以User实例不会在您的控制器中创建。所以只需将路线声明重命名为/peoples/{user?}

路由模型绑定的用例是您不希望查询/加载与路由参数相关的模型。因此,如果您按照我提到的方式定义路线,则不需要$user = User::where('id', $user->id)->first();查询。因为Laravel将自动实例化$userUser模型在路线中传递的id

如果要手动查询/加载User模型,请保持现有的路径声明。并将控制器方法声明更改为show($id = null)


0
投票

您正在控制器中注入User模型,但不访问路径路径。如果要访问路径中设置的{id},则必须在控制器中访问该UserController

所以你的public function show(User $user, $id) { $user = User::where('id', $id)->first(); dd($user); } 会是这样的

show()

0
投票

当您使用User在控制器的方法Service Container中键入提示时,Laravel将使用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')); } 自动注入。

您的UserController.php的代码应该是:

qazxswpoi
© www.soinside.com 2019 - 2024. All rights reserved.