微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

缺少表单操作所需的参数

如何解决缺少表单操作所需的参数

首先,我想说我的英文不是很好,也是我第一次在这里发帖,所以如果我做错了什么,请见谅!好吧,我开始使用 Laravel 进行练习,我正在尝试为用户可以喜欢的帖子创建一个 URL。我的 URL 和控制器现在是这个 Route::post('/post/{post}/like',[LikeController::class,'postLike'])->name('post.like');,其中 post 是我试图通过我的表单操作属性传递的帖子 ID。这是我的表格:

@props(['id'])

<div {{ $attributes->merge(['class' => 'card-footer d-flex justify-content-around']) }}>
    <form action= "{{ route('post.like',$id) }}"  method="post" >
        @csrf
        <button>submit</button>
    </form>
</div>

如果您想知道 id 是否实际上没有传递到组件中,我检查了 {{ dd($id) }} 并打印了它。

我的控制器就是这个,它现在实际上没有做任何事情。我只是想传递 id:


class LikeController extends Controller
{
    public function postLike(Post $post) {
        dd($post);
    }
}

毕竟我得到了错误

缺少 [Route: post.like] [URI: post/{id}/like] [缺少参数:id] 的必需参数。 (查看:blog\resources\views\components\post\interaction.blade.PHP

我有两天的时间来找到问题,我仍在尝试这一刻我正在发送这个......我找不到错误在哪里!如果你能帮助我将不胜感激!提前准备

解决方法

您需要在 route() 中将 ID 作为关联数组传递。

{{ route('post.like',['id' => $id]) }}
,

如果命名路由定义了参数,您可以将参数作为第二个参数传递给路由函数。给定的参数将自动插入到生成的 URL 的正确位置中,您应该命名为“post”而不是“id”:

Route::post('/post/{post}/like',[LikeController::class,'postLike'])->name('post.like');

而且你可以在任何地方调用这条路线

route('post.like',[$postId])

如果这仍然不适合您。那么可能是Route Cache Run的问题:

php artisan route:clear
,

使用同名参数

当你在 web.php 中使用 "id" 关键字作为参数时,控制器中的函数参数也会传入相同的名称

Route::post('/post/{id}/like','postLike'])->name('post.like');

控制器

class LikeController extends Controller
    {
        public function postLike(Post $id) {
        dd($id);
        }
    }

抱歉我的英语不好。

,

我不知道这可能是问题所在,但经过多次更改后,我将帖子的 id 转换为整数,它实际上有效 <form action= "{{ route('post.like',(int)$id) }}" method="post" > 。我不知道为什么我应该将 id 转换为整数,因为默认情况下它已经是一个整数,我用 {{ dd(getType($id)) }} 检查并打印了“整数”!我真的很困惑,但它有效!但我不高兴,因为我不知道为什么我应该将整数转换为整数才能使其工作!没有任何意义!如果有人对此有答案就太好了!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。