Symfony 4.3 - 无法在嵌套继承中自动装配服务参数

Symfony 4.3 - Cannot autowire service argument in nested inheritance

我有 3 个服务和 1 个控制器。问题是祖父服务在自动装配其构造函数参数时遇到问题。

最低代码:

RegistrationController.php

 class RegistrationController extends AbstractController
    {
      public function register(RegisterDB $registerDB)
      {
        $registerDB->registerUser();die;
      }
    }

RegisterDB.php

class RegisterDB extends DBALProvider
{
  public function registerUser()
  {
    dump($this->getTranslator());
    dump($this->getContext());
  }
}

DBALProvider.php

class DBALProvider extends BaseService
{
  private $context;

  public function __construct(EntityManagerInterface $entityManager)
  {
    $this->context = $entityManager->getConnection();
  }

  protected function getContext()
  {
    return $this->context;
  }
}

BaseService.php

class BaseService
{
  private $translator;

  public function __construct(TranslatorInterface $translator)
  {
    $this->translator = $translator;
  }

  protected function getTranslator()
  {
    return $this->translator;
  }
}

问题是在 RegisterDB.php 第一次转储中 dump($this->getTranslator()); 输出 null 但第二次转储显示预期的连接对象。我的继承链有什么问题?

感谢反馈。

这确实与自动装配无关,但与继承的工作方式有关。

由于您的 BaseService 需要 TranslatorInterface 的实例,因此您需要将其传递给 DBALProvider class:

中的父构造函数
class DBALProvider extends BaseService
{
  private $context;

  public function __construct(EntityManagerInterface $entityManager, TranslatorInterface $translator)
  {
    $this->context = $entityManager->getConnection();
    parent::__construct($translator);
  }

  protected function getContext()
  {
    return $this->context;
  }
}