是否可以在另一个twig文件中导入带有一堆常量的文件?
如:
{% set VAR1 = constant("...:var1") %}
{% set VAR2 = constant("...:var2") %}
{% set VAR3 = constant("...:var3") %}
...
然后,在另一个文件中使用这些常量?
我尝试过include
,import
,use
和embed
。
这些似乎都不适合这种情况。
答案 0 :(得分:1)
按照设计,您无法从其他上下文导入变量,因为没有参数的{% include %}
将通过副本而非参考传递您当前的上下文。
这与{% macro %}
变量作为参数的_context
完全相同,因此您无法在宏内部创建新变量,然后在任何位置{% import %}
创建宏文件
但是,您可以从扩展文件创建变量,并在子文件中使用它们。
例如:
a.html.twig
{% set test = 'Hello!' %}
b.html.twig
{% extends 'a.html.twig' %}
{{ test }}
将显示"您好!"渲染b.html.twig时,或任何其他扩展a.html.twig的文件。
如果按照设计,您无法在应用中扩展父模板,则可以创建Twig扩展并实施getGlobals()
方法(doc)。
示例(对我来说,在Fuz / TestBundle中,替换所有名称空间以满足您的需求):
Twig扩展名:
PHP Fuz / TestBundle / Twig / Extension / AppGlobalsExtension.php
<?php
namespace Fuz\TestBundle\Twig\Extension;
class AppGlobalsExtension extends \Twig_Extension
{
public function getGlobals()
{
return array(
'var1' => \Fuz\TestBundle\Component\Service::SOME_CONSTANT_A,
'var2' => \Fuz\TestBundle\Component\Service::SOME_CONSTANT_B,
'var3' => \Fuz\TestBundle\Component\Service::SOME_CONSTANT_C,
// ...
);
}
public function getName()
{
return 'appglobals';
}
}
配置:
YML Fuz / TestBundle / Resources / config / services.yml
parameters:
fuz_tools.twig.appglobals_extension.class: Fuz\TestBundle\Twig\Extension\AppGlobalsExtension
services:
fuz_tools.twig.appglobals:
class: '%fuz_tools.twig.appglobals_extension.class%'
tags:
- { name: twig.extension }
您现在可以在应用程序视图中的任何位置使用{{ var1 }}
,{{ var2 }}
....
答案 1 :(得分:0)
这应该为你做到了(使用with
),只需传递变量:
{% include "ACMETestBundle::test.html.twig" with {var1: VAR1, var2: VAR2, ... } %}