laravel - 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 变量在控制器上获得新的描述,所以老实说我不知道我应该把什么作为参数放在这里,有什么想法吗?
解决方案
该$banner
变量不是模型实例,它是一个集合。
调整您的控制器以将其传递给视图,而不是在视图中执行查询:
public function edit($id)
{
$banner = Banner::findOrFail($id);
return view('admin.edit-banners', ['banner' => $banner]);
}
您也可以在此处使用 Route Model Binding 而不是自己进行查询。
从您的视图中删除该@php
块。
应调整表单以使用方法POST
和欺骗方法PUT
或PATCH
(因为更新路由是 a PUT
orPATCH
路由),您应该将调用调整为route
:
<form class="card-box" action="{{ route('banner.update', ['banner' => $banner]) }}" method="POST">
@method('PUT')
推荐阅读
- c# - Unity 如何使用编辑器脚本进行自我更新?
- apache - 如果引用者来自谷歌搜索,如何将特定页面重定向到另一个页面
- sql - 如何通过生成 id SSIS 将表拆分为 Master/Detail?
- css - Adsense 顶部锚点广告与固定导航栏
- javascript - 使用 array.length 创建新的不和谐嵌入字段
- c# - Unity 程序网格生成
- node.js - Nodejs - 错误使用承诺
- android - 指示 gradle 使用本地文件
- mysql - 如何解决 MySQL 错误:#1064 在这种情况下?
- javascript - 从 cookie 加载网格后,dhtmlx 网格无法正常工作,然后执行隐藏/显示列