2017-06-23 1 views
-4

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.

+2

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. –

+0

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

+0

@Cerad Ich injiziere keinen Controller in eine Steuerung, sondern in eine Aktion (eine separate Klasse) – FreeLightman

Antwort

0

Here ist eine link Symfony Controller-Eigenschaft, die du duplizieren kannst, wenn du wirklich so arbeiten willst.

Da Sie jedoch einen ganzen Symfony-Controller in Ihre eigenen Controller einspeisen, sind Sie besser dran, stattdessen zu erweitern. Die Injektion wird hier zum Injizieren eines separaten Dienstes durch ihre IDs verwendet.

Verwandte Themen