Symfony - Как установить псевдоним для службы, используя значение параметра

Я хочу установить псевдоним для службы, чтобы иметь возможность использовать разные службы в разных средах. Итак, вот services.yaml

.
.
.
register_request:
        alias: %register_request_service%
main_register_request:
        class: AppBundle\Services\Requests\RegisterRequest
null_register_request:
        class: AppBundle\Services\Requests\NullRegisterRequest
.
.
.

и в моей среде разработки parameters.yml похоже:

.
.
.
    register_request_service: null_register_request
.
.
.

Но это не работает! когда я использую clear:cache это говорит:

  [Symfony\Component\DependencyInjection\Exception\InvalidArgumentException]
  Unable to replace alias "%register_request_service%" with "register_request".

  [Symfony\Component\DependencyInjection\Exception\InvalidArgumentException]
  The service definition "%register_request_service%" does not exist.

Есть идеи о том, что мне не хватает?

2 ответа

Решение

Ответ Эльнура работает, но я решил решить проблему следующим образом:

Я создал файл конфигурации служб для среды разработки (services_dev.yml) и сделал переопределение службы в нем. Итак services.yml похоже:

# app/config/services.yml
# ...
services:
    # ...
    register_request:
            class: AppBundle\Services\Requests\RegisterRequest
    # ...

и services_dev.yml похоже:

# app/config/services_dev.yml
services:
    register_request:
            class: AppBundle\Services\Requests\NullRegisterRequest

Затем я импортировал services_dev.yml в в config_dev.yml

# app/config/config_dev.yml
imports:
    - { resource: config.yml }
    - { resource: services_dev.yml }

# ...

Таким образом, процесс установки приложения не требует дополнительной информации об имени этих классов.

Проще определить имя класса в качестве параметра. Эта идиома часто использовалась в самой Symfony и ее комплектах.

Другие вопросы по тегам