Symfony Service 详解

默认Service,$container->get('app_service.default')

services:
    app_service.default:
        class: AppBundle\Service\DefaultService

传递参数,可传递服务、变量、字符串、数组,多个参数

services:
    app_service.argument_1:
        class: ~
        arguments: [ '@service_container' ]
    app_service.argument_2:
        class: ~
        arguments: [ '%kernel.root_dir%' ]
    app_service.argument_3:
        class: ~
        arguments: [ '我是字符串' ]
    app_service.argument_4:
        class: ~
        arguments: [ [1,2,3] ]
    app_service.argument_5:
        class: ~
        arguments: [ '@router', '%kernel.root_dir%' ]

传递参数之 call,可调用多次call

services:
    app_service.call_1:
        class: ~
        calls:
            - [ setContainer, ['@service_container'] ]
    app_service.call_2:
        class: ~
        calls:
            - [ setContainer, ['@service_container'] ]
            - [ setRouter, ['@router'] ]

标签,相当于给服务分类(事件、模板、数据库等),可通过

$container->findTaggedServiceIds($tagName) 获取对应服务

services:
    app_service.tag_1:
        class: ~
        tags:
            - { name: 'kernel.event_subscriber' }
    app_service.tag_2:
        class: ~
        tags:
            - { name: 'kernel.kernel.event_listener', event: 'kernel.request', method: 'onKernelRequest', priority: 255 }
            - { name: 'kernel.kernel.event_listener', event: 'kernel.response', method: 'onKernelResponse' }
    app_service.tag_3:
        class: ~
        tags:
            - { name: 'form.type' }
    app_service.tag_4:
        class: ~
        tags:
            - { name: 'twig.extension' }
    app_service.tag_5:
        class: ~
        tags:
            - { name: 'doctrine.event_subscriber' }

属性 public,可以使用 $container->get('app_service.public'),不能使用 $container->get('app_service.private'),私有服务可以作为参数传递到其它服务中

services:
    app_service.public:
        class: ~
        public: true
    app_service.private:
        class: ~
        public: false
    app_service.test:
        arguments: [ '@app_service.private' ]

属性 parent,继承父类

services:
    app_service.parent:
        class: ~
    app_service.child_1:
        class: ~
        parent: 'app_service.parent'

属性 abstract,抽象类,只能做为父类,被重新创建服务,参考 parent。

或 $container->setDefinition($newService, new DefinitionDecorator('app_service.abstract_1'))

services:
    app_service.abstract_1:
        class: ~
        abstract: true

参数、标签、其它属性基本上都是可以同时使用的

转载于:https://my.oschina.net/foreverglory/blog/698829

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值