Laravel 5.5表单模型绑定用户

时间:2017-09-03 22:09:43

标签: php eloquent model-binding laravel-5.5

我正在学习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变量,如果有人知道如何修复它,或者我做错了什么就会很有帮助

2 个答案:

答案 0 :(得分:2)

您在此处报道的内容没有问题。这是Laravel Framework的理想行为。

如果您按照第一个示例的方式键入提示模型,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); 
    }
}

答案 1 :(得分:1)

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

public function edit(User $usuario)

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

您可以使用php artisan route:list

检查参数名称

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

  

Laravel会自动解析路线或路线中定义的雄辩模型   类型提示变量名称与路径匹配的控制器操作   细分名称