如何在没有javascript的情况下从表单中修补或删除

时间:2015-01-27 05:58:31

标签: phoenix-framework

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:4)

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

Phoenix通过Plug完全相同,这是凤凰城建立的类似Rack的框架。简而言之,Plug提供了中间件,它提供的中间件之一是Plug.MethodOverride,它完全符合我们的讨论。在中间件中这样做,Phoenix应用程序几乎不知道原始请求不是GET / POST

您可以看到Plug.MethodOverride使用in Phoenix's source code

答案 2 :(得分:4)

正如其他人所提到的,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" />