如何使用 PHP-DI Symfony Bridge for Controllers?



我想将我最近设置的Symfony 4项目与PHP-DI 6和PHP-DI Symfony Bridge 3一起使用。

我的项目结构如下所示:

|-config
|---dependencies
|-----common.php
...
|-src
...
|-Interop
|---Api
|---Website
|-----Controller
|-------IndexController.php
...
|---Services
|-----Dummy
|-------FooService.php
|-------FooServiceInterface.php
...
|-Kernel.php

FooServiceBuzService实现FooServiceInterface

/config/dependencies/common.php

return [
IndexController::class => DIcreate(IndexController::class),
FooServiceInterface::class => DIcreate(FooService::class),
];

IndexController获取注入FooServiceInterface的实例。

public function __construct(FooServiceInterface $fooService)
{
$this->fooService = $fooService;
}

Kernel扩展了DIBridgeSymfonyKernel并实现了其buildPHPDIContainer(...)

protected function buildPHPDIContainer(PhpDiContainerBuilder $builder)
{
$builder->addDefinitions(__DIR__ . '/../config/dependencies/common.php');
return $builder->build();
}

一切似乎都是根据PHP-DI Symfony Bridge文档设置的。

一切正常,如果只有一个FooServiceInterface实现.但是当我再添加一个时,例如:

class BuzService implements FooServiceInterface

我收到一个错误:

运行时异常

无法自动连线服务 "App\Interop\Website\Controller\IndexController":参数 方法"__construct()"引用接口的"$fooService" "App\Services\Dummy\FooServiceInterface",但不存在此类服务。 您可能应该将此接口别名为这些现有接口之一 服务: "App\Services\Dummy\BuzService", "App\Services\Dummy\FooService"。您是否创建了一个类 实现此接口?

为什么我会收到此错误以及如何使此结构正常工作?

此错误消息看起来像 Symfony 错误消息,而不是 PHP-DI 错误消息。

我猜Symfony会扫描你所有的类进行自动布线,包括你的控制器(即使这不是必需的)。

这是我第一次听说这个,我想你需要完全禁用Symfony的自动连线,或者对于某些特定的文件夹?如果你能向 PHP-DI 的文档发送拉取请求,那就太棒了:)

相关内容

  • 没有找到相关文章

最新更新