Что такое параметры в Symfony

При работе с Symfony проектом мы можем использовать так называемые параметры. 

Параметры - это переменные, которые хранятся в контейнере и мы можем получать доступ к ним из контроллера и сервисов. Это что-то вроде глобальной переменной, которую мы можем использовать в разных местах проекта.

Где можно создать параметр

Создать параметр мы можем в файле конфигурации config/services.yaml.

parameters:
    admin_email: 'admin@mail.com'

Например, так мы можем задать email администратора, который можем использовать в разных местах нашего проекта, где нужно отправить какое-то письмо админу. Это удобно в том плане, что если этот email поменяется, нам его нужно будет поправить только в одном месте и везде его значение поменяется.

Получение параметра в контроллере

Для того, чтобы получить значение параметра в контроллере, мы можем воспользоваться следующей записью:

$this->getParameter('admin_email')

Чтобы получить значение параметра в сервисах, у нас есть несколько вариантов.

Получение параметров в сервисах

1 вариант. Воспользоваться сервисом ContainerBagInterface и получить значение параметра из контейнера.

class ExampleService
{
    public function __construct(private ContainerBagInterface $containerBag)
    {
    }


    public function test() {
        dd($this->containerBag->get('admin_email'));
    }
}

2 вариант. Передать значение параметра как аргумент к сервису.

parameters:
    admin_email: 'admin@mail.com'


services:
    App\Services\ExampleService:
        arguments:
            $adminEmail: '%admin_email%'

После этого мы можем получить его в конструкторе сервиса:

class ExampleService
{
    public function __construct(private string $adminEmail)
    {
    }


    public function test() {
        dd($this->adminEmail);
    }
}

Есть также вариант передать значение параметра сразу во все сервисы

# config/services.yaml
parameters:
    admin_email: 'admin@mail.com'
services:
    _defaults:
        bind:
            $adminEmail: '%admin_email%'

Параметры очень схожи с переменными окружения (подробнее о переменных окружения можно посмотреть здесь ).

Когда, что лучше использовать. Здесь все достаточно просто, используйте переменные окружения в тех случаях, когда их значение будет изменяться в зависимости от места разворачивания проекта. В остальных случаях стоит использовать параметры. 

Ко всем курсам Symfony