如何在没有 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>元素只支持发送GETPOST请求。 Rails 使用的解决方法是从 _method 请求参数中读取请求方法,覆盖实际的请求方法(GETPOST 方法)。

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" />