Symfony2 - 如果定义了验证组,则表示全局验证无效

时间:2013-12-11 17:20:19

标签: php forms validation symfony

我发现,如果我没有登录,我对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';
    }
}

正如我所写的,如果我已登录,它的工作正常(内容字段),但如果没有,所有字段都会经过验证 内容字段除外。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

如果未记录用户,则使用“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;

答案 1 :(得分:0)

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

     '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')),

感谢您提供任何帮助,并且对于在这个错误上浪费时间感到抱歉。