Hintergrund: symfony3Symfony Abhilfe für geschützte Methoden
Ich habe gerade in der Tatsache fest, dass redirectToRoute
und addFlash
Methoden in der Steuerung in symfony geschützt sind. Ich habe eine separate Klasse für Maßnahmen.
namespace AppBundle\Action;
class Base {
public function __construct($controller) {
$this->controller = $controller;
}
}
Wie Sie sehen können, erfordert die Basisaktionsklasse einen Controller. Grundsätzlich ist dies logisch, weil die Action-Klasse Teil eines Controllers ist und Zugriff auf alle Methoden haben sollte. Jedoch kann ich $this->controller->addFlash
nicht anrufen, wie es geschützt ist. Wenn es geschützt ist, könnte es einen Grund dafür geben. Ich kann es nicht finden. Kannst du mir bitte sagen, wie ich meine Aktionsklasse ändern kann, so dass sie Controller-Methoden verwenden kann.
Die Variante zum Erweitern der Aktion von einer Steuerung passt mir nicht, da ich zusätzliche Funktionen in der Hauptsteuerung habe. Es ist ordnungsgemäß konfiguriert.
Update: mein Ziel ist Controller-Funktionalität durch Verantwortung zu teilen. Ich habe eine Action-Klasse erfunden. Mein Endcode sieht wie folgt aus:
public function editAction() {
$instance = new \AppBundle\Action\MyController\Edit($this);
return $insance->run();
}
In diesem Fall halte ich Controller sauber und nicht verbose.
Was ist Ihr Plan, wenn Sie einen Controller machen. Erstellen Sie einen Controller, indem Sie die Controller-Klasse von Symfony erweitern. Wenn Sie nicht, sollten Sie mit dem [Service Container] (https://symfony.com/doc/current/service_container.html) arbeiten. –
Sie könnten immer Ihren eigenen myAddFlash() hinzufügen und öffentlich machen. Aber ein Controller in einen Controller (sogar eine Aktion) zu injizieren ist ein bisschen seltsam. – Cerad
@Cerad Ich injiziere keinen Controller in eine Steuerung, sondern in eine Aktion (eine separate Klasse) – FreeLightman