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

Twig 在Symfony 4的自定义细枝函数中使用环境变量(来自“.env”文件),twig,environment-variables,symfony4,twig-extension,Twig,Environment Variables,Symfony4,Twig Extension,如何在Symfony 4中的自定义细枝函数(\Twig\u SimpleFunction)中使用.env文件中的环境变量?安装,以便您可以使用getenv()函数: <?php // src/Twig/AppExtension.php namespace App\Twig; use Twig\Extension\AbstractExtension; use Twig\TwigFunction; class AppExtension extends AbstractExtension

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

安装,以便您可以使用
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;
    }
}
当然,更好的函数名应该是
getenv
。这里我使用了
my_函数
,这样我们自己的代码就不会与Dotenv组件提供的
getenv()函数
相混淆

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

这里有一个更简单的方法(Symfony 4),它不涉及任何自定义扩展。在我的例子中,我想将Google Tag Manager Id设置为
.env
文件中的一个环境变量:

GOOGLE_TAG_MANAGER_ID="GTM-AAA12XX"
twig:
    globals:
        google_tag_manager_id: '%env(GOOGLE_TAG_MANAGER_ID)%'
接下来,在
config/packages/twig.yaml
文件中引用环境变量:

GOOGLE_TAG_MANAGER_ID="GTM-AAA12XX"
twig:
    globals:
        google_tag_manager_id: '%env(GOOGLE_TAG_MANAGER_ID)%'
现在,您可以在细枝模板中使用标记管理器值,如下所示:

<?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'),
        ];
    }
}
{{ google_tag_manager_id }}
对于生产系统,您可能没有
.env
文件。在这种情况下,请在Apache配置文件中设置变量:

SetEnv GOOGLE_TAG_MANAGER_ID GTM-AAA12XX
我还没有用nginx配置文件测试过,但我认为这应该可以:

fastcgi_param GOOGLE_TAG_MANAGER_ID "GTM-AAA12XX";

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

还可以使用DotEnv,我刚刚使用了:

$twig=new\twig\Environment($loader);//或者以何种方式访问细枝实例。
$twig->addFunction(
新建\Twig\TwigFunction('getenv',function($key){
返回getenv($key);
})
);

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

在一个细枝模板中访问ENV vars,而无需任何额外配置:


{{app.request.server.get('MY_ENV_VAR')}
您可以像这样在项目中的任何地方使用它

$_ENV["APP_ENV"]

@ JAKUB,您可能需要考虑将“已接受”的应答标志更改为LFJEFF的答案: