2011-12-16 2 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

Спасибо за рытье. Для полноты, [здесь проблема] (https://github.com/symfony/symfony/issues/4620) о отслеживании проблемы github Symfony2 об этой точной проблеме. Upvote, но соглашусь только тогда, когда у меня есть ответ, почему :) – Matt

+0

У меня была одна и та же проблема, поэтому я должен был понять ради меня. Тем временем я нашел ваш пост, поэтому разместил здесь, что может помочь кому-то :) – Venu

Смежные вопросы