2012-04-04 24 views
11

Amacım, geliştirici araç çubuğu hakkında yararlı bilgiler görüntülemek için sınıflarıma data_collector eklemektir. Benim hizmeti:Symfony2 ScopeCrossingInjectionExtype kapsamı kullandığınızdaException

services: 
    my_api.auth.login: 
     class: YO\ApiV1\Services\Auth\Login 
     arguments: 
      - requestId 
      - "@old_sound_rabbit_mq.login_rpc" 
      - "@service_container" 
     scope: prototype 

Her yeni çağrı için farklı örneğini olması kapsam prototip gerekir. Bu arada, servis @ old_sound_rabbit_mq.login_rpc de kapsamı "prototip" var.

tags: 
    - { name: data_collector, template: "AcmeDebug:Collector:templatename", id: "your_collector_name" } 

Ama sonra bir istisna var:

ScopeCrossingInjectionException: Kapsam Geçişi Enjeksiyon algılandı: tanımı "profil" , ben ile yapılabilirdi data_collector, iliştirmek istiyorum Başka bir kapsam hiyerarşisine ait olan "my_api.auth.login" hizmetine başvurur. Bu hizmet, tutarlı olarak olmayabilir. Genellikle, "prototip" kapsamı için "profiler" tanımını tanımlamak ya da "prototip" in bir alt kapsamı olan olarak "kapsayıcı" olarak bildirmek daha güvenlidir. Diğer kapsamın her zaman etkin olduğundan emin olabilirseniz, bu hatanın kurtulmasını sağlamak için başvuruyu strict = false olarak ayarlayabilirsiniz.

Ve kafam karıştı, çünkü ne yapacağımı bilmiyorum. "Strict = false" özelliğini ayarlamaya çalıştım ama hiçbir şey olmuyor.

+0

aldı? – senK

cevap

6

Ben Symfony'nin senkronize servisler size yardımcı olabilecek tahmin: doc

aksi takdirde bu şekilde "sıkı = false" ayarlayabilirsiniz:

services: 
    my.service.definition: 
     class: Acme\Services\BlaService 
     arguments: 
      - "@any_other_service_from_narrower_scope=" 
     scope: prototype 

"=" hizmet tanımının sonunda Daha dar bir kapsamdan bir hizmet enjekte ederken, Symfony 2.8'in kullanımdan kaldırılmasından dolayı "tam olarak" yanlış