仅当新密码为1个字符长时,重复的密码验证消息

时间:2016-01-06 10:45:39

标签: symfony fosuserbundle

我的问题是密码验证消息在注册和更改密码表单中出现两次。由于大多数帖子/解决方案指出"群组",如何在下面的代码中实现它?我试图实现其他解决的例子,如下所示,但我不能让它工作。也许是因为我之前从未使用过FOSUserBundle。

MyApp的/应用/配置/ config.yml

sudo ipython notebook

WebsiteBundle /资源/翻译/ validators.en.yml

fos_user:
    db_driver: orm
    firewall_name: main
    user_class: WebsiteBundle\Entity\User
    model_manager_name: websitemanager
    registration:
        form:
            type: website_user_registration
    change_password:
        form:
            type: fos_user_change_password
            validation_groups:  [ChangePassword, Default]

的services.xml

fos_user:
    password:
        short: "[-Inf,Inf]The password must contain at least 8 characters"

WebsiteBundle /形式/类型/ RegistrationFormType.php

<service id="myapp_website.registration.form.type"
              class="myapp\WebsiteBundle\Form\Type\RegistrationFormType">
      <tag name="form.type" alias="website_user_registration" />
      <argument>myapp\WebsiteBundle\Entity\User</argument>
</service>

的validation.xml

namespace myapp\WebsiteBundle\Form\Type;

use Symfony\Component\Form\FormBuilderInterface;
use FOS\UserBundle\Form\Type\RegistrationFormType as BaseType;
use Symfony\Component\Validator\Constraints\IsTrue;

class RegistrationFormType extends BaseType
{
    public function __construct($class)
    {
        parent::__construct($class);
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        parent::buildForm($builder, $options);

        $builder->add(
            'terms',
            'checkbox',
            [
                'label' => 'Older than 18',
                'constraints' => [
                    new IsTrue([
                        'message' => 'Are you older than 18?',
                    ]),
                ],
                'required' => true,
                'mapped' => false,
            ]
        );
    }

    public function getName()
    {
        return 'website_user_registration';
    }
}

枝条

<?xml version="1.0" ?>
<constraint-mapping xmlns="http://symfony.com/schema/dic/constraint-mapping"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping
        http://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd">

    <class name="FOS\UserBundle\Model\User">

        <property name="plainPassword">
            <constraint name="NotBlank">
                <option name="message">fos_user.password.blank</option>
                <option name="groups">
                    <value>Registration</value>
                    <value>ResetPassword</value>
                    <value>ChangePassword</value>
                </option>
            </constraint>
            <constraint name="Length">
                <option name="min">8</option>
                <option name="minMessage">fos_user.password.short</option>
                <option name="groups">
                    <value>Registration</value>
                    <value>Profile</value>
                    <value>ResetPassword</value>
                    <value>ChangePassword</value>
                </option>
            </constraint>
        </property>
        <property name="email">
            <constraint name="NotBlank">
                <option name="message">Please enter your email address</option>
                <option name="groups">
                    <value>Registration</value>
                    <value>Profile</value>
                </option>
            </constraint>
        </property>
        <property name="username">
            <constraint name="NotBlank">
                <option name="message">Please enter your name</option>
                <option name="groups">
                    <value>Registration</value>
                    <value>Profile</value>
                </option>
            </constraint>
        </property>

    </class>

</constraint-mapping>

HTML结果

{% trans_default_domain 'FOSUserBundle' %}

<form action="{{ path('fos_user_change_password') }}" {{ form_enctype(form) }} method="POST">
    {{ form_row(form.current_password, {'label': 'Current Password'}) }}
    {{ form_row(form.plainPassword.first, {'label': 'New Password'}) }}
    {{ form_row(form.plainPassword.second, {'label': 'Confirm Password'}) }}
    {{ form_rest(form) }}

    <br /><input id="submit" type="submit" value="Change password" />
</form>

错误 当我在代码库中有<label for="fos_user_registration_form_plainPassword_first">Password</label> <input type="password" id="fos_user_registration_form_plainPassword_first" name="fos_user_registration_form[plainPassword][first]" required="required" /> <label for="fos_user_registration_form_plainPassword_second">Confirm password</label> <input type="password" id="fos_user_registration_form_plainPassword_second" name="fos_user_registration_form[plainPassword][second]" required="required" /> 时。

8-char

从代码库中删除validators.en.yml时。

screenshot from 2016-01-05 14 28 29

1 个答案:

答案 0 :(得分:0)

查看group_sequence功能以进行验证。

# src/AppBundle/Resources/config/validation.yml
AppBundle\Entity\User:
    group_sequence:
        - User
        - Strict
    getters:
        passwordLegal:
            - 'IsTrue':
                message: 'The password cannot match your username'
                groups: [Strict]
    properties:
        username:
            - NotBlank: ~
        password:
            - NotBlank: ~
  

在此示例中,它将首先验证组中的所有约束   用户(与默认组相同)。只有所有约束   在该组中有效,第二组Strict将被验证。

这是直接来自http://symfony.com/doc/current/book/validation.html#group-sequence

的Symfony文档

但是我个人无法使用此功能。