【发布时间】:2025-12-18 18:21:12
【问题描述】:
我要注入会话服务的测试类:
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 不适用于我自己的课程?
【问题讨论】:
-
能否请您验证我回答中的要点?您尝试注入的属性是公共的……这很好……但是……您的捆绑包(如果包含自定义类)在已配置捆绑包的列表中吗? ...否则...您的非控制器类是否在配置为
jms_di_extra.locations.directories的目录之一中? -
我已经检查了你的答案,并且我已经尝试添加
@Service注释 - 不起作用。属性始终为public- 仍然不起作用。我也尝试将jms_di_extra.locations.directories设置为"%kernel.root_dir%/../src"- 但仍然无法正常工作 -
您尝试将@Inject 与 (path/namespace) 一起使用的类位于何处?您是否可能在 xml / yml 配置文件中另外提供了额外的服务定义?
-
您在说什么附加服务?与运行此类的 Controller 位于同一命名空间内的 TestDI 类。 (Acme\DemoBundle\Controller)
-
我说的是没有配置注入的重复服务定义。即您添加了@service,但已经将类定义为服务,例如
Bundle\Resources\config\services.xml
标签: php symfony dependency-injection