6

Symfony2 应用程序通常围绕捆绑包进行组织。每个捆绑包都包含(许多)控制器。每个控制器都应该映射一个路由。

实际上,路由通常存储在config包文件夹下的特定文件中,或者最终在每个控制器内部进行注释。

我正在寻找的是在 Twig 中识别当前路由是否属于特定 Symfony bundle 的一种方法。是否可以?

作为最后一点,请考虑路由名称应该遵循控制器的名称空间,在我看来,但它也可以是一个随机但唯一的名称,例如qwer_XX而不是ACME_HomeBundle_home. 因此,我们不能诉诸命名空间到路由名称的关联来做我要求的事情。

4

1 回答 1

7

查看Request对象,我找到了一个可能的解决方案。

控制器附加到Request对象上,因此可以在 Twig 中从字符串中提取它:

app.request.attributes.get('_controller')

并检索捆绑名称。例如,可以通过TwigExtension定义这样的过滤功能,例如

public function getFilters() {
    return array(
        ...//other filters
        'bundleName'=>new \Twig_Filter_Method($this, 'bundleNameFilter'),
    );
}

public static function bundleNameFilter($string){
  return strstr(substr(strstr($string, '\\'), 1), '\\', true);
} 

然后,在 twig 中按如下方式使用它:

{{  app.request.attributes.get('_controller') | bundleName }}

希望能帮助到你。

于 2013-02-01T11:09:30.030 回答