PHP DI注释不起作用

时间:2018-04-02 05:53:58

标签: php dependency-injection doctrine-orm inject php-di

我刚刚开始使用PHP-DI并且很棒,但我无法解决一个问题。

这是我的服务定义

<?php

return [
    'services.report'=> DI\autowire( '\CRM\Report\Service\ReportService' ),
    '\CRM\Report\Service\ReportServiceContract' => DI\get ( 'services.report' )
];

我的课程定义如下

class ReportService implements ReportServiceContract {
    private $repository;

    /**
     * ReportService constructor.
     * @Inject("repositories.report_tasks")
     *
     * @param $repository
     */
    public function __construct( $repository ) {
        $this->repository = $repository;
        var_dump( $this->repository->getReportTaskById( 1 )->getDateSubmitted() );
    }

}

有了这个配置,我收到以下错误

  

无法解析条目“services.report”:参数$ repository of   __construct()没有定义或猜测的值       完整定义:       对象(           class = \ CRM \ Report \ Service \ ReportService           懒惰=假           __构造(               $ repository =#UNDEFINED#           )       )

我试图调试源代码,并注意到即使是AnnotationReader实例也没有创建。

但使用以下定义时

 <?php

    return [
'services.report' => DI\autowire( '\CRM\Report\Service\ReportService' )->constructorParameter('repository',DI\get('repositories.report_tasks')),
        '\CRM\Report\Service\ReportServiceContract' => DI\get ( 'services.report' )
    ];

一切正常。

我的配置有什么问题?

1 个答案:

答案 0 :(得分:0)

要使用注释,需要启用它们(默认情况下禁用它们):http://php-di.org/doc/annotations.html#installation

  

默认情况下禁用注释 。为了能够使用它们,首先需要使用Composer安装Doctrine Annotations库:

ContainerBuilder
     

然后您需要配置$containerBuilder->useAnnotations(true); 以使用它们:

base