在Symfony 4中的自定义Twig函数中使用环境变量(来自`.env`文件)

时间:2018-03-04 00:54:37

标签: twig environment-variables symfony4 twig-extension

如何在Symfony 4中的自定义Twig函数(.env)中使用\Twig_SimpleFunction文件中的环境变量?

6 个答案:

答案 0 :(得分:31)

这是一种更简单的方法(Symfony 4),不涉及任何自定义扩展。就我而言,我想将Google跟踪代码管理器ID设置为.env文件中的环境变量:

GOOGLE_TAG_MANAGER_ID="GTM-AAA12XX"

接下来,引用config/packages/twig.yaml文件中的环境变量:

twig:
    globals:
        google_tag_manager_id: '%env(GOOGLE_TAG_MANAGER_ID)%'

现在您可以在Twig模板中使用标记管理器值,如下所示:

{{ google_tag_manager_id }}

对于生产系统,您可能没有.env个文件。在这种情况下,请在Apache配置文件中设置变量:

SetEnv GOOGLE_TAG_MANAGER_ID GTM-AAA12XX

我没有使用nginx配置文件进行测试,但我认为这应该可行:

fastcgi_param GOOGLE_TAG_MANAGER_ID "GTM-AAA12XX";

答案 1 :(得分:5)

可以在没有任何额外配置的情况下访问树枝模板中的环境变量:

{{ app.request.server.get('MY_ENV_VAR') }}

答案 2 :(得分:3)

安装Dotenv component,以便您可以使用getenv()功能:

<?php
// src/Twig/AppExtension.php

namespace App\Twig;

use Twig\Extension\AbstractExtension;
use Twig\TwigFunction;

class AppExtension extends AbstractExtension
{
    public function getFunctions(): array
    {
        return [
            new TwigFunction('my_function', [$this, 'myFunction']),
        ];
    }

    public function myFunction($varname)
    {
        $value = getenv($varname);

        // Do something with $value...

        return $value;
    }
}

如果您只想返回环境变量的值,可以像这样简化代码:

<?php
// src/Twig/AppExtension.php

namespace App\Twig;

use Twig\Extension\AbstractExtension;
use Twig\TwigFunction;

class AppExtension extends AbstractExtension
{
    public function getFunctions(): array
    {
        return [
            new TwigFunction('my_function', 'getenv'),
        ];
    }
}

无论哪种方式,你都可以在Twig中做到:

{{ my_function('APP_ENV') }}

{% if my_function('MAILER_URL') == 'null://localhost' %}
    Mailer URL not set!
{% endif %}

{# etc. #}

更好的功能名称当然是例如getenv。在这里,我使用了my_function,这样我们自己的代码就不会与Dotenv组件提供的getenv()函数混淆。

如果找不到环境变量,getenv()函数将返回false

答案 3 :(得分:0)

我也使用了DotEnv:

$twig = new \Twig\Environment($loader); // or however you access your Twig instance.
$twig->addFunction(
    new \Twig\TwigFunction('getenv', function ($key) {
        return getenv($key);
    })
);

然后在模板中,我将仅使用{{ getenv('SOME_ENV_VARIABLE') }}

答案 4 :(得分:0)

你可以像这样在项目的任何地方使用它

$_ENV["APP_ENV"]

答案 5 :(得分:0)

现在您可以直接操作了。

{{ app.request.server.get('APP_ENV') }}