Php 添加一个选项";选择全部";对于EntityType字段,返回错误;无法反转属性路径“的值”;

Php 添加一个选项";选择全部";对于EntityType字段,返回错误;无法反转属性路径“的值”;,php,forms,symfony,symfony-forms,Php,Forms,Symfony,Symfony Forms,我有一个带有EntityType字段的表单,用于检索酒店列表 我想在该列表中添加一个选项“全选”,以直接获得所有酒店的列表 我创建了一个EntityTypeExtension(我现在更喜欢它,而不是自定义扩展类型),其中包含以下内容: public function finishView(FormView $view, FormInterface $form, array $options) { $list = $this->em->getRepository($option

我有一个带有EntityType字段的表单,用于检索酒店列表

我想在该列表中添加一个选项“全选”,以直接获得所有酒店的列表

我创建了一个EntityTypeExtension(我现在更喜欢它,而不是自定义扩展类型),其中包含以下内容:

public function finishView(FormView $view, FormInterface $form, array $options)
{
    $list = $this->em->getRepository($options['class'])->findAll();
    $new_choice = new ChoiceView($list, 'all', 'Select all'); // <- new option
    $view->vars['choices'][] = $new_choice;//<- adding the new option
}
我假设DataTransformer不识别“all”选项


你知道吗?我应该重载EntityType DataTransformer吗?

您要么需要向表单类型选项添加
multiple=>true
,以允许自动转换ID数组(前提是您的实体有一组酒店),要么需要实现您自己的数据转换器(这相当简单)

在您的情况下,您需要一个视图转换器

数据转换器文档:


我认为ChoiceView构造函数的value参数(第二个参数)应该是
$list
中对象id的数组,因为
EntityType
希望选项的值是对象id。

您需要向表单类型选项中添加
multiple=>true
,以允许自动转换id数组(前提是您的实体有一组酒店)或者,您需要实现自己的数据转换器(它相当简单)

在您的情况下,您需要一个视图转换器

数据转换器文档:

我认为ChoiceView构造函数的value参数(第二个参数)应该是
$list
中对象id的数组,因为
EntityType
希望选项的值是对象id

Symfony\Component\Validator\ConstraintViolation

Object(Symfony\Component\Form\Form).children[hotel] = all

Caused by:
Symfony\Component\Form\Exception\TransformationFailedException

Unable to reverse value for property path "[hotel]": The choice "all" does not exist or is not unique

Caused by:
Symfony\Component\Form\Exception\TransformationFailedException

The choice "all" does not exist or is not unique