Symfony 4,从控制器获取 .env 参数,这可能吗?如何?
Symfony 4, get .env parameter from a controller, is it possible and how?
从 symfony 4 开始,我想创建一个全局参数并从控制器获取该参数的值。
该参数是另一个应用程序在服务器中的路径。所以,我想在 .env 文件中添加参数。但是如何从控制器获取这个参数的值呢?
您尝试过:
$this->getParameter('your parameter');
编辑:
这可能对你有帮助 -> https://symfony.com/doc/current/components/dotenv.html
在使用 getParameter() 之前,您必须在 services.yaml
中添加它
parameters:
your_parameter: '%env(your_parameter)%' # from .env file
如果有人仍在寻找快速解决方案但没有太多 symfonish,
在 .env 中定义您的参数
MY_PARAM='my param value'
然后在控制器中调用它
echo $_ENV['MY_PARAM'];
如果您在控制器中调用变量,您最好在 parameters
部分下的 config/services.yaml
中定义它,并通过 parameterBag
访问它是一种非常合乎情理的方式。
- 在配置参数中添加变量:
parameters:
your_variable: '%env(YOUR_ENV_VARIABLE)%'
- 从控制器获取它
$var = $this->getParameter('your_variable');
对于 Symfony 5
在您的 .env
文件中
APP_PARAM=paramvaluehere
在你的config/services.yaml
parameters:
app.paramname: '%env(APP_PARAM)%'
在你的控制器中
$this->getParameter('app.paramname');
是的。您有 03 个步骤配置:
首先 - 在 env 中声明您的变量。
其次 - 配置服务文件
最后 - 在你的控制器中调用你的参数:
_ 在从 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;
// ...
}
}
_ 最后,如果某些控制器需要访问大量参数,而不是单独注入每个参数,您可以通过 type-hinting 它的任何构造函数一次注入所有应用程序参数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');
// ...
}
}
在 Symfony 4.4 中这工作正常:
<?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') }}
从 symfony 4 开始,我想创建一个全局参数并从控制器获取该参数的值。
该参数是另一个应用程序在服务器中的路径。所以,我想在 .env 文件中添加参数。但是如何从控制器获取这个参数的值呢?
您尝试过:
$this->getParameter('your parameter');
编辑:
这可能对你有帮助 -> https://symfony.com/doc/current/components/dotenv.html
在使用 getParameter() 之前,您必须在 services.yaml
中添加它parameters:
your_parameter: '%env(your_parameter)%' # from .env file
如果有人仍在寻找快速解决方案但没有太多 symfonish,
在 .env 中定义您的参数
MY_PARAM='my param value'
然后在控制器中调用它
echo $_ENV['MY_PARAM'];
如果您在控制器中调用变量,您最好在 parameters
部分下的 config/services.yaml
中定义它,并通过 parameterBag
访问它是一种非常合乎情理的方式。
- 在配置参数中添加变量:
parameters:
your_variable: '%env(YOUR_ENV_VARIABLE)%'
- 从控制器获取它
$var = $this->getParameter('your_variable');
对于 Symfony 5
在您的 .env
文件中
APP_PARAM=paramvaluehere
在你的config/services.yaml
parameters:
app.paramname: '%env(APP_PARAM)%'
在你的控制器中
$this->getParameter('app.paramname');
是的。您有 03 个步骤配置:
首先 - 在 env 中声明您的变量。
其次 - 配置服务文件
最后 - 在你的控制器中调用你的参数:
_ 在从 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;
// ...
}
}
_ 最后,如果某些控制器需要访问大量参数,而不是单独注入每个参数,您可以通过 type-hinting 它的任何构造函数一次注入所有应用程序参数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');
// ...
}
}
在 Symfony 4.4 中这工作正常:
<?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') }}