2011-12-16 8 views
2

私は、依存性注入コンテナからの要求に依存する基本抽象サービスを持っています。ここではその定義:symfony2が親サービスの奇妙な動作を継承する

services: 
    acme.controller.abstract.basic: 
     class: "Acme\CommonBundle\Controller\AbstractBasicController" 
     abstract: true 
     calls: 
      - [setRequest, ["@request"]] 

このサービス定義は、リクエストスコープを必要とするので、私はこれに私の定義を変更:

services: 
    acme.controller.abstract.basic: 
     class: "Acme\CommonBundle\Controller\AbstractBasicController" 
     abstract: true 
     scope: request 
     calls: 
      - [setRequest, ["@request"]] 

今、私は以下のように、具体的なサービスには、このサービス定義を継承します

services: 
    acme.controller.website: 
     class: "Acme\WebsiteBundle\Controller\WebsiteController" 
     parent: "acme.controller.abstract.basic" 

しかし、私はacme.controller.websiteがリクエストオブジェクトよりも広い範囲を持っているという例外があります。これを修正するには、具体的なサービスにscope: requestを追加する必要があります。しかし、スコープ定義は基本抽象サービスから継承されていると考えていたので、scopeパラメータを子サービスに再追加する必要はありません。

scopeパラメータの継承を禁止するのは意図した動作ですか?はいの場合、それが実装できない理由を知っているかもしれませんか?

答えて

1

はい、意図した動作ですが、私はまだその正確な理由はわかりません。

// merge in parent definition 
    // purposely ignored attributes: scope, abstract, tags 
    $def->setClass($parentDef->getClass()); 
    $def->setArguments($parentDef->getArguments()); 
    $def->setMethodCalls($parentDef->getMethodCalls()); 
    $def->setProperties($parentDef->getProperties()); 

のSrc:掘るためSource code comment

+0

感謝。完全なものとして、この正確な問題に関するSymfony2のgithub問題の追跡に関する[こちらの問題](https://github.com/symfony/symfony/issues/4620) Upvoteしかし、私は答えがあるときにのみ受け入れるでしょう:) – Matt

+0

私は同じ問題を抱えていたので、私のために理解しなければなりませんでした。私はあなたのポストを見つけたので、誰かを助けるかもしれないここに投稿された:) – Venu