jpy*_*zio 11 environment-variables twig twig-extension symfony4
如何在Symfony 4 .env中的自定义Twig函数(\Twig_SimpleFunction)中使用文件中的环境变量?
lfj*_*eff 46
这是一种更简单的方法(Symfony 4),不涉及任何自定义扩展.就我而言,我想将Google跟踪代码管理器ID设置为.env文件中的环境变量:
GOOGLE_TAG_MANAGER_ID="GTM-AAA12XX"
Run Code Online (Sandbox Code Playgroud)
接下来,引用config/packages/twig.yaml文件中的环境变量:
twig:
globals:
google_tag_manager_id: '%env(GOOGLE_TAG_MANAGER_ID)%'
Run Code Online (Sandbox Code Playgroud)
现在,您可以在Twig模板中使用标记管理器值,如下所示:
{{ google_tag_manager_id }}
Run Code Online (Sandbox Code Playgroud)
对于生产系统,您可能没有.env文件.在这种情况下,在Apache配置文件中设置变量:
SetEnv GOOGLE_TAG_MANAGER_ID GTM-AAA12XX
Run Code Online (Sandbox Code Playgroud)
我没有使用nginx配置文件测试过,但我认为这应该有效:
fastcgi_param GOOGLE_TAG_MANAGER_ID "GTM-AAA12XX";
Run Code Online (Sandbox Code Playgroud)
安装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;
}
}
Run Code Online (Sandbox Code Playgroud)
如果只想返回环境变量的值,则可以简化如下代码:
<?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'),
];
}
}
Run Code Online (Sandbox Code Playgroud)
无论哪种方式,您都可以在Twig中执行以下操作:
{{ my_function('APP_ENV') }}
{% if my_function('MAILER_URL') == 'null://localhost' %}
Mailer URL not set!
{% endif %}
{# etc. #}
Run Code Online (Sandbox Code Playgroud)
更好的函数名称当然是getenv。在这里,我使用my_function了我们的代码,以免将其与getenv()Dotenv组件提供的功能混淆。
如果找不到环境变量,则该getenv()函数返回false。
可以在没有任何额外配置的情况下访问树枝模板中的环境变量:
{{ app.request.server.get('MY_ENV_VAR') }}
| 归档时间: |
|
| 查看次数: |
10416 次 |
| 最近记录: |