繁体   English   中英

Symfony2-如果定义了验证组,则表单全局验证不起作用

[英]Symfony2 - form global validation not working if validation group is defined

我发现,如果未登录,我对textarea的验证将无法正常进行。 如果是我,则可以。 这是我的Comment.php实体:

 /**
 * @ORM\Column(type="text")
 * @Assert\NotBlank(
 *      message = "Message cannot be blank" 
 * )     
 * @Assert\Length(
 *      min = "3",
 *      minMessage = "Message must have 3 or more characters"           
 * )     
 */
private $content;

在我的CommentType.php中

// ... namespace and uses
class CommentType extends AbstractType
{
    private $user;

    public function __construct($user) {
        $this->user = $user;
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Acme\BlogBundle\Entity\Comment',
            'csrf_protection' => true,
            'validation_groups' => (is_null($this->user) ? 'not_logged' : 'Default'), // here I set validation group if user is logged or not
        ));
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->setAction($builder->getAction().'#submit-comment');

        if(is_null($this->user)) {
            $builder->add('author', 'text', array('label' => 'Autor'))
                    ->add('email', 'text', array('label' => 'E-mail (will not show)'))
                    ->add('content', 'textarea', array('label' => 'Text',))
                    ->add('captcha', 'captcha', array('invalid_message' => 'Bad captcha', 'background_color' => array(255, 255, 255) )); 
        }        
        else {
            $builder->add('content', 'textarea', array('label' => 'Text',));
        }
            $builder->add('save', 'submit', array('label' => 'submit'));
    }

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

如我所写,如果我登录,它可以正常工作(内容字段),但如果没有登录,则内容字段所有其他字段均经过验证。

任何想法?

如果未登录用户,则使用的是“ not_logged”验证组:

$resolver->setDefaults(array(
    'data_class' => 'Acme\BlogBundle\Entity\Comment',
    'csrf_protection' => true,
    'validation_groups' => (is_null($this->user) ? 'not_logged' : 'Default'), // here I set validation group if user is logged or not
));

但是在您的实体中,没有有关该组的信息:

/**
 * @ORM\Column(type="text")
 * @Assert\NotBlank(
 *      message = "Message cannot be blank",
 *      groups={"not_logged"} // specified group
 * )
 * @Assert\Length(
 *      min = "3",
 *      minMessage = "Message must have 3 or more characters",
 *      groups={"not_logged"}, // specified group
 * )
 */
private $content;

所以我找到了解决方案。 我的问题在这里:

     'validation_groups' => (is_null($this->user) ? 'not_logged' : 'Default'), // here I set validation group if user is logged or not

问题在于这些组不在数组中,并且not_logged组也需要默认组(这就是为什么它不起作用)。 因此,有效的解决方案是:

     'validation_groups' => (is_null($this->user) ? array('Default', 'not_logged') : array('Default')),

感谢您的帮助,也很抱歉浪费时间在此错误上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM