Service Symfony-如何使用参数';s值

Service Symfony-如何使用参数';s值,service,environments,Service,Environments,我想为服务设置别名,以便能够在不同的环境中使用不同的服务。 下面是服务。yaml . . . register_request: alias: %register_request_service% main_register_request: class: AppBundle\Services\Requests\RegisterRequest null_register_request: class: AppBundle\Services\Requ

我想为服务设置别名,以便能够在不同的环境中使用不同的服务。 下面是
服务。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
.
.
.
# app/config/services.yml
# ...
services:
    # ...
    register_request:
            class: AppBundle\Services\Requests\RegisterRequest
    # ...
# app/config/services_dev.yml
services:
    register_request:
            class: AppBundle\Services\Requests\NullRegisterRequest
但它不起作用!当我使用
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.

知道我遗漏了什么吗?

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

Elnur answer很管用,但我决定用这种方式解决这个问题:

我已经为开发环境创建了一个服务配置文件(
services\u dev.yml
),并覆盖了其中的服务。因此,
services.yml
看起来像:

.
.
.
    register_request_service: null_register_request
.
.
.
# app/config/services.yml
# ...
services:
    # ...
    register_request:
            class: AppBundle\Services\Requests\RegisterRequest
    # ...
# app/config/services_dev.yml
services:
    register_request:
            class: AppBundle\Services\Requests\NullRegisterRequest
services\u dev.yml
看起来像:

.
.
.
    register_request_service: null_register_request
.
.
.
# app/config/services.yml
# ...
services:
    # ...
    register_request:
            class: AppBundle\Services\Requests\RegisterRequest
    # ...
# app/config/services_dev.yml
services:
    register_request:
            class: AppBundle\Services\Requests\NullRegisterRequest
然后,我在
config\u dev.yml

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

# ...

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

我同意Alireza的回答。在最佳实践文档中,它说“不要为您的服务类定义参数”。虽然我同意您不应该盲目地遵循任何文档,拥有基于环境的服务意味着安装您的web应用程序的人不必经常在
parameters.yml
中定义值。我说过
parameters.yml
吗?没有。您没有提到在何处定义参数,通常定义参数的位置是在以参数命名的文件中。你的答案只有一段,所以我不得不猜测你的大部分意思;对不起,如果我猜不到的话。