Laravel缺少参数来更新控制器中的表单

cunj1qz1  于 2023-04-13  发布在  其他
关注(0)|答案(3)|浏览(107)

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

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

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

public function edit($id)
{

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

update函数还没有实现,因为我总是从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变量在控制器上获得新的描述,所以我真的不知道应该在这里放什么作为参数,有什么想法吗?

yfwxisqw

yfwxisqw1#

$banner变量不是Model示例,而是Collection。
调整你的控制器,将其传递给视图,而不是在视图中执行查询:

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

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

您也可以在这里使用路由模型绑定,而不是自己执行查询。
从视图中删除@php块。
表单应该调整为使用方法POST并欺骗方法PUTPATCH(因为更新路由是PUTPATCH路由),并且应该调整对route的调用:

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

nwo49xxi2#

如果在函数声明中包含$id,那么当您调用route帮助程序时,它希望您给予id参数。

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

你应该能够从$request变量中检索表单数据。更多信息在这里。

vxf3dgd4

vxf3dgd43#

下面的代码应该是错误源。$banner变量然后是一个数组,但更新函数接受对象或ID。

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

你应该试着通过这个来重放这个代码。。

@php
   use\App\Banner;
   $banner = Banner::find($id);
   //you should put a dd here to view the contain of $banner if you like
   @endphp

相关问题