Symfony 4 autowire не работает с корневыми пространствами имен - PullRequest
0 голосов
/ 03 июня 2018

В стандарте есть все, что помещено в пространство имен App.Поэтому, если у меня будет такая структура с TestController, имеющим public function xxx(TestInterface $test);, все будет работать как следует.

-src
 -Core
  -TestInterface (App\Core)
 -Api
  -Controller
   -TestController (App\Api\Controller)
 -Domain
  -Service
   -TestService implements TestInterface (App\Domain\Service)

Теперь проблема в том, что у моего проекта нет префикса App.Моя структура выглядит так:

-src
 -Core
  -TestInterface (Core)
 -Api
  -Controller
   -TestController (Api\Controller)
 -Domain
  -Service
   -TestService implements TestInterface (Domain\Service)

composer.json

"autoload": {
    "psr-4": {
        "": "src/"
    }
},

services.yaml

Core\:
    resource: '../src/Core/*'
    exclude: '../src/Core/{Entity,Migrations,Tests,Kernel.php}'

Domain\:
    resource: '../src/Domain/*'
    exclude: '../src/Domain/{Entity,Migrations,Tests,Kernel.php}'

Api\Controller\:
    resource: '../src/Api/Controller'
    tags: ['controller.service_arguments']

Самое забавное в этом то, что почти все работает хорошо, включая внедрение зависимостей, пока я использую пространства имен прямого класса.Не работает только поиск по интерфейсу.

Это работает: public function xxx(TestService $test)

Это не работает: public function xxx(TestInterface $test)

Вот ошибка:

Невозможно разрешить аргумент $ test для «Api \ Controller \ TestController :: xxx ()»: Невозможно автоматически подключить службу ».service_locator.EcpiaYx ": он ссылается на интерфейс" Core \ TestInterface ", но такой службы не существует.Возможно, вам следует связать этот интерфейс с существующей службой «Domain \ TestService».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...