Phoenix Framework - 表单中的确认字段

时间:2015-07-25 15:00:25

标签: elixir phoenix-framework ecto

今天我用凤凰框架创建了一个新项目,添加了一个单独的功能。我现在的问题是我不知道如何创建和验证确认字段,例如用户密码。我没有找到这个主题。

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

我当前的表单模板

<%= 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

1 个答案:

答案 0 :(得分:8)

有一个名为validate_confirmation/3

的验证器内置版本
    function pippin_add_extra_fruits_plugin($fruits) {
        // the $fruits parameter is an array of all fruits from the pippin_show_fruits() function

        $extra_fruits = array(
            'plums',
            'kiwis',
            'tangerines',
            'pepino melons'
        );

        // combine the two arrays
        $fruits = array_merge($extra_fruits, $fruits);

        return $fruits;
    }
    add_filter('pippin_add_fruits', 'pippin_add_extra_fruits_plugin');

如果要在def changeset(model, params \\ :empty) do model |> cast(params, @required_fields, @optional_fields) |> validate_confirmation(:password) end @required_fields中使用确认字段,也可以将其作为虚拟字段添加到您的方案中,但是这不是必须使用@optional_fields:< / p>

validate_confirmation