2

我要注入会话服务的测试类:

namespace Acme\DemoBundle\Controller;

use JMS\DiExtraBundle\Annotation as DI;

class TestDI
{

    /** @DI\Inject("session") */
    public $session;

}

输出测试类类型的控制器操作:

... Controller {

/** @DI\Inject("session") */
private $session;

public function testAction()
{
    $test = new TestDI();
    echo gettype($this->session).'<br/>';
    echo gettype($test->session);
    return array();
}

给我:

object
NULL

结果。为什么@Inject 不适用于我自己的课程?

4

1 回答 1

1

您必须将非控制器类注册为服务才能使 DIExtra 注释工作。实现这一点的最简单方法是添加一个类级别的@Service注释 ( JMS\DiExtraBundle\Annotation\Service)。

您必须确保您的非控制器类位于 JMSDiExtraBundle 实际找到的目录中。您可以配置捆绑包配置中正在搜索的捆绑包和目录:

jms_di_extra:
    locations:
        all_bundles: false
        bundles: [FooBundle, AcmeBlogBundle]
        directories: ["%kernel.root_dir%/../src"]

进一步记住:

请注意,您不能在私有或受保护属性上使用 @Inject 注释。

同样,@InjectParams 注释不适用于受保护或私有方法。

官方文档中的更多信息 -章节非控制器类

于 2013-08-30T13:24:29.157 回答