UsersController"User::all()"正在工作,但"show"



我想基于id获取用户,但它返回null,但User::all()工作正常。

UsersController:-中的indexshow方法

namespace AppHttpControllers;
use AppUser;
use IlluminateHttpRequest;
use DB;
class UsersController extends Controller
{
public function __construct()
{
$this->middleware('auth',['except'=>['index','show']]);
}
public function index()
{
$users=User::all();
return view('dev.index')->with('users',$users); 
}
public function show(User $user)
{   
return view('dev.show')->with('user',$user);
}

}

路线:-

Route::resource('devs','UsersController');

在视图中,我有{{dd($user->name)}},它在urlpublic/devs/{dev}上返回null

但在urlpublic/devs上的index上运行良好

这是因为你定义的基本路线是这样的:

Route::resource('devs', 'UserController');

这意味着laravel将对show方法进行如下格式化:

Route::get('devs/{dev}', 'UserController@show');

Laravel将尝试通过隐式模型绑定来解决这种依赖关系,并且假设{dev}与您定义的任何模型类都不匹配,它确实会返回null

因此,要解决此问题,请通过显式绑定显式定义此匹配。要做到这一点,请访问您的:

App/Providers/RouteServiceProvider.php

public function boot()
{
parent::boot();
Route::model('dev', AppUser::class);
}

因此,现在无论Laravel在哪里读取{dev}路由参数,都会将其与User模型相匹配。

您不会为整个控制器初始化用户。每个函数都使用自己的变量

首先,我会这样重新配置你的路线:

Route::get('devs', 'UsersController@show')->name('showUsers')

在你的功能展示中,我会做以下

public static function show(){
$id = 1;
$users = User::where('id', $id')
return view('dev.show', compact('users'));
}

相关内容

最新更新