从Symfony 4开始,我想创建一个全局参数,并从控制器中获取此参数的值。
这个参数是服务器上另一个应用程序的路径。因此,我考虑在.env文件中添加参数。但是,如何从控制器中获取此参数的值呢?
Symfony 5的情况下
在你的.env
文件中
APP_PARAM=paramvaluehere
在你的config/services.yaml
文件中
parameters:
app.paramname: '%env(APP_PARAM)%'
在你的控制器中
$this->getParameter('app.paramname');
如果有人仍在寻找一个快速但不太symfonish的解决方案,
请在.env文件中定义您的参数。
MY_PARAM='my param value'
然后在控制器中调用它
echo $_ENV['MY_PARAM'];
如果你在控制器中调用变量,最好在config/services.yaml
文件的parameters
部分定义它,并通过parameterBag
访问它,这是一种更具Symfony风格的方式。
你试过这个吗:
$this->getParameter('your parameter');
编辑:
这可能会对您有所帮助 -> https://symfony.com/doc/current/components/dotenv.html
在使用 getParameter() 之前,您需要将以下内容添加到 services.yaml 中。
parameters:
your_parameter: '%env(your_parameter)%' # from .env file
是的,它就是。您需要进行三个步骤的配置:
首先,在环境变量中声明您的变量。
其次,在配置服务文件。
最后,在控制器中调用您的参数:
_ 在扩展自AbstractController的控制器中,使用getParameter()助手:
YAML文件配置
# config/services.yaml
parameters:
kernel.project_dir: "%env(variable_name)%"
app.admin_email: "%env(variable_name)%"
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class UserController extends AbstractController
{
// ...
public function index(): Response
{
$projectDir = $this->getParameter('kernel.project_dir');
$adminEmail = $this->getParameter('app.admin_email');
// ...
}
}
如果控制器没有继承自AbstractController,则将参数作为它们构造函数的参数进行注入。
YAML文件配置
# config/services.yaml
parameters:
app.contents_dir: "%env(variable_name)%"
services:
App\Controllers\UserController :
arguments:
$contentsDir: '%app.contents_dir%'
在您的控制器中,
class UserController
{
private $params;
public function __construct(string $contentsDir)
{
$this->params = $contentsDir;
}
public function someMethod()
{
$parameterValue = $this->params;
// ...
}
}
_ 最后,如果某些控制器需要访问大量参数,而不是逐个注入每个参数,您可以通过对 ContainerBagInterface 的任何构造函数参数进行类型提示一次性注入所有应用程序参数:
YAML 文件配置
# config/services.yaml
parameters:
app.parameter_name: "%env(variable_name)%"
为您服务,
use Symfony\Component\DependencyInjection\ParameterBag\ContainerBagInterface;
class UserController
{
private $params;
public function __construct(ContainerBagInterface $params)
{
$this->params = $params;
}
public function someMethod()
{
$parameterValue = $this->params->get('app.parameter_name');
// ...
}
}
来源 访问配置参数
parameters:
your_variable: '%env(YOUR_ENV_VARIABLE)%'
$var = $this->getParameter('your_variable');
<?php
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
class SomeController extends AbstractController
{
public function someMethod(Request $request)
{
$parameterValue = $request->server->get('env_varname');
// ...
}
}
同样适用于TWIG:
{{ app.request.server.get('env_varname') }}
$_SERVER['APP_PARAM']
。https://symfony.com/doc/current/cloud/cookbooks/env.html#accessing-environment-variables - TikTaZ$this->getParameter('app.paramname')
,请确保您的控制器extends AbstractController
。 - ilooextends AbstractController
,则只有config/services.yaml
部分是必需的。 https://symfony.com/doc/current/configuration.html#accessing-configuration-parameters - Jibato