我有一个基础控制器类,其中包含一些所有子控制器都会使用的实用方法。目前它有3个依赖项,但将来可能会有更多。因此,每当我想要向子控制器添加一个依赖项时,我现在遇到了一个问题,即我认为依赖注入的指令过多。
abstract class BaseController extends AbstractController
{
public function __construct(
protected readonly SerializerInterface $serializer,
protected readonly ValidatorInterface $validator,
private readonly ResponseGenerator $responseGenerator,
) {
}
...
}
class ChildController extends BaseController
{
// 所有父类注入在所有子类中都是必需的。
public function __construct(
SerializerInterface $serializer,
ValidatorInterface $validator,
ResponseGenerator $responseGenerator,
private readonly SomeRepository $someRepository,
... 在这里插入任何其他子控制器特定的依赖项。
) {
parent::__construct($serializer, $validator, $responseGenerator);
}
...
}
我尝试在基础控制器中使用$this->container->get('serializer'),但这不起作用,因为AbstractController::$container是通过注入定义的,但没有构造函数,所以无法调用parent::__construct()。此外,它也无法给我提供validator,所以即使它起作用,也只能解决部分问题。
我尝试寻找可以使用的属性,例如
abstract class BaseController extends AbstractController
{
#[Inject]
protected readonly SerializerInterface $serializer;
#[Inject]
protected readonly ValidatorInterface $validator;
但是没有找到类似的东西(PHP-DI有,但Symfony没有)。
有没有办法以某种方式消除子控制器中的重复依赖项?
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号