我有一个简单的表单,我不使用实体类。
在帖子之后我想使用验证器验证值,但即使值为空或无效,错误列表的计数也始终为零。
这是(或多或少)我正在执行的代码:
use Symfony\Component\Validator\Constraints\Email;
use Symfony\Component\Validator\Constraints\MinLength;
use Symfony\Component\Validator\Constraints\Collection;
public function formAction(){
$collectionConstraint = new Collection(array(
'name' => array(new MinLength(5)),
'email' => array(new Email(array('message' => 'Invalid email address'))),
));
$options = array('validation_constraint' => $collectionConstraint);
$form = $this->createFormBuilder(null, $options)
->add('name', 'text', array('label' => '', 'attr' => array('placeholder' => 'Your name')))
->add('email', 'email', array('label' => '', 'attr' => array('placeholder' => 'E-mail')))
->getForm();
$request = $this->getRequest();
$error = false;
if ($request->getMethod() == 'POST') {
$form->bindRequest($request);
if ($form->isValid()) {
$data = $form->getData();
$errorList = $this->get('validator')->validateValue($data, $collectionConstraint);
// count($errorList) is always zero even when the values are empty or invalid…
}
else {
$error = true;
}
}
// ... snip ...
}
答案 0 :(得分:0)
我想这是正常的,因为你计算一个测试中$errorList
内的元素数量,告诉表单是有效的。所以我会说,当表单有效时,它会显示0,当它不显示时,它会显示任何内容。
您不需要手动运行验证,因为它已由$form->isValid()
语句执行。
如果您想计算已发生的约束违规次数,请在致电count($form->getErrors())
后运行$form->isValid()
。
最后,如果还没有完成,你应该明确阅读http://symfony.com/doc/current/book/forms.html#using-a-form-without-a-class。
干杯