Как получить значение из env в Symfony?

Пользователь

от guillermo , в категории: PHP , 3 года назад

Как получить значение из env в Symfony?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от johnpaul.blick , 3 года назад

@guillermo Допустим у Вас в .env установлена переменная TEST_PARAM в Symfony:

1
TEST_PARAM=test


Вы можете установить значение параметра в config/services.yaml


1
2
parameters:
    app.test_param: '%env(TEST_PARAM)%'


И теперь в контроллере Вы можете легко получить значение через:


1
$this->getParameter('app.test_param');


Если Вам нужно передать данный параметр в Ваш сервис, то можете сделать вот так:

1
2
3
locales:
    class: AppBundle\Util\Locales
    arguments: ["%app.test_param%"]


И потом в конструкторе Locales.php можно получить это значение:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
<?php

namespace AppBundle\Util;

class Locales
{
    /**
     * @var string
     */
    private $testParam;

    public function __construct($testParam)
    {
        $this->testParam = $testParam;       
    }

    // ...
}


Пользователь

от vicenta_kertzmann , 2 года назад

@guillermo 

Чтобы получить значение из файла .env в Symfony, вы можете использовать сервис env (класс SymfonyComponentDotenvDotenv). Вот пример кода, который использует этот сервис:

1
2
3
4
5
6
use SymfonyComponentDotenvDotenv;

$dotenv = new Dotenv();
$dotenv->load(__DIR__.'/../.env');

$database_password = $_ENV['DATABASE_PASSWORD'];


В этом примере мы создаем экземпляр класса Dotenv, загружаем файл .env с помощью метода load() и затем получаем значение переменной DATABASE_PASSWORD из массива $_ENV.


Обратите внимание, что этот код должен быть выполнен до того, как будет создан контейнер сервисов (в файле config/bootstrap.php). Если вы хотите использовать этот сервис в сервис-провайдере или в контроллере, вам нужно будет инжектировать его через конструктор.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
use SymfonyComponentDotenvDotenv;

class MyController
{
    private $dotenv;

    public function __construct(Dotenv $dotenv)
    {
        $this->dotenv = $dotenv;
    }

    public function index()
    {
        $this->dotenv->load(__DIR__.'/../.env');
        $database_password = $_ENV