我可以在树枝模板中引用“ThisBundle”,而不是硬编码包名称吗?

时间:2013-12-29 18:44:40

标签: symfony twig

我希望能够在树枝模板中隐式引用当前的包;通常你会看到:

{% stylesheets '@AppBundle/Resources/public/css/main.css' %}
    <link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}
…
{%- include 'AppBundle:Alpha:nav.html.twig' -%}


但是,我不想强​​迫 AppBundle ,而是想说 ThisBundle

{% stylesheets '@ThisBundle/Resources/public/css/main.css' %}
    <link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}
…
{%- include 'ThisBundle:Alpha:nav.html.twig' -%}


目前是否可以采用这些方式?

3 个答案:

答案 0 :(得分:3)

当然你可以这样做。首先阅读:http://symfony.com/doc/current/cookbook/templating/namespaced_paths.html

树枝名称空间处理器实际上并不关心(甚至真正了解)束。相反,它维护一个数组,该数组将@whatever映射到查找所需文件的一个或多个位置。

默认情况下,symfony TwigBundle:DependencyInjection:TwigExtension类将所有现有的bundle添加到此数组中。检查代码是有益的。

您真正需要做的就是将路径添加到config.yml

twig:
    debug:            %kernel.debug%
    strict_variables: %kernel.debug%
    paths:
        "%kernel.root_dir%/../src/Cerad/Bundle/AppBundle/Resources/views": ThisBundle

当然,实际上没有“当前”捆绑这样的东西。您仍然需要设置资源路径,如上所示。但我很确定这会满足您的需求。

很抱歉所有的修改。为此,您需要专门使用twig命名空间。如下所示:

{%- include '@ThisBundle/Alpha/nav.html.twig' -%}

答案 1 :(得分:2)

不,这是不可能的。

但是,您可以创建一个CoreBundle来存储通用模板,例如导航和网站范围的样式表。

答案 2 :(得分:1)

不,你不能。并且确实没有真正的用例,您应该能够做到这一点。一个bundle知道它自己的名字,因为它知道它的bundle类(这是名字)并且至少它知道命名空间,这是包名......没有办法改变它捆绑名称而不更改捆绑包。