Kolumne: ZendColumn

Neue Mailing-List-Ordnung, Features und Bugfixes beim Zend Framework – Kolumne
Kommentare

Seit dem Erscheinen der letzten ZendColumn ist einiges passiert. Es gab neue ZF1- und ZF2-Releases, wenig genutzte Mailinglisten wurden eingestampft, und das neue ZFTool wurde vorgestellt. Zudem wurde diskutiert, welche PHP-Version als Mindestvoraussetzung für ZF2 dienen sollte. Außerdem finden Sie in dieser Kolumne ein paar Tipps für Ihre View Helper.

PHP Magazin

Die Kolumne „ZendColumn“ von Ralf Eggert ist erstmalig erschienen im PHP Magazin 3.2013

Neue Releases

Die beiden Security-Releases 1.11.15 und 1.12.1 wurden Mitte Dezember veröffentlicht und schließen eine kürzlich entdeckte Sicherheitslücke in Zend_Feed_Rss und Zend_Feed_Atom. Details zu dem Sicherheitsproblem können in den Hinweisen zu der Lücke nachgelesen werden [1]. Mit Version1.12.1 wurden zudem über vierzig weitere Bugs bereinigt.

Beim Zend Framework 2 hat sich auch einiges getan. Der 2.0.x-Zweig hat die beiden Releases 2.0.6 und 2.0.7 spendiert bekommen, die zusammen über zweihundert Bugfixes [2, 3] enthalten. Damit wurde der 2.0.x-Zweig vorerst geschlossen, sodass künftig im Wesentlichen nur noch Security-Releases veröffentlicht werden sollen.

Ende Januar wurde das erste Minor-Release vom ZF2 veröffentlicht [4]. Dabei brachte das Release 2.1.0 auch wieder neue Features. Dazu zählen die neuen Komponenten ZendPermissionsRbac und ZendTest, neue Datenbankadapter für Oracle und IBM DB2, eine neue Klasse ZendStdlibStringUtils zum Manipulieren von Zeichenketten, scrypt-Unterstützung für ZendCrypt, Apache-htpasswd-Support für ZendCrypt und HTTP-Authentifizierung, verbesserte Unterstützung für Dateiuploads sowie einiges mehr. Alle Änderungen können Sie dem Changelog entnehmen [5]. Ebenfalls neu sind die beiden Servicekomponenten ZendService_Apple_Apns und ZendService_Google_Gcm, das neue ZFTool (dazu gleich mehr) sowie eine Überarbeitung der Zend-Framework-Website (Responsive Design).

Nur eine Woche später wurde bereits das Release 2.1.1 mit weiteren vierzig Bugfixes veröffentlicht [6], für Mitte Februar ist Version 2.1.2 geplant. Bereits Mitte April kann mit dem Release 2.2.0 gerechnet werden. Der neue Release-Plan mit neuen Maintenance-Releases jeweils am dritten Mittwoch eines Monats und neuen Minor-Releases alle drei Monate wird derzeit gut eingehalten.

Mailinglisten und Support

Anfang Februar wurden die meisten Zend-Framework-Mailinglisten nach einiger Vorankündigung eingestellt. Lediglich die Mailinglisten zf-contributors, fw-general und fw-announce bleiben bestehen. Hauptgrund ist, dass der meiste Traffic sowieso schon immer über die beiden ersten Listen lief. fw-announce wird weiterhin für die Ankündigung neuer Releases verwendet werden.

Wer auf der Suche nach Support ist, um Zend-Framework-spezifische Probleme zu lösen, dem bieten sich neben den Mailinglisten weitere Möglichkeiten. Zum einen können Sie Ihre Fragen rund um das Zend Framework bei Stack Overflow stellen, wobei es eigene Tags für das ZF1 [7] und das ZF2 [8] gibt. Außerdem können Sie das Zend-Framework-Forum nutzen [9], das eigentlich jeder deutschsprachige ZF-Entwickler kennen sollte.

ZFTool

Mit dem Release 2.1.0 wurde endlich wieder ein Tool zur Einrichtung neuer Zend-Framework-Projekte veröffentlicht. ZFTool kann über GitHub [10] bezogen oder als Phar-Datei [11] heruntergeladen werden. Bisher bietet ZFTool schon einige nützliche Funktionen:

  • Projekt anlegen (Basis ist die Skeleton Application)
  • Module anlegen
  • Class Maps generieren
  • Geladene Module anzeigen
  • Zend-Framework-Version anzeigen
  • Zend-Framework-Bibliothek installieren

Geplant ist unter anderem, dass die Konfiguration der Anwendung gelesen und geschrieben werden kann.

PHP-Version

Seit Anfang Februar wird in der Contributors-Mailingliste eine lebhafte Diskussion über die PHP-Version geführt, die als Mindestanforderung für das ZF2 gelten soll. Derzeit ist es Version 5.3.3, um alle Features des Frameworks nutzen zu können. Mike Willbanks hatte von einem Bug in PHP 5.3.3 für das ArrayObject berichtet, der beim Speichern von Objekten in Sessions massive Probleme bereitet. Da dieser Bug jedoch in PHP 5.3.3 liegt und erst in 5.3.5 korrigiert wurde, schlug Mike drei Alternativen vor:

  • Hochsetzen der Mindestanforderung auf PHP 5.3.5
  • Überarbeitung des ZF2-Codes, um diesem Bug ausweichen zu können
  • Nichts tun

Variante zwei würde viel Arbeit bedeuten, nur um einen bekannten Bug in einer bestimmten PHP-Version umgehen zu können. Variante eins ist jedoch auch problematisch, da einige wichtige Linux-Distributionen, die häufig für Webserver eingesetzt werden, derzeit offiziell nur PHP 5.3.3 unterstützen. Die Diskussion wurde sehr intensiv geführt, und es wurden viele Argumente ausgetauscht. Am Ende wurde entschieden, bei PHP 5.3.3 zu bleiben, da Mike für die genannten Probleme einige Workarounds implementiert hat.

Die nächste Chance, die minimal geforderte PHP-Version heraufzusetzen, wird bei Einführung des Zend Frameworks 3 sein. Bleibt zu hoffen, dass in besagten Linux-Distributionen bis dahin etwas mehr Bewegung in Sachen eingesetzter PHP-Version gekommen ist.

Best Practice View Helper

Jetzt kommen wir einmal zu etwas völlig anderem, denn in dieser Kolumne gibt es ausnahmsweise einmal wieder ein Listing. Dabei geht es um die Frage, ob der Einsatz von anderen Serviceobjekten in einem View Helper eher gute oder schlechte Praxis ist. Dafür schauen wir uns einmal das Listing 1 an.

Listing 1
namespace PizzaViewHelper;

use ZendFormViewHelperAbstractHelper;
use PizzaServicePizzaService;

class RandomPizza extends AbstractHelper
{
  protected $service = null;
  public function __construct(PizzaService $service)
  {
    $this->setPizzaService($service);
  }
  public function setPizzaService(PizzaService $service)
  {
    $this->service = $service;
  }
  public function getPizzaService()
  {
    return $this->service;
  }
  public function __invoke()
  {
    $random = $this->getPizzaService()->fetchSingleByRandom();
    $html = '
'; $html.= '

' . current($random) . '

'; $html.= '
'; return $html; } }

Der View Helper RandomPizza soll eine zufällige Pizza ausgeben. Um an die Daten zu kommen, wird dem View Helper im Konstruktor ein PizzaService-Objekt übergeben (dies erledigt eine Factory). Mithilfe des PizzaService-Objekts wird beim Aufruf der __invoke()-Methode eine zufällige Pizza angefordert und dann mit etwas HTML-Code angereichert ausgegeben. Bei diesem View Helper könnten zwei zentrale Kritikpunkte aufkommen:

  1. Mischung von HTML- und PHP-Code außerhalb der View-Templates
  2. Abruf der Daten aus dem Model durch einen View Helper

In einer ZF-Anwendung gilt der Grundsatz, dass eine Mischung von HTML- und PHP-Code nur in die Dateien gehört, die auf .phtml enden. View Helper enden jedoch auf .php, sodass so manch einer schlussfolgert, dass View Helper keinen HTML-Code enthalten dürfe. Natürlich ließe sich der View Helper so umschreiben, dass ein View-Template für die Ausgabe der Zufallspizza verwendet werden kann, was bei einer komplexeren Ausgabe sogar durchaus Sinn ergeben würde. Ist der generierte HTML-Code in einem View Helper jedoch so überschaubar wie in diesem Beispiel, spricht nichts dagegen, ihn direkt im View Helper zu belassen; schließlich sind auch View-Helper für die Ausgabe zuständig.

Über den zweiten Kritikpunkt gehen die Meinungen schon deutlicher auseinander. Je nachdem wie man das Model-View-Controller-Entwurfsmuster interpretiert, sind Zugriffe aus der View-Schicht auf die Model-Schicht erlaubt oder verboten. Statt des PizzaService-Objekts könnte der View Helper auch die Daten der Zufallspizza übergeben bekommen. Jedoch wurde für die View Helper im ZF2 eine eigene Erweiterung des Servicemanagers implementiert, der so genannte Helper Plug-in Manager. Er erlaubt die detaillierte Konfiguration für die Initialisierung aller View Helper. Damit lassen sich problemlos auch Objekte injizieren, auf die der View Helper zugreifen kann. Genau dieses Vorgehen, also das Abfragen von Daten mithilfe eines Objekts in einem View Helper, wird von den Zend-Framework-Entwicklern ausdrücklich empfohlen [12]. Sie sollten jedoch zwei wichtige Grundsätze beachten:

  • Ein View Helper darf nur lesend auf die Daten eines Models zugreifen und niemals schreibend. Auch sollte ein View Helper keine Session-Daten oder Dateien verändern.
  • Sie sollten nicht den Servicemanager an sich, sondern immer die konkreten Objekte injizieren, die Sie in dem View Helper benötigen.

Wenn Sie diese Grundsätze beachten, spricht nichts dagegen, dass Sie auf Ihre Serviceobjekte auch in Ihren View Helpern zugreifen.

Ausblick

Die Aussichten für das Zend Framework sehen sehr gut aus. Die nächsten Mini- und Minor-Releases sind bereits geplant und auch das ZF3 wurde bereits mehrfach in den Mailinglisten erwähnt, auch wenn es nicht vor Ende 2014 zu erwarten sein wird. Eine so lange Zeitspanne wie zwischen ZF1 und ZF2 wird es künftig jedoch nicht mehr geben. Das Frühjahr wird zudem einige ZF2-Bücher auf den Markt spülen – so steigt die Akzeptanz und Verbreitung vom Zend Framework 2 immer weiter.

Ralf Eggert (r.eggert[ätt]travello.com) ist Geschäftsführer der Travello GmbH mit Sitz in Pinneberg. Er hat bereits mehrere Projekte auf Basis des Zend Frameworks umgesetzt und ist Autor des Buchs „Das Zend Framework“, das derzeit für das ZF2 grundlegend überarbeitet wird. Ralf veröffentlicht privat auf zendframeworkmagazin.de viel Wissenswertes zum Zend Framework.
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -