Symfony: Autowiring не работает, отладка: autowiring не отображает собственные классы - PullRequest
0 голосов
/ 24 января 2019

Я использую Symfony 4.2

Вот мой конфиг для моих классов, которые я хочу автоматически подключить:

services:
    _defaults:
        autowire: true
#        autoconfigure: true
    Cyrene\components\:
        resource: '../../app/components/*'
        tags: ['controller.service_arguments']
        exclude:
            - '../../app/components/common/*'

Пути правильные, потому что при использовании команды debug:container Symfonyдействительно показывает мне все классы, которые у меня есть в папке "components".

Но используя команду debug:autowiring symfony, он не показывает ни один из моих классов, даже если у них есть тег controller.service_arguments, что должно сделать их автоматически подключаемыми.

что я здесь не так делаю?

Я тоже столкнулся с другой проблемой ...

, хотя я использую один класс autowireable, например, Psr\Log\LoggerInterface (который по умолчанию автоматически подключается из symfony), symfony не передает его конструктору:

use Cyrene\core\actions\AbstractAdminAction;
use Psr\Log\LoggerInterface;

class OverviewIndexAction extends AbstractAdminAction
{
    public function __construct(LoggerInterface $logger, OverviewIndexResponder $responder)
    {
        $this->responder = $responder;
    }

Я получаю это сообщение об ошибке: [...] Too few arguments to function Cyrene\components\admin\application\overview\index\OverviewIndexAction::__construct(), 0 passed [...] but exactly 2 expected [...]

, что приводит меня к предположению, что автопроводка вообще не работает.

$logger должен был быть автопровод, потому что он указан в команде debug:autowiringSymfony.OverviewIndexResponder $responder находится в том же пути / пространстве имен, что и OverviewIndexAction, следовательно, нет use.

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Если вы используете Symfony 4.2.0 - в этой версии есть ошибка.

Чтобы исправить это, попробуйте:

composer require phpdocumentor/reflection-docblock

Подробнее об ошибке: https://github.com/symfony/symfony/issues/29442

0 голосов
/ 24 января 2019

это смешно, часто вы находите проблему, когда спрашиваете кого-то еще.

Проблема заключалась в том, что мой собственный ControllerResolver не расширил правильный суперкласс.

Это правильно:

use Symfony\Component\HttpKernel\Controller\ContainerControllerResolver as SymfonyControllerResolver;

class ControllerResolver extends SymfonyControllerResolver

ContainerControllerResolver заботится о введении правильных объектов.

, хотя автопроводка работает, debug:autowiring все еще не перечисляет мои классы.

...