Laravel 5“自定义”表单方法

时间:2015-03-13 21:00:18

标签: forms laravel laravel-5

尝试使用PATCH请求发送此表单

<form method="POST" action="...">
<input type="hidden" name="_method" value="PATCH">

但我的路由方法设置为PATCH没有运气,但是如果我手动更改表单方法,这确实有效。这不再适用于L5吗?

-

嗯,没关系,它工作得很好。搞砸了我的路由,将我的表单指向/ users而不是/ users / [id]

2 个答案:

答案 0 :(得分:1)

只要您没有搞砸您的路线名称,补丁请求就可以正常工作:)

答案 1 :(得分:0)

有趣的另一个选择是使用辅助函数method_field(),它将自动为您创建_method字段。它看起来很干净,并且更容易和更快地输入(IMO)。

一个例子是这样的:

<form action="{{route('posts.update', $post->id)}}" method="POST">
    {{ csrf_field() }}
    {{ method_field('PUT') }}
    <input type="text">
</form>

正如您所看到的,还有另一个名为csrf_field()的助手,它也会创建必要的csrf隐藏字段。

method_field()需要一个参数,该参数是一个表示“自定义方法”值的字符串。因此,这通常是PUTPATCHDELETE。另外,请确保您仍然将表单设置为html标记形式的POST方法。所有这些自定义方法实际上只是伪装的POST方法,因此您需要在表单标记中设置它。

因此,当刀片呈现此文件时,生成的页面源将如下所示:

<form action="http://localhost:8000/posts/1" method="POST">
    <input type="hidden" name="_token" value="Fe16wD6lkMmWDYyoUkGaYPzzcf7wHm58eKs3P6YU">
    <input type="hidden" name="_method" value="PUT">
    <input type="text>
</form>

这是实现相同结果的另一种方式。但对我来说,我更喜欢我的表格易于阅读:

{{ csrf_field() }}
{{ method_field('PUT') }}

我只想把它扔给那些新手,因为它更容易处理,而且没有很好的记录。