use*_*454 4 php symfony symfony4
从symfony 4,我想创建一个全局参数,并从控制器获取该参数的值。
此参数是服务器中另一个应用程序的路径。因此,我认为应在.env文件中添加参数。但是如何从控制器获取此参数的值?
May*_*ari 31
对于 Symfony 5
在你的.env文件中
APP_PARAM=paramvaluehere
Run Code Online (Sandbox Code Playgroud)
在你的 config/services.yaml
parameters:
app.paramname: '%env(APP_PARAM)%'
Run Code Online (Sandbox Code Playgroud)
在你的控制器中
$this->getParameter('app.paramname');
Run Code Online (Sandbox Code Playgroud)
The*_*eva 20
如果有人仍然在寻找快速解决方案但没有太多的符号,
在 .env 中定义您的参数
MY_PARAM='my param value'
Run Code Online (Sandbox Code Playgroud)
然后在控制器中调用它
echo $_ENV['MY_PARAM'];
Run Code Online (Sandbox Code Playgroud)
如果你在控制器中调用变量,你最好config/services.yaml在下parameters部分定义它并通过parameterBag非常symfonish 的方式访问它。
小智 8
在使用 getParameter() 之前,您必须在 services.yaml 中添加它
parameters:
your_parameter: '%env(your_parameter)%' # from .env file
Run Code Online (Sandbox Code Playgroud)
小智 8
是的。您有 03 个步骤配置:
首先 - 在 env 中声明您的变量。
其次 - 配置服务文件
,最后 - 在控制器中调用参数:
_ 在从AbstractController扩展的控制器中,使用 getParameter() 帮助器:
YAML 文件配置
# config/services.yaml
parameters:
kernel.project_dir: "%env(variable_name)%"
app.admin_email: "%env(variable_name)%"
Run Code Online (Sandbox Code Playgroud)
在你的控制器中,
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');
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
_ 如果控制器不是从AbstractController扩展的,则将参数作为其构造函数的参数注入。
YAML 文件配置
# config/services.yaml
parameters:
app.contents_dir: "%env(variable_name)%"
services:
App\Controllers\UserController :
arguments:
$contentsDir: '%app.contents_dir%'
Run Code Online (Sandbox Code Playgroud)
在你的控制器中,
class UserController
{
private $params;
public function __construct(string $contentsDir)
{
$this->params = $contentsDir;
}
public function someMethod()
{
$parameterValue = $this->params;
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
_ 最后,如果某些控制器需要访问大量参数,您可以通过使用 ContainerBagInterface 对任何构造函数参数进行类型提示来一次注入所有应用程序参数,而不是单独注入每个参数:
YAML 文件配置
# config/services.yaml
parameters:
app.parameter_name: "%env(variable_name)%"
Run Code Online (Sandbox Code Playgroud)
在为您服务的过程中,
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');
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
源 访问配置参数
您是否尝试过:
$this->getParameter('your parameter');
Run Code Online (Sandbox Code Playgroud)
编辑:
这可能对您有帮助-> https://symfony.com/doc/current/components/dotenv.html
parameters:
your_variable: '%env(YOUR_ENV_VARIABLE)%'
Run Code Online (Sandbox Code Playgroud)
$var = $this->getParameter('your_variable');
Run Code Online (Sandbox Code Playgroud)