我想基于id
获取用户,但它返回null
,但是User::all()
正常工作。
index
中的 show
和UsersController
方法:-
namespace App\Http\Controllers;
use App\User;
use Illuminate\Http\Request;
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)}}
,并且它在网址null
上返回了public/devs/{dev}
。
但在网址index
上的public/devs
上工作正常
答案 0 :(得分:2)
这是因为您正在这样定义基本路线:
Route::resource('devs', 'UserController');
这意味着laravel将格式化show
方法,如下所示:
Route::get('devs/{dev}', 'UserController@show');
Laravel将尝试解决这种依赖关系doind Implicit Model Binding,并且鉴于{dev}
与您定义的任何模型类都不匹配,它确实会返回null
。
因此,要解决此问题,请明确Explicit Binding定义此匹配项。为此,请转到:
App / Providers / RouteServiceProvider.php
public function boot()
{
parent::boot();
Route::model('dev', App\User::class);
}
因此,现在Laravel读取{dev}
路由参数的任何地方,都将其与User
模型匹配。
答案 1 :(得分:0)
您不会为整个控制器初始化用户。 每个函数使用自己的变量
首先,我将像这样重新配置您的路线:
Route::get('devs', 'UsersController@show')->name('showUsers')
在您的功能展示中,我将执行以下操作
public static function show(){
$id = 1;
$users = User::where('id', $id')
return view('dev.show', compact('users'));
}