Symfony - 如何使用参数值为服务设置别名
Symfony - How to set alias for a service using a parameter's value
我想为一个服务设置别名,以便在不同的环境下使用不同的服务。
所以,这里是 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.
知道我遗漏了什么吗?
仅将 class 名称定义为参数会更容易。这是 Symfony 本身及其捆绑包中经常使用的成语。
Elnur 的答案有效,但我决定以这种方式解决问题:
我已经为开发环境创建了一个服务配置文件 (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
然后,我在 config_dev.yml
中导入了 services_dev.yml
# app/config/config_dev.yml
imports:
- { resource: config.yml }
- { resource: services_dev.yml }
# ...
这样,应用程序设置过程就不需要有关这些 类 名称的额外信息。
我想为一个服务设置别名,以便在不同的环境下使用不同的服务。
所以,这里是 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.
知道我遗漏了什么吗?
仅将 class 名称定义为参数会更容易。这是 Symfony 本身及其捆绑包中经常使用的成语。
Elnur 的答案有效,但我决定以这种方式解决问题:
我已经为开发环境创建了一个服务配置文件 (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
然后,我在 config_dev.yml
services_dev.yml
# app/config/config_dev.yml
imports:
- { resource: config.yml }
- { resource: services_dev.yml }
# ...
这样,应用程序设置过程就不需要有关这些 类 名称的额外信息。