您的位置:首页 > 其它

Symfony Service 详解

2016-06-22 00:00 281 查看
默认Service,$container->get('app_service.default')

[code=language-ini]services:
app_service.default:
class: AppBundle\Service\DefaultService

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

[code=language-ini]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

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

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

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

[code=language-ini]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'),私有服务可以作为参数传递到其它服务中

[code=language-ini]services:
app_service.public:
class: ~
public: true
app_service.private:
class: ~
public: false
app_service.test:
arguments: [ '@app_service.private' ]

属性 parent,继承父类

[code=language-ini]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'))

[code=language-ini]services:
app_service.abstract_1:
class: ~
abstract: true

参数、标签、其它属性基本上都是可以同时使用的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Symfony