Abhängigkeitsinjektion des übergeordneten Symfony 6-Controllers zum untergeordneten Controller
<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>