Elixir Phoenix 中的可选 POST 参数
Optional POST parameters in Elixir Phoenix
我有一个 phoenix route,我想 POST 一些表单数据,但是大约有 4 个表单字段是可选的(表单是由最终用户构建的,因此这些字段可能POST 负载中不存在)
在路由的 Phoenix 控制器中,您将如何处理?
例如:
我的表格有
Field1,
Field2
Field3 (optional)
Field4 (optional)
Field5 (optional)
和 POST 表单必须始终包含 Field1
和 Field2
,但可以包含其他字段的任意组合。
所以到目前为止我的控制器代码是这样的:
def create(conn, %{"field1" => field1, "field2" => field2) do
end
如何将其他 3 个设为可选?如果我将它们全部添加进去,那么它们将是必需的,而且我不想为每个可能提交的表单创建一个函数,因为这似乎有点过分了。
控制器接收到的参数只是一张地图,所以您可能正在寻找 Map.get/3
之类的东西。使用此功能,您可以在这些行上执行某些操作:
def create(conn, %{"field1" => f1, "field2" => f2} = params) do
f3 = Map.get(params, "field3", "my default value")
# similar for the other fields
end
您还可以创建一个包含所有可选参数默认值的映射,然后使用 Map.merge/2
:
@optional_params %{"field3" => "default3", "field4" => "default4"}
def create(conn, %{"field1" => f1, "field2" => f2} = params) do
# `params` has precedence over `@optional_params`, that's why we're using it
# as the second argument here.
params = Map.merge(@optional_params, params)
end
我有一个 phoenix route,我想 POST 一些表单数据,但是大约有 4 个表单字段是可选的(表单是由最终用户构建的,因此这些字段可能POST 负载中不存在)
在路由的 Phoenix 控制器中,您将如何处理?
例如:
我的表格有
Field1,
Field2
Field3 (optional)
Field4 (optional)
Field5 (optional)
和 POST 表单必须始终包含 Field1
和 Field2
,但可以包含其他字段的任意组合。
所以到目前为止我的控制器代码是这样的:
def create(conn, %{"field1" => field1, "field2" => field2) do
end
如何将其他 3 个设为可选?如果我将它们全部添加进去,那么它们将是必需的,而且我不想为每个可能提交的表单创建一个函数,因为这似乎有点过分了。
控制器接收到的参数只是一张地图,所以您可能正在寻找 Map.get/3
之类的东西。使用此功能,您可以在这些行上执行某些操作:
def create(conn, %{"field1" => f1, "field2" => f2} = params) do
f3 = Map.get(params, "field3", "my default value")
# similar for the other fields
end
您还可以创建一个包含所有可选参数默认值的映射,然后使用 Map.merge/2
:
@optional_params %{"field3" => "default3", "field4" => "default4"}
def create(conn, %{"field1" => f1, "field2" => f2} = params) do
# `params` has precedence over `@optional_params`, that's why we're using it
# as the second argument here.
params = Map.merge(@optional_params, params)
end