Magento-Objekte inspizieren mit Emzee_Dev

Nach langer, langer Zeit habe ich es endlich hinbekommen: Emzee_Dev, mein Helferlein, ist im Web verfügbar. 🙂

Prolog

Mitte 2010, während meiner ersten Tage in der Magento-Entwicklung, brauchte ich ein Werkzeug, um die riesigen Magento-Objekte besser kennenzulernen. Inzwischen gibt es viele praktische Extensions, eine hervorragende PhpStorm-Integration (die ich leider immer noch nicht austesten konnte) u.ä. Damals war das noch nicht so. Deswegen habe ich mich damals hingesetzt und eine kleine Klasse namens Emzee_Dev geschrieben.

Drei Jahre später, wir schreiben jetzt Mai 2013, verwende ich mein kleines Helferlein immer noch. Obwohl es inzwischen viele Tools gibt, hat Emzee_Dev scheinbar immer noch seinen Platz. Wenn EntwicklerInnen die Ausgabe meiner info()-Methode sehen fragen sie mich, wo man diese Extension bekommt. „Ich gebe dir gerne den Code, aber bevor ich es veröffentlich kann, muss ich den Code erst aufräumen.“, habe ich dann immer geantwortet.

Obwohl das Skript nicht besonders lang ist, bin ich nie dazu gekommen. Und dann dachte ich mir: „jetzt reicht es“ und habe die alte, unschöne, statische Klasse in eine Extension namens Emzee_Debug geklatscht, um das Ding über modman & co installierbar zu machen und mich selbst dazu zu zwingen, wenigstens ein paar Verschönerungen vorzunehmen.

Verwendung

Die genauen Details und weitere Befehle können auf GitHub nachgelesen werden. Ich stelle hier nur die relevanteste Funktion info() vor, mit der man sich Informationen über den Aufbau von Objekten ausgeben lassen kann.

info()

Sobald Magento initialisiert ist, kann man diese Methode über ein Singleton-Model oder einen Helper verwenden:

# using a singleton model
echo Mage::getSingleton('emzee_dev/debug')->info($variable);

# using a helper
echo Mage::helper('emzee_dev')->info($variable);

Übergibt man ein Objekt an die Methode, dann erhält man:

  • eine graphische Aufstellung der öffentlichen Methoden, die in der Klasse und den Eltern-Klassen existieren.
    • Man sieht über einen Farbcode, in welcher Klasse die Methode definiert wird.
    • Beim Hovern über die Methode wird die definierende Klasse angezeigt.
    • Mit einem Klick auf den Methoden-Namen sieht man die Methoden-Deklaration (Variablen, Standardwerte).
  • die Namen der Parent- und Child-Blöcke, falls es sich beim Objekt um eine Insatz einer Block-Klasse handelt.
  • einen hübschen Backtrace, der die umliegenden Zeilen in der jeweiligen Datei zeigt.

So sieht das als Screenshot aus:

Der Output der info()-Methode.

Andere Typen (String, Array, …) werden mit einem simplen print_r() ausgegeben, da ist der Mehrwert also deutlich geringer.

Download

Die Extension ist bei GitHub zu finden: Emzee_Dev

Contribute

Falls jemand spontan Lust bekommen hat, das Tool noch weiter zu entwickeln: ich freue mich über Pull-Requests. 🙂

2 Antworten

  1. Matthias sagt:

    Mh nette Idee aber irgendwie fehlt mir dafür ein Anwendungsbeispiel (zumindest wenn man xDebug im Einsatz hat). Bin gespannt wie sich das noch entwickelt.