如何在没有 javascript 的情况下从表单中修补或删除
How to PATCH or DELETE from a form without javascript
我正在 Phoenix 上编写一个简单的 crud 应用程序。如何在不使用 javascript 的情况下从表单提交 PATCH 和 DELETE 请求?
啊我明白了,和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
或 POST
方法)。
Phoenix 通过 Plug, the Rack-like framework that Phoenix is built on. Long story short, Plug provides middlewares and one of the middlewares it provides is Plug.MethodOverride
执行完全相同的操作,这与我们讨论的完全相同。在中间件中这样做,Phoenix 应用程序几乎不知道原始请求不是 GET
/POST
.
你可以看到Plug.MethodOverride
使用了in Phoenix's source code。
正如其他人所提到的,Phoenix 通过 MethodOverride
插件在路由中处理此问题。
为了使用 form_for
助手在模板中更改它,请使用 :method
参数:
<%= form_for @changeset, path(@conn, :update), [multipart: true, method: "patch"], fn f -> %>
这会将隐藏输入添加到 HTML,如 @greggreg 所述:
<input name="_method" type="hidden" value="patch" />
我正在 Phoenix 上编写一个简单的 crud 应用程序。如何在不使用 javascript 的情况下从表单提交 PATCH 和 DELETE 请求?
啊我明白了,和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
或 POST
方法)。
Phoenix 通过 Plug, the Rack-like framework that Phoenix is built on. Long story short, Plug provides middlewares and one of the middlewares it provides is Plug.MethodOverride
执行完全相同的操作,这与我们讨论的完全相同。在中间件中这样做,Phoenix 应用程序几乎不知道原始请求不是 GET
/POST
.
你可以看到Plug.MethodOverride
使用了in Phoenix's source code。
正如其他人所提到的,Phoenix 通过 MethodOverride
插件在路由中处理此问题。
为了使用 form_for
助手在模板中更改它,请使用 :method
参数:
<%= form_for @changeset, path(@conn, :update), [multipart: true, method: "patch"], fn f -> %>
这会将隐藏输入添加到 HTML,如 @greggreg 所述:
<input name="_method" type="hidden" value="patch" />