symfony2 - 如何在每个页面中全局检索数据库中的数据

use*_*603 7 php symfony doctrine-orm twig

我想从数据库中的表中检索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));
    
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 此动作将list_cities.html.twig定义为:

    <select class="form-control">
    {% for entity in entities %}
    <option>{{ entity.name}}</option>
    {% endfor %}
    </select>
    
    Run Code Online (Sandbox Code Playgroud)
  • finnaly我编辑我的layout.html.twig

    <div>
    {{ render(controller('MedAdBundle:City:listCities'))}}
    </div>
    
    Run Code Online (Sandbox Code Playgroud)

通过这种方式,我可以在我的应用程序的每个页面中访问城市组合框;)

Fla*_*ask 10

另一个好方法是使用渲染.

这允许您从控制器中调用控制器 layout.html.twig

{{ render(controller("AcmeDemoBundle:Helper:citySelector")) }}
Run Code Online (Sandbox Code Playgroud)

您也可以使用ESI缓存输出.


Ald*_*nio 1

我会按照以下步骤进行:

  • 编写一个托管 symfony 实体字段的表单,配置为与 Cities 表一起使用
  • 将此表单定义为 DIC 中的服务
  • 定义一个 twig 扩展,公开一个输出 HTML 表单的函数
  • 使用layout.html.twig中的twig函数,该函数由所有其他模板扩展

作为一种优化,我会看看如何将 Doctrine 与某些缓存系统(例如 memcached)连接起来,以避免在每次页面加载时访问数据库。

您可以在这里找到有关实体字段的文档:http://symfony.com/doc/current/reference/forms/types/entity.html

使用 Symfony 文档了解如何将表单定义为服务以及如何编写您自己的 twig 扩展。