Аннотации 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 функции __construct() не имеет значения, определенного или предполагаемого. Полное определение: объект ( class = \CRM\Report\Service\ReportService lazy = false __construct( $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' )
    ];

Все работает нормально.

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


person Community    schedule 02.04.2018    source источник


Ответы (1)


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

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

composer require doctrine/annotations

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

$containerBuilder->useAnnotations(true);
person Matthieu Napoli    schedule 02.04.2018