Symfony 4,从控制器获取 .env 参数,是不是可能以及如何?

Posted

技术标签:

【中文标题】Symfony 4,从控制器获取 .env 参数,是不是可能以及如何?【英文标题】:Symfony 4, get .env parameter from a controller, is it possible and how?Symfony 4,从控制器获取 .env 参数,是否可能以及如何? 【发布时间】:2019-02-08 15:08:21 【问题描述】:

从 symfony 4 开始,我想创建一个全局参数并从控制器中获取该参数的值。

此参数是服务器中另一个应用程序的路径。所以,我想在 .env 文件中添加参数。但是如何从控制器中获取这个参数的值呢?

【问题讨论】:

【参考方案1】:

对于 Symfony 5

在您的.env 文件中

APP_PARAM=paramvaluehere

在你的config/services.yaml

parameters:
    app.paramname: '%env(APP_PARAM)%'

在你的控制器中

$this->getParameter('app.paramname');

【讨论】:

也适用于 4.3。 你可以简单地做$_SERVER['APP_PARAM']的值只在.env文件symfony.com/doc/current/cloud/cookbooks/… 要能够调用$this->getParameter('app.paramname'),请确保您的控制器extends AbstractController【参考方案2】:

如果有人仍在寻找快速解决方案但没有太多 symfonish,

在 .env 中定义你的参数

MY_PARAM='my param value'

然后在控制器中调用它

echo $_ENV['MY_PARAM'];

如果你在控制器中调用变量,你最好在parameters 部分下的config/services.yaml 中定义它,并通过parameterBag 访问它,这是非常symfonish 的方式。

【讨论】:

我相信这是从 symfony 4.3+ 开始的默认方式!在 5.2 中工作【参考方案3】:

您是否尝试过:

$this->getParameter('your parameter');

编辑:

这可能会对你有所帮助 -> https://symfony.com/doc/current/components/dotenv.html

【讨论】:

感谢您的回答 :) 我在 .env 文件中添加了参数 foo (foo=faa),我清除了缓存,但我得到一个“InvalidArgumentException:必须定义参数 'foo'”在我的控制器中:/ 编辑了我的答案 是的,我刚刚看到了!很好奇,我认为这是 Symfony 中的原生方法! 我对 Symfony 不是很熟悉,Symfony 4 中可能有原生方法。【参考方案4】:

在用户 getParameter() 之前,您必须在 services.yaml 中添加它

parameters:
    your_parameter: '%env(your_parameter)%' # from .env file

【讨论】:

【参考方案5】:
    在配置参数中添加变量:
    parameters:
        your_variable: '%env(YOUR_ENV_VARIABLE)%'
    从控制器中获取它
    $var = $this->getParameter('your_variable');

【讨论】:

以上是关于Symfony 4,从控制器获取 .env 参数,是不是可能以及如何?的主要内容,如果未能解决你的问题,请参考以下文章

symfony2 获取路由参数(控制器参数与请求)

如何从 .env 文件中获取键的值?

Symfony 4控制台命令不读取环境变量

Symfony 4,从自定义类(不是控制器类)获取项目的根路径

Symfony 5:如何从路由规则中获取选项数据

如何使用swiftmailer-bundle在symfony 4中设置多个邮件