【问题标题】:Symfony 4 Remove a default set constraint (notBlank) on a RepeatedType Password fieldSymfony 4删除重复类型密码字段上的默认设置约束(notBlank)
【发布时间】:2018-09-27 12:28:02
【问题描述】:

我在控制器中有表单生成器

$form = $this->createFormBuilder($user)

                 ->add('firstname',TextType::class,array(
                     'label' => 'First name',
                     'attr' => array(
                         'class' => 'form-control',
                         'value' => $user->getFirstname()
                     ),
                 ))
                 ->add('surname',TextType::class,array(
                     'label' => 'Last name',
                     'attr' => array(
                         'class' => 'form-control',
                         'value' => $user->getSurname()
                     )
                 ))
                 ->add('email', EmailType::class, array(
                     'label' => 'Email',
                     'attr' => array(
                         'class' => 'form-control',
                         'value' => $user->getEmail(),
                     ),
                 ))
                 ->add('plainPassword', RepeatedType::class, array(

                     'type' => PasswordType::class,
                     'invalid_message' => 'The password fields must match.',
                     'options' => array('attr' => array('class' => 
                        'password-field')),

                     'first_options'  => array('label' => 'Password'),
                     'second_options' => array('label' => 'Repeat 
                      Password'),
                 ))

正如您在plainPassword 字段中看到的,没有设置约束。我的意图是让用户如果不想填写此字段,则无需填写,但是当我提交表单时,NotBlank 约束被触发并且表单不会被提交。我尝试设置/添加,required 到 FALSE,不起作用。

我什至尝试添加new Blank() 约束,但它仍然保持默认约束。

有没有办法删除这个默认的notBlankconstraint ??

约束开始的屏幕截图

【问题讨论】:

  • 检查您的实体并确认您在 plainPassword 中有 NotBlank() 断言/约束注释
  • 其他方法在表单中设置映射=> false。然后,在控制器中获取它以检查它是否有数据并在这种情况下设置它。
  • @AythaNzt ,您的第一条评论就是解决方案。我为该属性添加了 noblank() 断言。非常感谢。

标签: php symfony symfony4


【解决方案1】:

感谢@AythaNzt 的评论。所以约束在我的“用户实体”类上声明了一个注释

原来是这样

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

删除了NotBlank() 于是变成了

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

【讨论】:

    猜你喜欢
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-11
    • 2012-06-02
    相关资源
    最近更新 更多