如何使用 Symfony formbuilder 只获取实体的特定元素?

How can I get only specific elements of an entity with Symfony formbuilder?

在我的表单生成器中,我从一个实体创建了一个 select 框:

$options['choice_label'] = function ( $entity) use ($name) {
                        if( $entity->getCategory() == null) {
                          return $entity->getName();
                        } 
                    };

在Category 为NULL 的情况下,我想获得一个选项字段,否则我不想要一个选项字段。 但是发生的是,在类别不为 NULL 的情况下,我得到空的选项字段,实际上我根本不需要选项字段。

我得到的:

<select>
  <option>value with category 1</option>
  <option>value with category 2</option>
  <option>value with category 3</option>
  <option></option>
  <option></option>
  <option></option>
  <option></option>
  <option></option>
  <option></option>
  <option></option>
  <option></option>
</select>

我需要的:

<select>
  <option>value with category 1</option>
  <option>value with category 2</option>
  <option>value with category 3</option>
</select>

我看到两种方法,可以解决你的问题。

  1. 将实体类型与查询生成器结合使用,将正确的选项传递给您的 select https://symfony.com/doc/current/reference/forms/types/entity.html

  2. 使用选择类型,但将选择写入数组并将其传递给表单项 Symfony2 Form Builder - creating an array of choices from a DB query

如果查询构建器抛出“无法转换为字符串”之类的错误,您将必须为相关实体定义一个字符串表示形式。您需要字符串来告诉 typeField 应该在 select.

中显示哪个属性

实体类型的解决方法如下:

  1. 添加一个简单的选择标签
$builder->add('users', EntityType::class, [
    // looks for choices from this entity
    'class' => User::class,
    // select the property which should be used to represent your option in select
    'choice_label' => 'username',
]);
  1. 添加更具体的选择标签

$builder->add('category', EntityType::class, [
    'class' => Category::class,
    'choice_label' => function ($category) {
        return $category->getDisplayName();
    }
])

Ofc 指的是文档 https://symfony.com/doc/current/reference/forms/types/entity.html