2016-03-28 9 views
2

In der PHP MVC, die ich gerade entwickle, überprüft der Basis-Controller, ob ein Benutzer eingeloggt ist, und wenn ja, aktualisiert er seine Eigenschaften (siehe Code).Was ist die richtige Art, in einem PHP MVC Controllerdaten an Modellklassen zu übergeben?

Da diese Eigenschaften in verschiedenen Methoden der Modellklassen verwendet werden, möchte ich sie vom Basiscontroller an das (Basis-) Modell übergeben. Was ist der richtige Weg, dies zu tun?

class Controller { 

    protected $user_logged_in = false; 
    protected $logged_in_user_id = null; 

    function __construct() { 
     if(isset($_SESSION['user_id'])) { 
       $this->user_logged_in = true; 
       $this->logged_in_user_id = $_SESSION['user_id']; 
     } 
    } 
} 
+0

Sitzung ist "Modell" Sie können dieses Modell in Controller und Modell erhalten. – Naumov

+0

@Naumov ... Von dem, was ich verstehe den Zugriff auf $ _SESSION-Variablen in Modellmethoden ist keine gute Praxis ... –

+0

* Modell * Dateien sind tatsächlich Punkte auf ein Objekt/Datensatz in Ihrer Datenbank. Sie sollten keine Daten von Ihrem Controller zum Modell senden. – Eray

Antwort

1

Ich mache es so: Der Konstruktor des Modells akzeptiert eine Authentifizierungsklasse. Diese Anforderung wird über Autowiring/automatische Abhängigkeitsinjektion erfüllt. Mein Injektor ist so programmiert, dass er die gleiche Instanz der Authentifizierungsklasse übergibt, wo immer er verlangt wird, so dass keine Diskrepanzen auftreten (d. H. Die Authentifizierungsklasse ist "geteilt").

Auf diese Weise geben Sie keine Daten vom Controller an eine Klasse in der Modellschicht weiter. Stattdessen erhält die Klasse/der Service in der Modellschicht direkten Zugriff auf die Klasse, die sie benötigt, indem sie eine Abhängigkeit eingibt.

Ich lernte die Technik von this video, die es wert ist, bis zum Ende zu sehen. Oben ist nur ein Ausschnitt aus meiner Implementierungsmethode, aber es gibt Tutorials und Bibliotheken, die für das Autowiren verfügbar sind, die es auf verschiedene Arten tun können. Versuchen Sie "php autowiring" oder "php automatic dependency injection" zu suchen.

Eine andere Möglichkeit zu tun, was Sie wollen, ist nur einen Parameter zu dem Dienst hinzuzufügen, der in Ihrem Controller verwendet wird. Ihr Controller sollte Zugriff auf die Modellschicht haben. Daher sollte der Aufruf einer Funktion zum Hinzufügen von Parametern keine große Sache sein.

Verwandte Themen