如何使用 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>
我看到两种方法,可以解决你的问题。
将实体类型与查询生成器结合使用,将正确的选项传递给您的 select
https://symfony.com/doc/current/reference/forms/types/entity.html
使用选择类型,但将选择写入数组并将其传递给表单项
Symfony2 Form Builder - creating an array of choices from a DB query
如果查询构建器抛出“无法转换为字符串”之类的错误,您将必须为相关实体定义一个字符串表示形式。您需要字符串来告诉 typeField 应该在 select.
中显示哪个属性
实体类型的解决方法如下:
- 添加一个简单的选择标签
$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',
]);
- 添加更具体的选择标签
$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
在我的表单生成器中,我从一个实体创建了一个 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>
我看到两种方法,可以解决你的问题。
将实体类型与查询生成器结合使用,将正确的选项传递给您的 select https://symfony.com/doc/current/reference/forms/types/entity.html
使用选择类型,但将选择写入数组并将其传递给表单项 Symfony2 Form Builder - creating an array of choices from a DB query
如果查询构建器抛出“无法转换为字符串”之类的错误,您将必须为相关实体定义一个字符串表示形式。您需要字符串来告诉 typeField 应该在 select.
中显示哪个属性实体类型的解决方法如下:
- 添加一个简单的选择标签
$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',
]);
- 添加更具体的选择标签
$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