Wer das Symfony-Modul für Drupal 7 installieren möchte, stößt auf Schwierigkeiten bei der Installation. Das Modul ist experimentell (alpha) und es fehlt der Package Manager "Composer" von Drupal 8, um es vollständig zu installieren. Deshalb sind spezielle Kenntnisse für die korrekte Einrichtung erforderlich. Genau diese Kenntnisse werden in diesem Beitrag vermittelt.
Die Nutzungsmöglichkeiten des Moduls beschränken sich darauf, Symfony-Klassen aus anderen Modulen heraus aufzurufen. Symfony wirbt damit, dass sich seine Komponenten auch unabhängig voneinander verwenden lassen, also auch außerhalb des gesamten Frameworks. Genau in diesem Sinne ist das Symfony-Modul von Drupal 7 zu verstehen. Der Nutzen ist aber tatsächlich begrenzt, weil ein kompletter Workflow, wie er für die Entwicklung einer Symfony-Applikation üblich ist, z.B. durch den Einsatz der Konsolen-Applikation "php app/console <parameter>", so nicht möglich ist.
Trotzdem ist die Installation interessant als Vorstufe zu einer vollständigen Integration von Symfony in Drupal 7, die aber noch nicht Gegenstand dieses Beitrags ist. Im Vorgriff auf einen oder mehrere zukünftige Artikel zum Thema "Vollständige Symfony-Integration in Drupal 7" sei aber an dieser Stelle schon angemerkt, dass es grundsätzlich möglich ist, Symfony mit allem Komfort zur Entwicklung von Modulen zu nutzen.
Zunächst aber hier die schon ziemlich anspruchsvolle Installation des Symfony-Moduls.
Leider funktionieren die auf der Symfony-Modulseite (bzw. in der README.txt) angegebenen Installationsschritte nicht. Verantwortlich dafür sind zwei Ursachen:
- Meist fehlt Curl auf dem Rechner bzw. wir haben die falsche Version und
- der Composer lässt sich mittlerweile nur über Https-Protokoll herunterladen und dafür sind entsprechende Zertifikate erforderlich, die vermutlich ebenfalls noch nicht installiert sind.
Wir besorgen uns also erst einmal die richtige Curl-Version hier und zwar - ganz wichtig - mit dem Zusatz "WITH SUPPORT SSL" (Win32 zip 7.33.0 binary SSL SSH Dirk Paehl). Ich habe zwar Win64, die vorstehende Version funktioniert aber trotzdem bei mir.
Außerdem laden wir uns die erforderlichen Zertifikate herunter (Datei cacert.pem).
Damit Curl in jedem Verzeichnis per cmd.exe aufrufbar ist, speichere ich es im Ordner "Windows/System32". Wer das zu "quick and dirty" findet, muss sich halt mit der Windows-Umgebungsvariable "PATH" etwas entsprechendes basteln. Wichtig ist, dass Curl.exe aus jedem Verzeichnis heraus aufrufbar sein muss. Das gleiche gilt übrigens für php.exe, das ich später benötige.
Jetzt erst erfülle ich alle Voraussetzungen, um den Composer zu installieren, den ich wiederum benötige, um Symfony in meinem Modulverzeichnis zu installieren:
- Ich speichere "cacert.pem" in meinen Symfony-Ordner.
- Ich gehe mit cmd.exe ebenfalls in den Symfony-Ordner.
- Ich führe dort meinen Curl-Befehl folgendermaßen aus:
$curl --cacert cacert.pem -sS https://getcomposer.org/installer | php
Die Ausführung meldet irgendwann:
Composer successfully installed to .... \sites\all\modules\symfony\composer.phar
Ich kann jetzt grundsätzlich die composer.phar in jeden Ordner verschieben, in den ich etwas mit dem Composer installieren möchte. Im Symfony-Module-Ordner befindet sich schon die Datei "composer.json", die dem Composer genau mitteilt, wie er etwas installieren soll. "php.exe" lässt sich hoffentlich ebenfalls im Modul-Ordner ausführen und ich gebe deshalb jetzt in cmd.exe ein:
$php composer.phar install
Bei mir brach die Ausführung allerdings noch einmal mit einer Exception ab:
"You must enable the openssl extension to download files via https."
Das ist aber jetzt nach alldem nur noch eine Kleinigkeit. In der PHP.ini wird die Extension php_openssl.dll aktiviert. Danach darf der Apache-Neustart nicht vergessen werden.
Jetzt läuft die Installation ohne Fehlermeldungen durch. Ich finde danach einen Ordner 'vendor' im Symfony-Modul-Ordner und darunter weitere Ressourcen: 'composer', 'doctrine', symfony' und 'twig' sowie die autoload.php.
Endlich geschafft! "Clear cache" jetzt nicht vergessen, denn sonst bekomme ich die Schock-Meldung: "You must install Symfony".
Um die Symfony-Installation zu testen gehe ich in Drupal nach 'admin/help/symfony' und bekomme eine vernünftige Meldung: "Symfony is a PHP framework ..." sowie die Ausgabe der Instanzierung der Klasse HttpFoundationExample.
Abb. 1: Test der erfolgreichen Installation des Symfony-Moduls durch Aufruf der Modulhilfe
Damit war die Installation von Symfony auf Drupal 7 erfolgreich. Symfony kann nun theoretisch für die Modulentwicklung genutzt werden, d.h. andere Module können jetzt die Klassen in den heruntergeladenen Frameworks verwenden.
Wer auch das noch testen möchte, der kann ein kleines Testmodul mit einer einzigen Funktion erzeugen:
function hr_tdd_help($path, $arg) { switch ($path) { case 'admin/help#hr_tdd': $output = '<p>' . t('<a href="@symfony">Symfony</a> is a PHP framework for web projects. Speed up the creation and maintenance of your PHP web applications. Replace the repetitive coding tasks by power, control and pleasure.</p>', array( '@symfony' => 'http://symfony.com', )); $output .= '<h3>' . t('HttpFoundation Example') . '</h3>'; $request = Symfony\Component\HttpFoundation\Request::createFromGlobals(); $output .= '<pre>' . print_r($request, TRUE) . '</pre>'; return $output; } }
Danach erscheint in der Drupal-Hilfe der Link 'hr_tdd'. Wenn man den betätigt, bekommt man die gleiche Ausgabe, wie über die Hilfe des Symfony-Moduls.
Allerdings eignet sich das System so noch nicht, um effektiv mit Symfony unter Drupal 7 Module zu entwickeln. In einem späteren Beitrag wird gezeigt, wie man ein Modul für Drupal 7 mit Symfony erstellt und dabei den gewohnten Workflow von Symfony komplett verwenden kann.