Symfony2继承父服务奇怪的行为

时间:2011-12-16 02:42:35

标签: symfony

我有一个基本的抽象服务,它依赖于依赖注入容器的请求。这里的定义是:

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 个答案:

答案 0 :(得分: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