2 回答
TA贡献1936条经验 获得超6个赞
模型绑定的控制器方法的参数未正确命名。
您的路线参数kittran
不是kittrans
;资源路由将使用资源的单数名称作为路由参数。您必须为绑定匹配该名称:
public function update(Request $request, Kittrans $kittran)
如果没有该匹配,您只会注入一个新的模型实例,而不是发生模型绑定。
您可以运行route:list
命令来查看您的路线是如何定义的:
php artisan route:list
“Laravel 会自动解析路由或控制器操作中定义的 Eloquent 模型,其类型提示的变量名称与路由段名称匹配。” - Laravel 6.x 文档 - 路由 - 路由模型绑定 - 隐式绑定
“默认情况下,
Route::resource
将根据资源名称的“单一化”版本为您的资源路由创建路由参数。” - Laravel 6.x 文档 - 控制器 - 资源控制器 - 命名资源路由参数
如果您想为此资源覆盖此行为,并将kittrans
其用作参数名称,您也可以这样做,那么您无需更改控制器方法的签名:
Route::resource('kittrans', 'Kittrans\KittransController', [
'except'=> ['index'],
'parameters' => ['kittrans' => 'kittrans'],
]);
TA贡献1883条经验 获得超3个赞
我相信您的模型绑定不正确,当您的模型绑定错误时,Kittrans 对象将为空并且不会保存到数据库中,当您填充并保存时它将保存一个新对象。要解决错误的模型绑定,请将其添加到RouteServiceProvider.php.
use App\Kittrans;
public function boot()
{
parent::boot();
Route::model('kittrans', Kittrans::class);
}
- 2 回答
- 0 关注
- 119 浏览
添加回答
举报