Laravel 什么';这是创建表单处理编辑操作的正确方法

Laravel 什么';这是创建表单处理编辑操作的正确方法,laravel,routing,Laravel,Routing,我试着从表单中发送一些来编辑它 我试着用不同的方法来达到这个效果。他们都没有工作 <form method= "GET" action="{{route('edit', $contact->id)}}" name="edit"> ...etc <button type="submit" class="btn btn-primary">Submit</button> </form> 它创建了以问号结尾的URL

我试着从表单中发送一些来编辑它

我试着用不同的方法来达到这个效果。他们都没有工作

<form method= "GET" action="{{route('edit', $contact->id)}}" name="edit">
                ...etc
 <button type="submit" class="btn btn-primary">Submit</button>
</form>
它创建了以问号结尾的URL(使用GET的结果),但即使我手动将其从URL中删除,它仍然不起作用,并显示404页面。怎么了?正确的方法是什么

编辑:

以下命令将根据web.php路由定义生成路由

{{action('ContactController@edit“,$contact)}}

所以只要把它写进你的申报表就行了

<form method= "POST" action="{{ action('ContactController@edit', $contact)}}" name="edit">
@method('PATCH')

@方法('补丁')
请注意,我将该方法更改为post,并添加了@method view helper,以使用正确的方法生成一个隐藏字段。除非手动定义get路由,否则无法使用get路由更新模型,但我不建议使用该路由,请坚持使用正确的REST谓词
您还需要使用路由::资源的第一个参数是资源的名称,它也是路径的一部分:

Route::resource('contact', 'ContactController');
然后,您可以使用路由帮助器:

<form method="POST" action="{{ route('contact.update', ['contact' => $contact->id]) }}">
@method('PUT')

@方法('PUT')

“编辑”路径用于显示未处理的编辑表单。“更新”路径用于执行更新,编辑表单将发布到。

路径::资源的第一个参数应为资源“名称”,例如:
路径::资源('contact','ContactController')
。。。运行
php artisan route:list
查看创建了哪些路由。。。如果没有资源名称,则无法通过以下方式命名占位符:如果运行terminal命令
php artisan route:list
,您将看到所有可用的路由。您的
元素的
方法和
操作需要匹配其中一个路由。您可以使用
url()
route()
帮助程序来确定
操作
,并确保
方法
匹配。嗯,它匹配,不是吗?
{{$contact->id}/edit
不匹配
{}/edit
;它缺少一个URL参数。通常您会看到
{contact}/edit
。你肯定需要给你的资源路由传递一个名字。没关系!我不认为行动是问题所在;有很多方法可以生成它,
{{{$contact->id}}/edit
“起作用”(有不同的方法可以做到这一点,比如使用
route()
url()
助手),但是
{}/edit
似乎不是一个有效的路径,正如下面的答案所示,这是因为缺少
Route::resource()
的第一个参数;检查答案,看看它们是否有用:)
Route::resource('contact', 'ContactController');
<form method="POST" action="{{ route('contact.update', ['contact' => $contact->id]) }}">
@method('PUT')