Symfony 3:如何在具有大量对象的 Form 中实现 EntityType?
Symfony 3: How can I implement an EntityType in Form with a lot of objects?
我有一个实体 City
,其中存储了超过 30000 个对象。用户可以添加具有 ManyToOne
到 City
关系的 Address
对象。
但是在Form构建过程中,<input>
type radio or select
的渲染不适合对象的数量...
我使用以下实现代码(它是一个片段):
public function buildForm(FormBuilderInterface $builder, array $options)
{
/* Pattern to get cities */
$pattern = 'Bor%'; //I use this filter to reduce the number of objects but not sufficient
$builder
->add('city', EntityType::class, array(
'class' => 'AppPlatformBundle:City',
'choice_label' => 'name',
'multiple' => false,
'expanded' => true,
'query_builder'=> function(CityRepository $repository) use($pattern) {
return $repository->getCitiesWithPattern($pattern);
}));
}
我认为解决方案是使用 TextType,用户可以在开始键入任何内容时选择建议。但是我不知道如何实现这个。
请问你有办法解决我的问题吗?
谢谢
通过以下步骤:
- 创建继承自简单 TextType 的自定义表单类型
- 将此自定义表单类型与 javascript 自动完成插件和 ajax 调用一起使用
- 创建您的自定义操作以检索您对 select 框(由插件创建)的选择
- 在您的自定义表单类型中使用数据转换器来检索对象而不是值
非常感谢 Fabien。
我能够为我实施一个好的解决方案:)
所以对于任何对我的解决方案感兴趣的人:
我将城市字段定义为 HiddenField,例如:
$builder
->add('city', HiddenType::class);
我使用Data Transformer将City
对象转换成唯一的Id(对象的字段Id)
在 Twig 模板中,我实现了 jQuery-ui Autocomplete
在后端,我创建了一个路由,能够 return 一个 Json 响应,所有城市都由 jQuery 插件的 term
过滤。
在前端,我开发了一个 jquery 脚本,它附加了一个新字段 "city",类型为 Text
和自动完成操作。
收到响应后,我用 ID 类型 Hidden
填充字段 city
。
我有一个实体 City
,其中存储了超过 30000 个对象。用户可以添加具有 ManyToOne
到 City
关系的 Address
对象。
但是在Form构建过程中,<input>
type radio or select
的渲染不适合对象的数量...
我使用以下实现代码(它是一个片段):
public function buildForm(FormBuilderInterface $builder, array $options)
{
/* Pattern to get cities */
$pattern = 'Bor%'; //I use this filter to reduce the number of objects but not sufficient
$builder
->add('city', EntityType::class, array(
'class' => 'AppPlatformBundle:City',
'choice_label' => 'name',
'multiple' => false,
'expanded' => true,
'query_builder'=> function(CityRepository $repository) use($pattern) {
return $repository->getCitiesWithPattern($pattern);
}));
}
我认为解决方案是使用 TextType,用户可以在开始键入任何内容时选择建议。但是我不知道如何实现这个。
请问你有办法解决我的问题吗?
谢谢
通过以下步骤:
- 创建继承自简单 TextType 的自定义表单类型
- 将此自定义表单类型与 javascript 自动完成插件和 ajax 调用一起使用
- 创建您的自定义操作以检索您对 select 框(由插件创建)的选择
- 在您的自定义表单类型中使用数据转换器来检索对象而不是值
非常感谢 Fabien。
我能够为我实施一个好的解决方案:)
所以对于任何对我的解决方案感兴趣的人:
我将城市字段定义为 HiddenField,例如:
$builder
->add('city', HiddenType::class);
我使用Data Transformer将City
对象转换成唯一的Id(对象的字段Id)
在 Twig 模板中,我实现了 jQuery-ui Autocomplete
在后端,我创建了一个路由,能够 return 一个 Json 响应,所有城市都由 jQuery 插件的 term
过滤。
在前端,我开发了一个 jquery 脚本,它附加了一个新字段 "city",类型为 Text
和自动完成操作。
收到响应后,我用 ID 类型 Hidden
填充字段 city
。