是的,有可能使其适用于整个控制器,因为phoenix注入了
action/2
插入控制器,默认情况下,控制器会调用从路由器匹配的函数,并且可以覆盖该函数。
在控制器中尝试以下操作:
def action(conn, _) do
required_fields = %{
index: ["id", "from", "to", "limit", "page"],
action2: ["id", "x", "y"]
}
args = [conn, conn.params]
missing_fields =
Enum.reject(required_fields[action_name(conn)], fn x -> x in Map.keys(conn.params) end)
case missing_fields do
[] ->
apply(__MODULE__, action_name(conn), args)
fields ->
conn
|> put_status(:bad_request)
|> text("missing fields: " <> inspect(fields))
end
end
您可以按自己喜欢的方式渲染,以防
missing_fields
列表不是空的。
ps:返回错误400也不例外,这是一个处理得当的错误,正如Jose在这里所说
https://github.com/phoenixframework/phoenix/issues/2386#issuecomment-315590839