我正在凤凰城写一个简单的crud应用程序。如何在不使用javascript的情况下从表单提交PATCH和DELETE请求?
答案 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>
个元素仅支持发送GET
和POST
个请求。 Rails使用的解决方法是从_method
请求参数中读取请求方法,覆盖实际的请求方法(GET
或POST
方法)。
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" />