Symfony 4,从控制器获取.env参数,这可能吗?如何?

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)

  • 您可以简单地仅在 .env 文件中使用值执行 `$_SERVER['APP_PARAM']` https://symfony.com/doc/current/cloud/cookbooks/env.html#accessing-environment-variables (3认同)

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)


访问配置参数


D. *_*rov 6

您是否尝试过:

$this->getParameter('your parameter');
Run Code Online (Sandbox Code Playgroud)

编辑:

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


ane*_*101 6

  1. 在配置参数中添加变量:
    parameters:
        your_variable: '%env(YOUR_ENV_VARIABLE)%'
Run Code Online (Sandbox Code Playgroud)
  1. 从控制器中获取它
    $var = $this->getParameter('your_variable');
Run Code Online (Sandbox Code Playgroud)