Twig 在Symfony 4的自定义细枝函数中使用环境变量(来自“.env”文件)
如何在Symfony 4中的自定义细枝函数(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
\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的答案: