【问题标题】:Twig / Symfony 2.3.4: Extending twig template stored in databaseTwig / Symfony 2.3.4:扩展存储在数据库中的树枝模板
【发布时间】:2013-08-29 11:32:59
【问题描述】:

我目前正在 Symfony 2.3.4 中构建一个 CMS,作为这个 CMS 的一部分,我想将所有的树枝模板存储在一个数据库中。我已经阅读了如何在数据库中存储和访问它们,这似乎很简单——但是,仍然存在一个问题。必须可以扩展存储在数据库中的模板,但我不知道该怎么做。

如果有人有任何经验或知识,我将非常感激。

干杯!

【问题讨论】:

    标签: php database templates symfony twig


    【解决方案1】:

    您可能想深入了解Twig_TokenParser_Extends 以了解extends 标记在内部的工作原理。

    【讨论】:

    • 感谢您的建议 - 原来我的数据库加载器会自动处理扩展模板。有一次我变得懒惰并决定在尝试之前先问一下,解决方案非常简单......但是,通过供应商代码总是好的建议,你永远不知道你会发现什么,它总是有助于理解。
    【解决方案2】:

    按照symfony forumTwig Recipes Page 的指南,我能够将所有模板存储在数据库中,并自动扩展作品。请确保您的 isFresh 和 getCacheKey 返回值,否则由于某种原因您将获得无限递归。

    另外值得注意的是,你必须给数据库加载服务添加一个标签,而不是像 symfony 论坛建议的那样添加 chain_loader 服务。

    vendor.bundle.twig_database_loader:
        class: Vendor\Bundle\Twig\TwigDatabaseLoader
        arguments: [ @doctrine.orm.entity_manager ]
        tags:
            - { name: twig.loader }
    

    这段代码可以很好地工作。

    【讨论】:

    • 虽然上面添加了一些实用程序,但它似乎也大大增加了查询的数量 - 每个模板一个,无论它驻留在文件系统或数据库中。详情在this question。查询的数量对您来说是个问题吗?编辑模板和清除缓存怎么样?
    • @geoB 这对我的目的来说没问题,因为模板不会被不断地创建/更新,而且无论如何也没有大量的模板。我没有注意到查询数量的问题,但是我没有深入研究。长话短说,在一个小系统上它似乎工作正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多