So langsam kommt Magento 2 ja an den Start – auch wir haben mittlerweile den ersten Magento 2 Shop online und so kommt es natürlich, dass immer mehr und mehr Entwickler in den Prozess einbezogen werden und von anderen Entwicklern lernen. Jetzt ist es natürlich so, dass wir ganz am Anfang stehen und genau jetzt noch die Chance haben, von Anfang an alles richtig zu machen. Das ist natürlich nicht so einfach, aber besser jetzt, als am Ende wieder alle abzuholen.
Die Problematik ist, auf allen Systemen den gleichen Stand des Projektes herzustellen. Alle sollen mit dem gleichen Workflow, den gleichen Tools und mit dem gleichen Code-Style arbeiten. Im Idealfall laufen bei jedem Commit dann noch Tools wie phpcs, phpmd oder jshint über den Code und finden „Fehler“ der Entwickler bevor der Stand total kaputt geht und wieder jeder in seinem eigenen Code-Style programmiert. Ich mag das z.B. überhaupt nicht aber Magento liefert einiges schon von Anfang an mit – man muss es nur nutzen!
Vorbereitung: Die richtige PHP-Version nutzen!
Das Problem in meiner Entwicklungsumgebung ist, dass alle php-Prozesse mit aktiviertem xDebug ausgeführt werden. Dadurch läuft jeder Prozess, welchen phpStorm automatisch im Hintergrund startet (sei es phpmd oder phpcs) mit xDebug. Da ich maximal eine parallele Debugging-Verbindung zulasse, warten die Prozesse also aufeinander. Daher läuft phpcs und phpmd nicht mehr, wenn man im Debugging ist. Außerdem wird dadurch sowieso jeder Call sehr träge und es macht nicht wirklich Spaß.
Die Lösung wäre hier, xDebug entsprechend zu konfigurieren, oder eine andere php-Installation zu nutzen, welche kein xDebug aktiviert hat und so dem „Entwicklungs-PHP“ nicht in die Quere kommt. Da ich eh wegen Problemen im MAMP und OpenSSL die Alternative AMPPS installieren musste, nutze ich aktuell die Binaries von dort in phpStorm.
Damit man PEAR (und somit auch phpcs und phpmd) unter AMPPS nutzen kann, muss man dieses erst installieren. Wie das geht, steht hier.
Vorbereitung: Zeitzone unter AMPPS
Da in den php-Versionen unter AMPPS keine Zeitzone definiert ist, holen wir das einfach manuell nach um folgende Fehlermeldung direkt von Anfang an zu vermeiden (diese poppt sonst bei jedem Check erneut auf):
Dazu öffnen wir die php.ini und ergänzen einen Wert:
vi /Applications/AMPPS/php-5.6/etc/php.ini [Date] date.timezone = Europe/Berlin
Welche Werte möglich sind, steht hier.
PEAR Pakete installieren
Als erstes installieren wir phpcs und phpmd für die php Version 5.6 unter AMPPS:
cd /Applications/AMPPS/php-5.6/bin ./pear install PHP_CodeSniffer ./pear channel-discover pear.phpmd.org ./pear channel-discover pear.pdepend.org ./pear install phpmd/PHP_PMD
Bitte beachten, dass am Anfang der Befehlt „Punkt Slash“ steht. Das ist nötig, damit wirklich die pear Version aus dem aktuellen Verzeichnis genutzt wird, und nicht irgend eine andere aus dem aktuellen Include-Path!
Coding-Styleguides (phpcs)
Fangen wir mit dem CodeStyle an, welchen man mit phpcs wunderbar kontrollieren kann. Eine IDE wie phpStorm kann phpcs voll integrieren und unterstützt den Entwickler somit perfekt. Magento selbst bringt bereits Coding-Standards mit, welche im dev-Verzeichnis zu finden sind. Leider hält sich der Core selbst meistens nicht an den vorgeschlagenen Standard und dadurch hat man direkt wieder eine Begründung warum man sich selbst nicht dran halten muss, oder? Eher nicht! Einfach mal ausprobieren und nicht vorher schon in den Sack hauen.
Jetzt öffnet man ein Projekt seiner Wahl in phpStorm und konfiguriert die allgemeinen Einstellungen:
Unter „Languages & Frameworks“ -> „PHP“ -> „Code Sniffer“ konfiguriert man den entsprechenden Pfad. Mit einem Klick auf „Validate“ kann man leicht feststellen, ob alles funktioniert.
Diese Einstellungen müssen nur einmal gemacht werden (und nicht je Projekt).
Weiter mit der Konfiguration des Projektes:
In den Einstellungen unter „Editor“ -> „Inspections“ findet man auf der rechten Seite unter „PHP“ -> „PHP Code Sniffer validation“ die entsprechende Konfiguration für das jeweilige Projekt. Diese Einstellungen muss man also immer wieder per Hand vornehmen (oder Teile vom .idea Verzeichnis mit in die Versionskontrolle aufnehmen).
Als erstes setzen wir den Haken in der Liste, damit dieser Check aktiv wird.
Bei „Coding Standard“ wählen wir „Custom“ und vervollständigen den Pfad zur folgenden Datei im Projekt: dev/tests/static/testsuite/Magento/Test/Php/_files/phpcs/
Dann noch das „schwere-Level“ einstellen (in meinem Fall „Error“ für Projekt-Dateien). Fertig. Ab jetzt wird man während des Programmierens darauf hingewiesen, dass etwas nicht so richtig passt.
Fehleranalyse (phpmd)
Fast genauso verfahren wir mit phpmd. Die globalen Einstellungen für das Binary findet man unter „Languages & Frameworks“ -> „PHP“ -> „Mess Detector“. Ansonsten genau wie oben, außer natürlich, dass das Binary ein anderes ist (phpmd statt phpcs). Ob alles richtig ist, bekommt man wieder mit einem Klick auf „Validate“ heraus.
Unter „Editor“ -> „Inspections“ findet man direkt unter den Einstellungen für den Code Sniffer auch die Einstellungen für phpmd. Auch hier setzen wir wieder den Haken um diese Inspection zu aktivieren.
Als nächstes fügen wir die ruleset.xml im folgenden Verzeichnis hinzu: dev/tests/static/testsuite/Magento/Test/Php/_files/phpmd/ruleset.xml
Wer möchte, kann auch noch die anderen Haken setzen (ich bin mir nicht sicher, ob diese vom Ruleset eingeschlossen werden).
So, ebenfalls fertig konfiguriert.
Schema-Validierung aktivieren
Nun gibt es mit Magento2 ja endlich auch XSD-Dateien. Also Dateien, welche XML beschreiben. So bekommt man beim Schreiben bereits Vorschläge für die entsprechenden Elemente und Attribute. Extrem empfehlenswert! Und auch super einfach. Um phpStorm mitzuteilen, wo diese Dateien liegen, muss nur einmalig der folgende Befehl ausgeführt werden:
bin/magento dev:urn-catalog:generate .idea/misc.xml
Bash-Completion
Praktisch ist auch die Bash-Completion für Magento2. Um die entsprechende Konfiguration zu nutzen, muss als erstes die Basis per brew installiert werden:
brew install bash-completion
Danach können wir die Befehle von Yaroslav Voronoy für Magento 2 hinzufügen:
curl -o /usr/local/etc/bash_completion.d/magento2-bash-completion https://raw.githubusercontent.com/yvoronoy/magento2-bash-completion/master/magento2-bash-completion
Öffnet man nun eine neue Shell, stehen die Befehle auch schon zur Verfügung.
Dazu tippt man im phpStorm-Terminal einfach „bin/magento“ (ohne vorangestelltes php + Leerzeichen) und drückt 2x Tab. Das Ergebnis sieht dann so aus:
Das erspart mir zumindest viel Tipparbeit. Cool wäre natürlich noch, wenn die Befehlt aus der aktuellen Instanz aufgelistet würden. Das heißt, auch die Custom-Commands aus eigenen Extensions. Aktuell ist es nur eine fixe Liste von Befehlen, welche natürlich von Zeit zu Zeit aktualisiert werden muss, da bestimmt Magento mal neue Befehle hinzufügen wird. Aber besser als nichts. Also nicht wundern, wenn die eigenen Kommandos nicht enthalten sind!