我写了一个包(Alsatian /
FormBundle),它可以在服务器端实现您想要的功能。
- 如何避免通过每个表单渲染加载每个实体:
abstract class AbstractExtensibleChoicesType extends AbstractRoutableType { public function configureOptions(OptionsResolver $resolver) { $resolver->setDefault('choices',array()); } }- 如何使用缓存的内容填充表单字段:
我建议,这是您自己的逻辑:创建一个仅返回(作为HTML)的控制器:
<option value="1">Option 1</option><option value="2">Option 2</option>
在控制器中设置Maxage:
public function getOptionsAction(Request $request) // Home { $choices = $this->getDoctrine()->getManager()->getRepository //.... return $this->render(); }使用javascript加载此URL,并将html结果放入您的选择字段。
如果您使用的是Select2之类的东西:您的控制器还可以将选项作为JSONReponse()返回,那么您可以直接从select2
ajax选项加载此JSON(请参阅包文档,这就是我的用法)。
- 最困难的是:如何使提交的选择有效:
在Form :: PRE_SUBMIT事件中获取汇总的选择(如果使用表单进行编辑,则也请获取PRE_SET_DATA),然后将这些选择重新注入到字段中。



