Übergeben von Daten vom Controller zur Ansicht in einer PHP MVC App

8

In fast allen Tutorials oder Antworten zu SO sehe ich eine übliche Methode, um Daten von einem Controller an die View zu senden. Die Klasse View sieht oft ähnlich aus wie der folgende Code:

%Vor%

Ich verstehe nicht, warum ich die Daten in ein Array setzen und dann extract ($ this- & gt; _data) aufrufen muss. Warum legen Sie nicht direkt einige Eigenschaften in die Ansicht vom Controller wie

%Vor%

dann in meinem Layout oder Template-Datei könnte ich einfach tun:

%Vor%     
Matthew 24.06.2013, 15:27
quelle

2 Antworten

7

Es macht Sinn, die Ansichtsdaten logisch zu gruppieren und von den Klasseneigenschaften der internen Ansicht zu unterscheiden.

Mit PHP können Sie Eigenschaften dynamisch zuweisen, sodass Sie die View-Klasse einfach instanziieren und Ihre Ansichtsdaten als Eigenschaften zuweisen können. Persönlich würde ich das aber nicht empfehlen. Was, wenn Sie über die Ansichtsdaten iterieren wollten, oder einfach nur zum Debugging ausgeben?

Das Speichern der View-Daten in einem Array oder das Speichern von Objekten bedeutet nicht, dass Sie $this->get('x') verwenden müssen, um darauf zuzugreifen. Eine Option ist die Verwendung von PHP5s Property Overloading , mit der Sie die Daten speichern können ein Array, aber die Schnittstelle $this->x mit den Daten aus der Vorlage haben.

Beispiel:

%Vor%

Die Methode __get() wird aufgerufen, wenn Sie es versuchen um auf eine Eigenschaft zuzugreifen, die nicht existiert. So können Sie jetzt tun:

%Vor%

In der Vorlage:

%Vor%     
MrCode 24.06.2013, 16:01
quelle
1

Ich schätze, der Grund könnte einfach "weniger tippen" sein, aber das hat einige nette Nebenwirkungen:

  • Hilft, wenn diejenigen, die die Templates schreiben, nicht mit PHP vertraut sind und sich nicht mit dem "was könnte $this-> bedeuten?" befassen müssen.
  • Einen separaten Container für die Variablen zu haben, hilft auch, wenn es einige Eigenschaften der Ansicht gibt, die für diese Klasse privat sein sollten und die Bibliotheksschreiber sie nicht den Schablonen-Schreibern
  • aussetzen wollen
  • Verhindert Namenskollisionen mit den eigenen Eigenschaften der Ansicht und den Variablen für die Vorlagen.
  • Viel schneller als methodenbasierte Zugriffsschemata. Könnte nicht so relevant sein, wie es war, als zum Beispiel Smarty erstellt wurde (arbeitete auch mit php4).
complex857 24.06.2013 16:00
quelle