我想从数据库中的表中检索Cities名称,并将它们作为选项放在“layout.html.twig”中定义的选择输入(组合框)中。我的所有观点都扩展了'layout.html.twig',那么如何在每个页面中访问城市名称?
[解决]
我无法回复我的主题,我没有太多声誉,所以我编辑了我的主题
找到了解决方案首先我创建了一个动作来检索所有城市名称:
public function listCitiesAction(){
// retreiving cities
$entities = $this->getDoctrine()->getRepository("MedAdBundle:City")->findAll();
return $this->render('MedAdBundle:Ville:list_cities.html.twig',
array('entities' => $entities));
}
此操作将list_cities.html.twig定义为:
<select class="form-control">
{% for entity in entities %}
<option>{{ entity.name}}</option>
{% endfor %}
</select>
finnaly我编辑我的layout.html.twig
<div>
{{ render(controller('MedAdBundle:City:listCities'))}}
</div>
通过这种方式,我可以在我的应用中的每个页面中访问城市组合框;)
答案 0 :(得分:10)
另一个不错的方法是使用render。
这允许您从layout.html.twig
{{ render(controller("AcmeDemoBundle:Helper:citySelector")) }}
您还可以使用ESI缓存输出。
答案 1 :(得分:3)
答案 2 :(得分:1)
我会采取以下步骤:
作为优化,我会看看如何将Doctrine与一些缓存系统(例如memcached)连接起来,以避免在每次页面加载时访问数据库。
您可以在此处找到有关实体字段的文档:http://symfony.com/doc/current/reference/forms/types/entity.html
使用Symfony文档查找如何将表单定义为服务以及如何编写自己的twig扩展。