Validierung im ModuleStudio-Generator auf Symfony umgestellt

in  Generator , , ,

Validierung im ModuleStudio-Generator auf Symfony umgestellt

Bislang wurden in generierten Modulen selbstgeschriebene Validierungen verwendet. In den letzten Tagen wurden diese für die Zielversion Zikula 1.4.x abgelöst zu Gunsten der Symfony Validator Komponente.

In Symfony können Validierungen in mehreren Notationen definiert werden. Neben PHP und YAML sind auch XML und Annotationen möglich. Im ModuleStudio-Generator haben wir, wie auch im Ticket auf GitHub diskutiert wurde, Annotationen verwendet. Dabei werden Validierungsregeln (“Constraints”) durch @Assert-Annotationen direkt an der entsprechenden Entitätsklasse beziehungsweise den entsprechenden Feldern oder Methoden hinterlegt.

Hier ein einfaches Beispiel aus der offiziellen Symfony Dokumentation:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
// src/Acme/BlogBundle/Entity/Author.php
namespace Acme\\BlogBundle\\Entity;

use Symfony\\Component\\Validator\\Constraints as Assert;

class Author
{
    /**
     * @Assert\\Email()
     */
    protected $email;
}

So nutzen die generierten Module fortan ein erprobtes und aktiv gewartetes Validierungsframework. Auf Generator-Seite werden die Templates zur Generierung dieser Code-Teile mittelfristig stark schrumpfen, da nur noch die Annotationen erzeugt werden müssen. Mittelfristig deshalb, weil aktuell noch die alten Validierungen für die Zielversion Zikula 1.3.x mitgepflegt werden müssen.

Darüber hinaus gibt es in Symfony eine ganze Reihe an Validierungsmöglichkeiten und -optionen, die wir bisher gar nicht in ModuleStudio vorgesehen hatten. Im Zuge der Umstellung wurde daher die DSL um einige neue Sprachelemente erweitert, um die vielfältigen Einstellungen der Symfony Validitoren abdecken zu können.

Bei allen Feldtypen, die eine Einstellung für reguläre Ausdrücke besitzen (Unterklassen von AbstractStringField, wie zum Beispiel String, E-Mail, Liste, usw.), gibt es nun einen Schalter, mit dem die Logik der regex-Filter invertiert werden kann, um bestimmte Dinge nicht einzufordern, sondern auszuschließen. Bei E-Mail-Feldern kann jetzt auf Wunsch eine Überprüfung der DNS-Einstellungen aktiviert werden. Bei String-Feldern gibt es neue Optionen für Währungen, Sprachumgebungen (Locales), ISBN- und ISSN-Nummern, IP-Adressen, Kontonummern im IBAN-Format und Kreditkartennummern. Bei Listen- und Array-Feldern sowie mehrwertigen Seiten von Relationen können nun Vorgaben für minimale und maximale Anzahl ausgewählter beziehungsweise vorhandener Einträge modelliert werden.

Einige der neuen Einstellungen haben wir auch für Zikula 1.3.x reimplementiert. Die Prüfungen, die nur unter 1.4.x unterstützt werden, sind in der Dokumentation entsprechend gekennzeichnet.

Derzeit noch nicht migriert ist die Validierung von Dateien und Uploads, da in diesem Rahmen noch etwas mehr umgestellt werden muss. Dies wird in einem separaten Schritt nachgeholt und auch dabei werden eine ganze Menge neuer Möglichkeiten in die DSL von ModuleStudio Einzug halten, um Ausdrucksformen für die Variabilitäten zu schaffen. Als Appetitmacher seien die Referenzseiten zu den Constraints File und Image empfohlen.

Als nächstes stehen für Zikula 1.4.0 im Generator allerdings erst einmal zwei andere Punkte im Vordergrund:

Die Umstellung auf Symfony Routing, die auch die Behandlung unterschiedlicher Ausgabeformate (Artikel) berührt. Dazu haben wir uns bereits einige Gedanken gemacht, die Implementierung wird auch ein paar kleinere Refaktorisierungen, zum Beispiel in der Organisation der generierten Controller, mit sich bringen, um einen nachhaltigen Aufbau zu erreichen.

Wir wollen endlich den Service Container und damit Dependency Injection mehr nutzen. Dazu werden wir sukzessive einzelne Bestandteile der generierten Anwendungen, angefangen mit den diversen Util-Klassen, auf DI umstellen und im gleichen Schritt über Parameter im Container konfigurierbar machen.