Symfony 4 autowire不使用root命名空间

时间:2018-06-02 21:32:22

标签: php symfony symfony4

在标准上,所有内容都放在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"服务。

0 个答案:

没有答案