如何在Symfony 2中将对象传递到布局视图而不执行操作


How to pass object to the layout view without action in Symfony 2?

我想在布局动态菜单中创建,该菜单将从管理面板进行管理。我所知道的是,对象可以通过控制器的操作传递给视图。

我想要的是将对象传递到布局(树枝引擎(,而无需使用控制器,并且它将独立地形成控制器和操作。

我该怎么做?

如果你想在 Twig 中有一个全局变量/对象,你必须实现Twig_Extension并添加一个新的全局变量/对象(所有模板都可以访问(。

一个简单的例子是:

1( 在<bundle>/Resources/config/services.yml注册服务

services:
  acme.twig.acme_extension:
    class: Acme'DemoBundle'Twig'AcmeExtension
    tags:
      - { name: twig.extension }

2(然后创建扩展:

<?php
namespace Acme'DemoBundle'Twig
class AcmeExtension extends 'Twig_Extension {
  public function getGlobals() {
    return [
      'menu' => new Menu(),
    ];
  }
}

3(然后在您的模板中:

{{ menu.render }} // Whatever

当然,如果需要,您可以将参数传递给 Twig 扩展。

无论如何,如果你正在尝试构建一个菜单,也许你应该看看KnpMenuBundle,它有很大帮助(https://github.com/KnpLabs/KnpMenuBundle(

希望对您有所帮助!