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
吗?没有。您没有提到在何处定义参数,通常定义参数的位置是在以参数命名的文件中。你的答案只有一段,所以我不得不猜测你的大部分意思;对不起,如果我猜不到的话。