如何验证表格集中的所有子项?

时间:2015-03-25 19:30:42

标签: forms validation symfony propel

我花了很长时间没有在似乎是一个简单的问题上取得进展。我需要允许用户添加最多三个对表单的引用。每个参考都有一个名称和电话号码(两个文本输入)。我想对每一个做一些简单的验证。我已经创建了我的ReferenceType并将其嵌套到主窗体中,其中包含以下内容(注意,我创建了PhoneNumber验证器并添加了Null()仅用于测试):

$builder->add('references', 'collection', array(
    'type' => new ReferenceType(),
    'by_reference' => false,
    'allow_add' => true,
    'label' => false,
    'required' => false,
    'attr' => array('class' => 'reference'),
    'options' => array(
        'required' => false,
        'label' => false,
    ),
    'cascade_validation' => true,
    'constraints' => array(
      new Null(),
      new PhoneNumber(),
    )
));

引用类型:

$builder->add('name', 'text', array(
    'label' => 'Reference',
    'required' => false,
    'cascade_validation' => true,
    'attr' => array(
        'placeholder' => 'Name'
    )
));
$builder->add('phone', 'text', array(
    'label' => false,
    'required' => false,
    'attr' => array(
        'placeholder' => 'Phone Number'
    ),
    'cascade_validation' => true,
    'constraints' => array(
        new Length(array('max' => 14)),
        new PhoneNumber(),
  )
));

所有这些都非常简单直接。但是,由于与这些引用相关的任何原因,我无法让表单抛出错误。我使用 Propel 作为我的ORM,并且有很多验证可以在主窗体上正常工作。除验证外,这些引用还会正确显示和运行。它们都映射到一个列(references),我尝试了Propel的type="array"以及定义我自己的getter和setter,它序列化了项目数组。 type=array对集合完全不起作用,序列化它似乎工作正常。

我搜索了SO和symfony.com文档以获得答案,但没有发现任何会导致namephone抛出错误的内容。我已经尝试在我的validation.yml文件中添加验证但没有成功(只有3个字符用于测试):

references:
    - Valid: ~
    - Collection:
        fields:
            name:
                - Length:
                    max: 3
                    maxMessage: Please limit your reference's name to 3 characters or less.

我可能在这里遗漏了一些非常明显的东西,但我似乎无法掌握什么。我也通过Profiler进行挖掘,一切看起来都是正确的。

是否可以提供有关要查找的内容的提示?似乎只为引用创建一个新的数据库有点矫枉过正(它们不需要是可搜索的或任何东西)。关于收藏的Propel has some information,但它似乎没有什么区别。或者我完全错过了这个想法,也许我应该以完全不同的方式实现这些领域?

0 个答案:

没有答案