Türchen 15: Globale Variablen

Globale Variablen in Magento oder auch das Mage-Registry-Konzept ist der Inhalt von Türchen 15. An vielen Stellen stolpert man teilweise über Variablen die aus dem Nichts abgerufen werden. Wo sie gesetzt werden ist im Anfang ein Rätsel. Dabei kann es doch so einfach sein..

In vielen Fällen registrieren Controller die angefragten Models zusätzlich in der globalen Welt. Dazu rufen sie die Methode Mage::register auf. Dazu ein Beispiel:

Mage::Register('name_der_variable', $wert);

Blöcke, andere Controller - jeder eigentlich - kann nun mittels Mage::Registry auf die Variable zugreifen. Auch hier zu ein kleines Beispiel:

echo Mage::Registry('name_der_variable');

In diesem Fall gibt unser Script den Wert der Variable $wert aus. Dies hat den Vorteil das weiterhin ganz klar definiert ist das ausschließlich Controller externe Variablen verarbeiten und diese an Models weitergeben. Nach der Weitergabe an das Model wird dieses in der Registry registriert. Hier hat nun der Block problemlos Zugriff und kann die Daten des Models aufbereiten und an die Templates übergeben.



Ein Beitrag von Tobias Vogt
Tobias's avatar

Tobias Vogt arbeitet seit 2008 mit Magento und ist seit 2011 durch Magento zertifizierter Entwickler. Seit 2016 ist er Mitgründer und CTO bei der connect-io GmbH, einer Magento-Agentur mit Sitz im idyllischen Paderborn-Salzkotten. Er gehört zum Gründer-Team der Webguys und ist seit November 2011 Bachelor of Science (Wirtschaftsinformatik). Sie erreichen Ihn per E-Mail unter tobi@webguys.de.

Alle Beiträge von Tobias

Kommentare
Svens0n am

Hi, auch wenn der Artikel schon etwas älter ist, hätte ich eine Frage dazu. Existiert die Mage Registry nur für jeden einzelnen Request oder kann man das über mehrere Seiten hinweg nutzen, wie eine Art Session?

Andreas Rulle am

Unter http://stackoverflow.com/questions/4006183/magento-passing-data-between-a-controller-and-a-block gibt es einen m. E. interessanten Austausch zu diesem Thema. Alan Storm empfiehlt das, wie hier beschrieben, das registrieren der Model-Objekte, allerdings mit Hilfe von Mage::getSingleton.

(Das wäre dann noch eine Meinung).

Und die Idee von Alan Storm, stateful model objekte zu verwenden, scheint nicht so schlecht zu sein.

Tobias Vogt am

Mhh.. Ja und Nein. Eigentlich ist es ja eine alternative Implementierung zu $_GLOBAL - so scheint es zumindest. Ein Singleton würde ich über Mage::getSingleton('namespace/modul') realisieren. Vlt. gibt es dazu ja noch ein paar Meinungen :)

LeSven am

Ist der Begriff "Globale Variablen" nicht falsch? Eigentlich ist die Registry doch ein klassisches Singleton Konzept, oder?

Tobias Vogt am

Hey Sascha,

unregister ist ein gutes Stichwort da hast du recht. Methoden sind in PHP in der Regel aber nicht Case-Sensitiv, somit spielt die Groß- und Kleinschreibung keine Rolle. Eine Ausnahme bilden die magischen getter und setter von Magento. setName z.B. ist aufgrund der Implementierung wieder cave-sensitiv... :)

schönen Gruß und Danke für das Lob

Tobi

Sascha am

Euer Adventskalender macht Laune, aber müssten nicht register und registry klein geschrieben werden? Außerdem kann man die Variablen auch mit unregister wieder einfernen.

VG Sascha P.S. danke für die kleinen, hilfreichen Tipps

Dein Kommentar