【问题标题】:Laravel 5 "Custom" Form MethodsLaravel 5“自定义”表单方法
【发布时间】:2015-03-13 21:00:17
【问题描述】:

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

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

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

--

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

【问题讨论】:

  • 它在 L5 中仍然有效。您是否收到MethodNotAllowed 异常或其他问题? laravel.com/docs/5.0/routing#method-spoofing你忘了CSRF令牌,即&lt;input type="hidden" name="_token" value="{{ csrf_token() }}"&gt;吗?
  • 是的,你是对的,它工作正常。把表格发到的地方搞砸了

标签: forms laravel laravel-5


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    另一个有趣的选择是使用辅助函数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标签中这样设置。

    所以当 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') }}
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-07
      • 2015-11-08
      • 2018-10-31
      • 2014-12-11
      • 2016-06-05
      • 2015-09-13
      相关资源
      最近更新 更多