我正在学习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变量,如果有人知道如何修复它,或者我做错了什么就会很有帮助
答案 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会自动解析路线或路线中定义的雄辩模型 类型提示变量名称与路径匹配的控制器操作 细分名称