Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php JMSDiExtraBundle@Inject在自定义类中不起作用,但在控制器中起作用_Php_Symfony_Dependency Injection - Fatal编程技术网

Php JMSDiExtraBundle@Inject在自定义类中不起作用,但在控制器中起作用

Php JMSDiExtraBundle@Inject在自定义类中不起作用,但在控制器中起作用,php,symfony,dependency-injection,Php,Symfony,Dependency Injection,要在其中注入会话服务的测试类: namespace Acme\DemoBundle\Controller; use JMS\DiExtraBundle\Annotation as DI; class TestDI { /** @DI\Inject("session") */ public $session; } 输出测试类类型的控制器操作: ... Controller { /** @DI\Inject("session") */ private $session;

要在其中注入会话服务的测试类:

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();
}

结果。为什么@Inject不能与我自己的类一起工作?

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

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

jms_di_extra:
    locations:
        all_bundles: false
        bundles: [FooBundle, AcmeBlogBundle]
        directories: ["%kernel.root_dir%/../src"]
进一步记住:

请注意,您不能在private或 受保护的财产

同样,@InjectParams注释在受保护或私有方法上也不起作用


官方文件中的更多信息-。

您能验证我回答中的要点吗?您尝试注入的属性是公共的。。。那很好。。。但是您的捆绑包(如果包含自定义类)是否在已配置捆绑包的列表中。。。否则。。。您的非控制器类是否在其中一个目录中配置为
jms\u di\u extra.locations.directories
?我已经检查了您的答案,并且我已经尝试添加
@Service
注释-不起作用。属性总是
公共的
-仍然不起作用。此外,我还尝试将
jms\u di\u extra.locations.directories
设置为
%kernel.root\u dir%/../src”
,但仍然不起作用。您试图使用@Inject的类位于何处(路径/命名空间)?您是否在xml/yml配置文件中另外提供了一个服务定义?您在谈论什么额外的服务?TestDI类与运行该类的控制器位于同一命名空间中。(Acme\DemoBundle\Controller)我指的是没有配置注入的双副本服务定义。i、 e.您添加了@service,但已经将类定义为服务,例如
Bundle\Resources\config\services.xml
我应该将服务类放在哪个目录中?例如:/src/MyNS/SecurityExtensionBundle/services/MyService.php-这是否有效?
jms_di_extra:
    locations:
        all_bundles: false
        bundles: [FooBundle, AcmeBlogBundle]
        directories: ["%kernel.root_dir%/../src"]