UsersController`User :: all()`工作,但是`show`返回`null`

时间:2018-11-09 14:35:34

标签: php laravel

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

index中的

showUsersController方法:-

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上工作正常

2 个答案:

答案 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'));
}