首页 > 解决方案 > Laravel 缺少参数来更新控制器中的表单

问题描述

所以我有一个小项目,在其中,可以上传横幅图像以显示在主页上。与数据库相关的所有内容都已创建,并且创建横幅的选项正在工作,它创建横幅,然后将图像存储在数据库中以供以后使用。现在我正在尝试使用编辑功能,以便可以更改横幅下的描述。我的控制器中有一个 Edit 路由,它返回一个视图,我在其中编辑所述横幅,然后它调用控制器上的更新函数。但是无论我在这里放什么,一旦我尝试保存编辑并通过更新功能打开我的控制器,我总是会收到缺少必需参数的错误。这是现在的代码:

路线定义:

Route::resource('banner', 'BannerController');

我的控制器上的编辑功能:

    public function edit($id)
{

    return view('admin/edit-banners',['id'=>$id]);
}

更新功能尚未实现,因为我总是从 dd() 函数开始检查一切是否正常:

    public function update(Request $request, $id)
{
    dd($request);
}

这是我的编辑视图中试图调用更新路由的表单行:

<form class="card-box" action="{{ route('banner.update',[$banner]) }}">

我还在视图的开头添加了这个,以将数据库中的数据存储到一个变量中:

@php
    use\App\Banner;
    $banner = Banner::where('id','=',$id)->get();
@endphp

$banner 变量包含正在编辑的横幅上的所有信息,我可以使用 $request 变量在控制器上获得新的描述,所以老实说我不知道​​我应该把什么作为参数放在这里,有什么想法吗?

标签: laravel

解决方案


$banner变量不是模型实例,它是一个集合。

调整您的控制器以将其传递给视图,而不是在视图中执行查询:

public function edit($id)
{
    $banner = Banner::findOrFail($id);

    return view('admin.edit-banners', ['banner' => $banner]);
}

您也可以在此处使用 Route Model Binding 而不是自己进行查询。

从您的视图中删除该@php块。

应调整表单以使用方法POST和欺骗方法PUTPATCH(因为更新路由是 a PUTorPATCH路由),您应该将调用调整为route

<form class="card-box" action="{{ route('banner.update', ['banner' => $banner]) }}" method="POST">
    @method('PUT')

推荐阅读