我正在 Phoenix 上编写一个简单的 crud 应用程序。如何在不使用 javascript 的情况下从表单提交 PATCH 和 DELETE 请求?
3 回答
啊,我想通了,和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
<form>
元素只支持发送GET
和POST
请求。Rails 使用的解决方法是从_method
请求参数中读取请求方法,覆盖实际的请求方法(GET
orPOST
方法)。
Phoenix 通过Plug实现了完全相同的功能,Phoenix 是基于该框架构建的。长话短说,Plug 提供了中间件,它提供的中间件之一是Plug.MethodOverride
,这正是我们所讨论的。在中间件中这样做,Phoenix 应用程序几乎不知道原始请求不是GET
/ POST
。
可以在 Phoenix 的源代码Plug.MethodOverride
中看到使用。
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" />