7

我正在 Phoenix 上编写一个简单的 crud 应用程序。如何在不使用 javascript 的情况下从表单提交 PATCH 和 DELETE 请求?

4

3 回答 3

6

啊,我想通了,和rails一样:

<form method="POST">
  <input name="_method" type="hidden" value="patch" />
...

在 Plug.MethodOverride 中处理:https ://github.com/elixir-lang/plug/blob/master/lib/plug/method_override.ex

于 2015-01-27T06:05:41.567 回答
4

<form>元素只支持发送GETPOST请求。Rails 使用的解决方法是从_method请求参数中读取请求方法,覆盖实际的请求方法(GETorPOST方法)。

Phoenix 通过Plug实现了完全相同的功能,Phoenix 是基于该框架构建的。长话短说,Plug 提供了中间件,它提供的中间件之一是Plug.MethodOverride,这正是我们所讨论的。在中间件中这样做,Phoenix 应用程序几乎不知道原始请求不是GET/ POST

可以在 Phoenix 的源代码Plug.MethodOverride中看到使用。

于 2015-01-27T08:53:40.303 回答
4

MethodOverride正如其他人所提到的,Phoenix 通过插头在路由中处理这个问题。

为了form_for使用帮助程序在模板中更改它,请使用:method参数:

<%= form_for @changeset, path(@conn, :update), [multipart: true, method: "patch"], fn f -> %>

正如@greggreg 所指出的,这会将隐藏的输入添加到 HTML:

<input name="_method" type="hidden" value="patch" />

于 2016-03-29T01:35:48.060 回答