gpt4 book ai didi

php - 当所有其他字段映射到实体时验证 Symfony2 表单类中的非映射字段

转载 作者:行者123 更新时间:2023-12-02 07:05:22 25 4
gpt4 key购买 nike

我的 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,
));
}

我最初尝试像这样将此字段的验证添加到 bundle 的 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(); 自行验证额外字段,但我非常愿意喜欢一次验证整个表单并显示与字段本身有关的非映射字段的任何错误。

有没有人有什么想法?

最佳答案

您可以简单地将 property_path=null 传递给数据表单字段。属性路径用于确定相关的实体字段,通过将其值设置为空,您告诉表单不要向实体提供字段的值。

// ...
->add('data', 'file', array(
'label' => 'CSV Data File',
'mapped' => false,
'required' => false,
'property_path' => null,
));
// ...

更新:

要验证此字段 ID,请创建嵌入式表单并传递数据字段和验证约束:

class dataType extends AbstractType

// ...

public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('data', 'file', array(
'label' => 'CSV Data File',
'required' => false,
));
}

public function getDefaultOptions(array $options)
{
$collection = new Collection(array(
'data' => new NotBlank(),
// ...
));

return array(
'validation_constraint' => $collection,
);
}

//...

并编辑实体表单类:

->add('data', 'file', array(
'label' => 'CSV Data File',
'mapped' => false,
'required' => false,
));

替换为:

->add('custom', new DataType(), array(
'mapped' => false,
));

关于php - 当所有其他字段映射到实体时验证 Symfony2 表单类中的非映射字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13071865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com