2

如何在 Symfony 2.0 中验证嵌入的表单集合(没有实体)?如果解决方案就在这条线上,那么目前升级到 2.1 并不是一个方便的选择。

我尝试使用Valid约束,但它导致所有验证失败。

public function getDefaultOptions(array $options)
{
    $collectionConstraint = new Collection(array (
        ...

        // I tried Valid constraint but this "removes" all validation
        'travel_links' => new Valid(),
    ));

    return array ('validation_constraint' => $collectionConstraint);
}
4

2 回答 2

2

在 Symfony 2.1 中,您可以使用约束选项:

$builder
->add('firstName', 'text', array(
   'constraints' => new Length(array('min' => 3)),
))
->add('lastName', 'text', array(
   'constraints' => array(
       new NotBlank(),
       new Length(array('min' => 3)),
),
));

显然,这在 Symfony 2.0 中不起作用但是, Symfony 2.0 中提供了一个名为validation_constraint的有限约束选项。

$builder
->add('firstName', 'text', array(
   'validation_constraint' => new Length(array('min' => 3)),
));

如果您需要验证多个条件(例如 NotBlank、Lenght),您可以自己定义一个自定义约束来一次完成所有验证。:)

编辑:不要忘记包含use Symfony\Component\Validator\Constraints\Length或您正在使用的任何约束。:)

于 2013-02-12T20:43:53.990 回答
0

在 Symfony2.x 的实际版本中,您可以将 cascade_validation 设置为 true(默认为 false) http://symfony.com/doc/current/reference/forms/types/form.html

文档说:“将此选项设置为 true 以强制对嵌入的表单类型进行验证。例如,如果您有一个带有嵌入 CategoryType 的 ProductType,则在 ProductType 上将 cascade_validation 设置为 true 将导致 CategoryType 中的数据也被验证。

除了使用此选项,您还可以在模型中使用 Valid 约束来强制验证存储在属性上的子对象。”

于 2014-10-06T10:31:15.683 回答