我发现,如果我没有登录,我对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';
}
}
正如我所写的,如果我已登录,它的工作正常(内容字段),但如果没有,所有字段都会经过验证 内容字段除外。
有什么想法吗?
答案 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')),
感谢您提供任何帮助,并且对于在这个错误上浪费时间感到抱歉。