[英]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.