Phoenix 输入验证
defmodule PhoenixdemoappWeb.HomeController do use PhoenixdemoappWeb, :controller def index(conn, _params) do render(conn, "index.json") end def create(conn, params) do data = %{} types = %{account: :string, password: :string} changeset = {data, types} |> Ecto.Changeset.cast(params, Map.keys(types)) |> Ecto.Changeset.validate_required([:account, :password]) |> Ecto.Changeset.validate_length(:password, min: 6, max: 30) IO.inspect(changeset) IO.inspect(changeset.errors) if changeset.valid? do render(conn, "index.json") else render(conn, "errors.json", changeset: changeset, code: 4000) end end end
Ecto 提供的 changeset
可以绑定 model 使用,也可以单独使用,单独使用时需要先定义一个空 map 结构。
changeset
输出 json errors message:
defmodule PhoenixdemoappWeb.HomeView do use PhoenixdemoappWeb, :view def render("errors.json", %{changeset: changeset, code: code}) do %{ code: code, data: %{}, msg: Ecto.Changeset.traverse_errors(changeset, &translate_error/1) } end def render("index.json", %{}) do %{ code: 0, data: %{}, msg: "ok" } end end
Ecto 提供 Ecto.Changeset.traverse_errors
来格式化 changeset.errors
,但是需要出入 translate_error
方法,phoenix 已经提供此函数,位于: views/error_helpers.ex
,在模板中直接调用即可。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论