你需要的是被稱為服務(wù)訂閱者
在Symfony中,當(dāng)控制器繼承AbstractController
時(shí),它們是服務(wù)訂閱者,這意味著它們被注入了一個(gè)包含一些常用服務(wù)(如twig、序列化器、表單建構(gòu)器等)的小容器。
如果你想要一些你的子控制器將使用的「常見」服務(wù),你可以透過在父控制器中重寫getSubscribedServices()
來擴(kuò)充清單?;蛘呷绻愕目刂破鳑]有繼承Symfony提供的預(yù)設(shè)控制器,你只需要實(shí)作自己的控制器:
如果你的控制器是一個(gè)服務(wù)(我猜已經(jīng)是了),Symfony將使用setter注入將容器注入到你的控制器中。
程式碼將如下所示:
<?php use Symfony\Contracts\Service\ServiceSubscriberInterface; class ParentController implement ServiceSubscriberInterface { protected ContainerInterface $container; public function setContainer(ContainerInterface) { $this->container = $container; } public static function getSubscribedServices() { // 這是靜態(tài)的,所以Symfony可以在不實(shí)例化控制器的情況下“看到”所需的服務(wù)。 // 在這里定義一些常見的服務(wù),一個(gè)示例在Symfony的AbstractController中 } } class ChildController extends ParentController { // 使用自定義DI來為子控制器提供服務(wù)。 public function indexAction { // 你可以使用$this->container->get(...)來獲取服務(wù) } }