【发布时间】:2012-10-25 15:20:40
【问题描述】:
我的 Symfony2 应用程序中有一个表单,主要用于持久化实体,但我添加了一个额外的非映射字段,用于上传文件,然后处理和删除该文件。但是,我不知道如何验证这个附加字段。
这里是在我的表单类的buildForm()方法中定义的:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', 'text', array('label' => 'Name'))
// ...
->add('data', 'file', array(
'label' => 'CSV Data File',
'mapped' => false,
'required' => false,
));
}
我最初尝试像这样将该字段的验证添加到捆绑包的 validation.yml 文件中,但由于该字段不是实体的一部分,因此会抛出一个错误。
My\Bundle\Entity\MyEntity:
properties:
data:
- File:
maxSize: 1024k
mimeTypes: text/*
mimeTypesMessage: Please upload a CSV file
我的下一个尝试是在表单类本身中添加约束,就像这样,但您似乎只能以这种方式验证数组,而不是对象,我猜这是因为它主要与我的实体相关联。
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$collectionConstraint = new Collection(array(
'data' => new File(array(
'maxSize' => '1024k',
'mimeTypes' => 'text/*',
'mimeTypesMessage' => 'Please upload a CSV file',
)),
));
$resolver->setDefaults(array(
'data_class' => 'My\Bundle\Entity\MyEntity',
'constraints' => $collectionConstraint,
));
}
从文档看来,我可以使用 $this->get('validator')->validateValue(); 自行验证额外字段,但我很想一次验证整个表单并显示与非映射字段相关的任何错误字段本身。
有人有什么想法吗?
【问题讨论】: