在标准上,所有内容都放在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 of "阿比\控制器\ ::的TestController XXX()&#34 ;: 无法自动服务" .service_locator.EcpiaYx":它引用接口" Core \ TestInterface"但是没有这样的服务。 您应该将此接口别名为现有的" Domain \ TestService"服务。