0

我正在学习 laravel,我有以下错误我想知道是否有人可以帮助我解决它。我有一个名为 User 的模型和一个受控调用 UserController,我尝试使用模型绑定来创建编辑、更新和销毁。在编辑功能中,我有以下代码。

public function edit(User $user)
    {      
        dd($user); 
    }

该函数返回:

  User {#191 ▼
  #fillable: array:3 [▶]
  #dates: array:1 [▶]
  #hidden: array:2 [▶]
  #connection: null
  #table: null
  #primaryKey: "id"
  #keyType: "int"
  +incrementing: true
  #with: []
  #withCount: []
  #perPage: 15
  +exists: false
  +wasRecentlyCreated: false
  #attributes: []
  #original: []
  #changes: []
  #casts: []
  #dateFormat: null
  #appends: []
  #dispatchesEvents: []
  #observables: []
  #relations: []
  #touches: []
  +timestamps: true
  #visible: []
  #guarded: array:1 [▶]
  #rememberTokenName: "remember_token"
  #forceDeleting: false
}

如果我删除模型用户

public function edit($user)
{ 

    dd($user); 

}

在这种情况下返回正在编辑的用户的 ID /usuario/24/edit

"24"

路由声明如下

  Route::resource('/usuario','UsuarioController');

我想知道是否有人知道如何解决这个问题,因为该函数应该引用 User 模型,然后是 $ user 变量,如果有人知道如何修复它或者我做错了什么,那将有很大帮助

4

2 回答 2

2

您在这里报告的内容没有问题。这是所需的 Laravel 框架行为。

如果您像在第一个示例中那样键入提示模型,Laravel 将在后台尝试执行以下操作:

$user = User::findOrFail($user)

但是当您不输入提示时,laravel 不知道应该使用该 ID 加载哪个模型,因此它只会传递该id用户在请求时提供的参数。

将您的代码更改为如下所示:

// At the top of your controller add a use statement
use App\User;

class UserController extends Controller 
{
    //                    ▼ This is the typehint 
    //                         ▼ The parameter name should be the same resource name used on route
    public function edit(User $usuario)
    { 
        dd($usuario); 
    }
}
于 2017-09-03T22:31:17.260 回答
1

要使模型绑定在控制器操作中工作,您必须使用与您在 Route 声明中使用的参数匹配的变量名称,请尝试如下:

public function edit(User $usuario)

由于在您的路线中您声明 tu 使用“usuario”作为参数,模型绑定搜索同名变量。

您可以检查您的参数名称php artisan route:list

它也写在 laravel 文档中,关于模型绑定:

Laravel 自动解析路由或控制器操作中定义的 Eloquent 模型,其类型提示的变量名称与路由段名称匹配

于 2017-09-04T09:34:29.313 回答