Symfony2 应用程序通常围绕 bundle 进行组织。每个 bundle 都包含(许多) Controller 。每个 Controller 都应该映射一个路由。
实际上,路由通常存储在 config
下的特定文件中。包的文件夹,或者最终在每个 Controller 内进行注释。
我正在寻找的是 Twig 中的一种方法来识别当前路由是否属于特定的 Symfony 包。是否可以?
最后请注意,在我看来,路由名称应该遵循 Controller 的命名空间,但它也可以是一个随机但唯一的名称,例如qwer_XX
而不是 ACME_HomeBundle_home
.因此,我们不能求助于命名空间到路由名称的关联来完成我的要求。
最佳答案
看着Request对象,我找到了一个可能的解决方案。
Controller 连接到 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 }}
希望能帮助到你。
关于symfony - 如果当前路由属于特定的 Symfony2 包,则检查 Twig 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14644501/