我花了很长时间没有在似乎是一个简单的问题上取得进展。我需要允许用户添加最多三个对表单的引用。每个参考都有一个名称和电话号码(两个文本输入)。我想对每一个做一些简单的验证。我已经创建了我的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文档以获得答案,但没有发现任何会导致name
或phone
抛出错误的内容。我已经尝试在我的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,但它似乎没有什么区别。或者我完全错过了这个想法,也许我应该以完全不同的方式实现这些领域?