templates - 如何在 Symfony2 环境中注册另一个(自定义)Twig 加载器?

标签 templates symfony twig

我想从我的 Symfony2 应用程序中的数据库加载某些 Twig 模板,同时仍然保留使用 native 加载器在标准文件系统位置呈现模板的可能性。如何实现这一目标?

据我所知,不可能将多个加载器注册到 Twig 环境。我一直在思考两种方式(目前):

  • Replace the default loader使用自定义代理类。当使用标准@Bundle-notation 引用模板时,代理会将请求传递给默认加载器。在其他情况下,请求将传递给我的自定义(数据库)加载器;或
  • 建立一个全新的 Twig 环境。此方法需要在两个环境中注册自定义 Twig 扩展,并且它不允许交叉引用来自不同来源的模板(一些来自 @Bundles,一些来自数据库)


  • 更新 1:

    Twig 似乎支持 Twig_Loader_Chain可以在我的第一个选项中使用的类。尽管如此,默认加载器应该可以访问并作为第一个选项传递给链。

    最佳答案

    要使用 Twig_Loader_Chain,您需要 Symfony 2.2
    https://github.com/symfony/symfony/pull/6131
    然后你可以简单地配置你的加载器:

    services:
        twig.loader.filesystem:
            class: %twig.loader.filesystem.class%
            arguments:
                - @templating.locator
                - @templating.name_parser
            tags:
                - { name: twig.loader }
        twig.loader.string:
            class: %twig.loader.string.class%
            tags:
                - { name: twig.loader }
    

    更新:
    看起来仍然存在一些问题(文件系统加载器有时找不到模板)但我发现了这个:
    http://forum.symfony-project.org/viewtopic.php?t=40382&p=131254

    似乎工作得很好!

    关于templates - 如何在 Symfony2 环境中注册另一个(自定义)Twig 加载器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14343435/

    相关文章:

    c++ - 将 lambda 函数转换为另一个编译单元中的普通函数是否会缩短编译时间?

    symfony - 在symfony2奏鸣曲管理捆绑中设置默认值

    php - Symfony2 和 Windows 虚拟机

    symfony1 - symfony2 生产准备好了吗?

    php - 如何获得 Twig 的天数差异

    twig - 使用 twig 从 View 中获取 http 引用 URI

    Twig 中的 AngularJS 组件

    c++ - 模板特化中的多个 void_t 调用

    c++ - 什么是变量模板

    css - 好奇的 '-' 和现场时出现的空间