【问题标题】:Phoenix Framework - Confirmation field in formPhoenix Framework - 表单中的确认字段
【发布时间】:2015-07-25 23:10:58
【问题描述】:

今天我用phoenix框架新建了一个项目,添加了一个singup功能。我现在的问题是我不知道如何创建和验证确认字段,例如用户密码。我没有找到与此主题相关的任何内容。

在我当前的代码下面,没什么特别的。

我当前的表单模板

<%= form_for @changeset, @action, fn f -> %>

    <%= if f.errors != [] do %>
        <!-- not interesting -->
    <% end %>

    <div class="form-group">
        <%= label f, :username, "User name" %>
        <%= text_input f, :username, class: "form-control" %>
    </div>

    <div class="form-group">
        <%= label f, :password, "Password" %>
        <%= password_input f, :password, class: "form-control" %>
    </div>

    <!-- How to validate this??? -->
    <div class="form-group">
        <%= label f, :password_confirmation, "Password confirmation" %>
        <%= password_input f, :password_confirmation, class: "form-control" %>
    </div>

    <!-- And so on.... -->

<% end %>

我现在的模特

defmodule Project.User do
  use Project.Web, :model

  schema "users" do
    field :username, :string
    field :password, :string

    timestamps
  end

  @required_fields ["username", "password"]
  @optional_fields []

  def changeset(model, params \\ :empty) do
    model
    |> cast(params, @required_fields, @optional_fields)
  end
end

【问题讨论】:

    标签: elixir phoenix-framework ecto


    【解决方案1】:

    有一个内置的验证器称为validate_confirmation/3

    def changeset(model, params \\ :empty) do
      model
      |> cast(params, @required_fields, @optional_fields)
      |> validate_confirmation(:password)
    end
    

    如果您想在@required_fields 或@optional_fields 中使用确认字段,也可以将其作为虚拟字段添加到您的方案中,但是这不是使用validate_confirmation 所必需的:

    schema "users" do
      field :username, :string
      field :password, :string
      field :password_confirmation, :string, virtual: true
    
      timestamps
    end
    

    【讨论】:

    • 这对我有用。 virtual: true 和 validate_confirmation/3 对我来说是新的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2020-02-20
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多