国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Abh?ngigkeitsinjektion des übergeordneten Symfony 6-Controllers zum untergeordneten Controller
P粉208469050
P粉208469050 2023-08-17 20:19:03
0
1
683
<p>Ich habe eine Basis-Controller-Klasse, die einige Dienstprogrammmethoden enth?lt, die alle untergeordneten Controller verwenden. Derzeit gibt es drei Abh?ngigkeiten, aber in Zukunft k?nnten es noch mehr sein. Wenn ich also eine Abh?ngigkeit zu einem untergeordneten Controller hinzufügen m?chte, habe ich jetzt ein Problem, bei dem ich denke, dass es zu viele Anweisungen für die Abh?ngigkeitsinjektion gibt. </p> <pre class="brush:php;toolbar:false;">Die abstrakte Klasse BaseController erweitert AbstractController { ?ffentliche Funktion __construct( protected readonly SerializerInterface $serializer, protected readonly ValidatorInterface $validator, privater schreibgeschützter ResponseGenerator $responseGenerator, ) { } ... } Die Klasse ChildController erweitert BaseController { // Alle Injektionen der übergeordneten Klasse sind in allen untergeordneten Klassen erforderlich. ?ffentliche Funktion __construct( SerializerInterface $serializer, ValidatorInterface $validator, ResponseGenerator $responseGenerator, privates schreibgeschütztes SomeRepository $someRepository, ...fügen Sie hier alle anderen untergeordneten Controller-spezifischen Abh?ngigkeiten ein. ) { parent::__construct($serializer, $validator, $responseGenerator); } ... }</pre> <p>Ich habe versucht, <code>$this->container->get('serializer')</code> im Basiscontroller zu verwenden, aber das hat nicht funktioniert, weil <code>AbstractController: $container</code> wird durch Injektion definiert, hat aber keinen Konstruktor, daher kann <code>parent::__construct()</code> Au?erdem gibt es mir keinen <code>Validator</code>, sodass es, selbst wenn es funktioniert, nur einen Teil des Problems l?st. </p> <p>Ich habe versucht, nach Eigenschaften zu suchen, die ich verwenden k?nnte, wie </p> <pre class="brush:php;toolbar:false;">Die abstrakte Klasse BaseController erweitert AbstractController { #[Injizieren] protected readonly SerializerInterface $serializer; #[Injizieren] protected readonly ValidatorInterface $validator;</pre> <p>Aber es wurde nichts ?hnliches gefunden (PHP-DI hat es, aber Symfony nicht). </p> <p>Gibt es eine M?glichkeit, doppelte Abh?ngigkeiten in untergeordneten Controllern irgendwie zu beseitigen? </p>
P粉208469050
P粉208469050

Antworte allen(1)
P粉464208937

你需要的是被稱為服務(wù)訂閱者

在Symfony中,當控制器繼承AbstractController時,它們是服務(wù)訂閱者,這意味著它們被注入了一個包含一些常用服務(wù)(如twig、序列化器、表單構(gòu)建器等)的小容器。

如果你想要一些你的子控制器將使用的“常見”服務(wù),你可以通過在父控制器中重寫getSubscribedServices()來擴展列表?;蛘呷绻愕目刂破鳑]有繼承Symfony提供的默認控制器,你只需要實現(xiàn)自己的控制器:

如果你的控制器是一個服務(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可以在不實例化控制器的情況下“看到”所需的服務(wù)。
         // 在這里定義一些常見的服務(wù),一個示例在Symfony的AbstractController中
    }
}

class ChildController extends ParentController {
    // 使用自定義DI來為子控制器提供服務(wù)。

    public function indexAction {
        // 你可以使用$this->container->get(...)來獲取服務(wù)
    }

}
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage