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

问题描述 投票:0回答:7

如何在 Symfony 4 的自定义 Twig 函数 (

.env
) 中使用
\Twig_SimpleFunction
文件中的环境变量?

symfony twig twig-extension
7个回答
109
投票

这是一种更简单的方法(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";

有关更多详细信息,请参阅 Symfony 文档中的基于环境变量的配置环境变量处理器。环境变量处理器可让您执行诸如修剪变量或设置默认值之类的操作。


34
投票

无需任何额外配置即可访问 twig 模板中的环境变量:

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


17
投票

安装Dotenv组件,这样就可以使用

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
投票

现在就可以直接操作了。

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


2
投票

也使用 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') }}


2
投票

将其作为全局变量添加到 twig.yaml 中,如下所示,然后您可以在任何地方使用它:

twig: 
  globals: 
    env: '%env(SYMFONY_ENV)%'

-3
投票

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

$_ENV["APP_ENV"]
© www.soinside.com 2019 - 2024. All rights reserved.