symfony - 如果当前路由属于特定的 Symfony2 包,则检查 Twig 模板

标签 symfony routes bundle twig

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/

相关文章:

forms - 使用 ManyToOne 进行验证

php - Symfony 4 启动 session

symfony - 在 Symfony 中转换表单字段值

symfony - 使用 nginx 在同一域上提供 react 前端和 php 后端

macos - JavaFX native bundle 图标 OS X

android - 将数据从 Activity 发送到 Tab View fragment

php - 在 get 方法路由 laravel 中允许特殊字符

ruby-on-rails - Rails and Devise - 命名空间是未初始化的常量

go - Gin-Gonic 限制路由

html - ASP.Net Bundle CSS 样式