在 Symfony 4 的自定义 Twig 函数中使用环境变量(来自 .env 文件)
Using an environment variable (from `.env` file) in custom Twig function in Symfony 4
如何在 Symfony 4 的自定义 Twig 函数 (\Twig_SimpleFunction
) 中使用 .env
文件中的环境变量?
安装 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;
}
}
如果只想return环境变量的值,可以这样简化代码:
<?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()
函数 returns false
。
这是一种更简单的方法 (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";
有关更多详细信息,请参阅 Configuration Based on Environment Variables, and Environment Variable Processors 的 Symfony 文档。环境变量处理器可让您执行 trim 变量或设置默认值等操作。
同样使用 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') }}
。
无需任何额外配置即可访问 Twig 模板中的环境变量:
{{ app.request.server.get('MY_ENV_VAR') }}
你可以像这样在项目的任何地方使用它
$_ENV["APP_ENV"]
现在可以直接搞定了
{{ app.request.server.get('APP_ENV') }}
像这样将它作为全局变量添加到您的twig.yaml,然后您就可以在任何地方使用它了:
twig:
globals:
env: '%env(SYMFONY_ENV)%'
如何在 Symfony 4 的自定义 Twig 函数 (\Twig_SimpleFunction
) 中使用 .env
文件中的环境变量?
安装 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;
}
}
如果只想return环境变量的值,可以这样简化代码:
<?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()
函数 returns false
。
这是一种更简单的方法 (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";
有关更多详细信息,请参阅 Configuration Based on Environment Variables, and Environment Variable Processors 的 Symfony 文档。环境变量处理器可让您执行 trim 变量或设置默认值等操作。
同样使用 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') }}
。
无需任何额外配置即可访问 Twig 模板中的环境变量:
{{ app.request.server.get('MY_ENV_VAR') }}
你可以像这样在项目的任何地方使用它
$_ENV["APP_ENV"]
现在可以直接搞定了
{{ app.request.server.get('APP_ENV') }}
像这样将它作为全局变量添加到您的twig.yaml,然后您就可以在任何地方使用它了:
twig:
globals:
env: '%env(SYMFONY_ENV)%'