我想要注入会话服务的测试类:
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不适用于我自己的班级?
答案 0 :(得分: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注释不适用于受保护或私有方法。
官方文档中的更多信息 - chapter non-controller classes。