Laravel 5 "Custom" 表单方法

Laravel 5 "Custom" Form Methods

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

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

但我的路由方法设置为 PATCH 时运气不佳,但如果我手动更改表单方法,这确实有效。这在 L5 中不再有效吗?

--

呃,没关系,它工作正常。弄乱了我的路由,将我的表单指向 /users 而不是 /users/[id]

只要您不搞砸路由名称,补丁请求就可以正常工作:)

有趣的是,另一种选择是使用辅助函数 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() 需要一个参数,它是一个字符串,表示您的 "custom method" 的值。所以这通常是 PUTPATCHDELETE。还要确保您仍然将表单设置为表单 html 标记中的 POST 方法。所有这些自定义方法实际上只是伪装的 POST 方法,因此您需要在表单标记中这样设置它。

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

<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') }}

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