您可以使用在所有字段上都可用的表单字段类型中定义的“约束”选项。(http://symfony.com/doc/master/reference/forms/types/form.html#constraints)。在您的情况下,您可以像这样添加约束:
$builder->add('autor', 'collection', array(
'constraints' => new NotBlank()),
));
(在这种情况下,不要忘记包含验证组件提供的约束:
use Symfony\Component\Validator\Constraints\NotBlank;
...)
我没有测试,但我认为每个输入都将验证您分配给该字段的约束,并且由于您将“error_bubbling”选项设置为false,因此应将错误消息附加到无效元素。
- 编辑 -
由于您甚至使用 Symfony 的 2.0 版本,我认为这个解决方案可以解决您的问题,但是我强烈建议您更新到 2.3 版本。
您可以创建一个表单事件订阅者(http://symfony.com/doc/2.0/cookbook/form/dynamic_form_modification.html),它将监听 POST_BIND 事件。(请注意,Post Bind 事件自 2.3 版起已弃用,并将在 3.0 中删除);
在您的订阅者类中,您将根据需要验证每个提交的作者,并在出现问题时向表单添加错误。
您的 postBind 方法可能是这样的:
public function postBind(DataEvent $event)
{
$data = $event->getData();
$form = $event->getForm();
if (null === $data) {
return;
}
// get the submited values for author
// author is an array
$author = $form['autor']->getData();
// now iterate over the authors and validate what you want
// if you find any error, you can add a error to the form like this:
$form->addError(new FormError('your error message'));
// now as the form have errors it wont pass on the isValid() method
// on your controller. However i think this error wont appear
// next to your invalid author input but as a form error, but with
// this you can unsure that non of the fields will be blank for example.
}
如果您对核心方法有任何疑问,可以查看 Symfony2 表单组件 API。
http://api.symfony.com/2.0/index.html