внедрение зависимостей — аннотации 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» не может быть разрешена: параметр $ репозиторий
__construct () не имеет определенного или предполагаемого значения
Полное определение:
Объект (
class = \ CRM \ Report \ Service \ ReportService
ленивый = ложный
__construct (
$ repository = # НЕ УКАЗАНО #
)
)

Я попытался отладить источники, и заметил, что даже 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' )
];

Все отлично работает

Что не так с моей конфигурацией?

0

Решение

Чтобы использовать аннотации, их нужно включить (по умолчанию они отключены): http://php-di.org/doc/annotations.html#installation

Аннотации по умолчанию отключены. Чтобы использовать их, сначала необходимо установить Учение Аннотации библиотека с использованием Composer:

composer require doctrine/annotations

Затем вам нужно настроить ContainerBuilder использовать их:

$containerBuilder->useAnnotations(true);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]