我想基于id
获取用户,但它返回null
,但User::all()
工作正常。
UsersController
:-中的index
和show
方法
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'));
}