Symfony - 如何使用参数的值为服务设置别名

时间:2016-01-14 09:40:32

标签: service environments

我想为服务设置别名,以便能够在不同的环境中使用不同的服务。 所以,这是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 个答案:

答案 0 :(得分:2)

将类名定义为参数更容易。这就是Symfony本身及其捆绑中使用的习惯用法。

答案 1 :(得分:2)

Elnur回答有效,但我决定以这种方式解决问题:

我为dev环境(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 }

# ...

这样,应用程序设置过程不需要有关这些类的额外信息。名。