В стандарте есть все, что помещено в пространство имен 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».