编辑配置文件,并在密码字段上进行验证

时间:2018-07-14 14:33:17

标签: php symfony

我在User实体上添加了一些验证规则,因为当用户未填写所有字段(尤其是密码字段)时,我遇到了一些错误。

用户实体:

    /**
 * @Assert\Length(
 *     min=8,
 *     max=4096,
 *     minMessage="Votre mot de passe n'est pas assez long.",
 *     maxMessage="Votre mot de passe est trop long."
 * )
 * @Assert\NotNull(message="Veuillez renseigner un mot de passe.")
 */
protected $plainPassword;

它可以正常使用注册表。但是,使用编辑表单时,我总是在密码字段上出现验证错误。我的编辑表单不包含密码字段。我该如何运作?

修改表单:

        $builder->add('username'         , IntegerType::class)
            ->add('nom'              , TextType::class)
            ->add('prenom'           , TextType::class)
            ->add('email'            , EmailType::class)
            ->add('dateNaissance'    , DateType::class)
            ->add('telephonePortable', TextType::class)
            ->add('adresse'          , TextType::class)
            ->add('codePostal'       , TextType::class)
            ->add('ville'            , TextType::class)
            ->add('enabled', ChoiceType::class)
            ->add('photo', FileType::class)
            ->add('plainPassword', HiddenType::class)
            ->add('submit');

1 个答案:

答案 0 :(得分:0)

我在这里遇到类似的问题。我解决了在表单生成器中而不是在Entity中声明NotBlank的问题。

我的用户类型(用于创建和编辑的表单)

class UserType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        if ($options['newUser']) {
            $builder
                ->add('plainPassword', RepeatedType::class, array(
                    'type'           => PasswordType::class,
                    'first_options'  => array('label' => 'Password'),
                    'second_options' => array('label' => 'Repeat Password'),
                    'required'       => true,
                    'constraints' => [
                        new NotBlank()
                    ]
                ))
                ->add('cpf', TextType::class)
            ;
        }

        $builder
            ->add('email', EmailType::class, array(
                'empty_data' => '',
            ))
            ->add('name', TextType::class, array(
                'empty_data' => '',
            ))
            ->add('dateOfBirth', DateType::class, array(
                'format' => 'yyyy-MM-dd',
            ))
            ->add('roles', ChoiceType::class, array(
                'multiple' => true,
                'choices'  => array(
                    'User'          => 'ROLE_USER',
                    'Administrator' => 'ROLE_ADMIN',
                ),
            ))
            ->add(
                'userAddress', UserAddressType::class, array(
                'data_class' => UserAddress::class,
            ))->getForm();
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(
            [
            'data_class'      => User::class,
            'csrf_protection' => false,
            'newUser'         => null,
        ]);
    }
}

我的实体是:

 /**
 * @Assert\Length(max=4096)
 */
private $plainPassword;