PHP – Sebastians Blog https://sgaul.de Neues aus den Softwareminen Thu, 13 Mar 2014 20:34:54 +0000 de-DE hourly 1 https://wordpress.org/?v=6.1.1 https://sgaul.de/wp-content/uploads/2019/02/cropped-sgaul-2-1-32x32.jpg PHP – Sebastians Blog https://sgaul.de 32 32 PHP: Output-Buffer ist schachtelbar https://sgaul.de/2013/10/15/php-output-buffer-ist-verschachtelbar/ Tue, 15 Oct 2013 20:13:19 +0000 https://sgaul.de/?p=2373 PHP: Output-Buffer ist schachtelbar weiterlesen]]> Bei der Entwicklung des WordPress-Caching-Plugins Staticly kam die Frage auf, wie man die Output-Buffer ob_start und Co. nutzen könne, während Plugins und andere Code-Teile selbst davon Gebrauch machen. Und tatsächlich macht es PHP dem Nutzer recht einfach, wie das Manual bestätigt:

Output buffers are stackable, that is, you may call ob_start() while another ob_start() is active.

Die Ausgabe-Puffer sind als Stack realisiert, so dass man sie schachteln kann:

ob_start();
  ob_start();
    echo "Hello world!";
  ob_end_flush();
ob_end_flush();

Schön, wenn es auch mal einfach geht.

]]>
Adaptive Bilder im responsiven Webdesign https://sgaul.de/2013/06/15/adaptive-bilder-im-responsiven-webdesign/ https://sgaul.de/2013/06/15/adaptive-bilder-im-responsiven-webdesign/#comments Sat, 15 Jun 2013 14:28:05 +0000 https://sgaul.de/?p=2221 Während die Gestaltung für unterschiedlich große Ausgabegeräte mit CSS mittlerweile ganz gut möglich ist, hat responsives Webdesign ein großes Problem: Bilder. Schon für Entwickler ist es nervig, unzählige Größen bereitzustellen. Vollautomatisierte Lösungen, die auch für technisch unversierte Nutzer funktionieren, sind noch um einiges komplizierter.

Eine schöner Ansatz, der zumindest einen großen Teil dieses Gebietes abdeckt, bietet Adaptive Images. Die Software habe ich nicht getestet und sie dürfte für viele ohnehin nicht nutzbar sein, da sie PHP und einen Apache Webserver erfordert. Die Idee ist aber gut und einfach umsetzbar.

monitor-smartphone-v3

Client: Cookie mit Bildschirmdimensionen setzen

Wer generell gegen Cookies und Javascript ist kann jetzt aufhören zu lesen. Via JS setzen wir im Head ein(en?) Cookie mittels JS, in dem die maximale Bildschirmgröße gespeichert wird:

document.cookie = 
    'resolution=' + Math.max(screen.width,screen.height) + '; path=/';

Da wir das Maximum wählen, können wir sicher sein, dass Bilder auch nach dem Kippen des Gerätes ins Querformat noch ordentlich aussehen.

Das war es auch schon. Der Browser sendet ab sofort bei jedem Aufruf die Auflösung mit. Auch bei Bildern, ob aus Img-Element oder CSS.

Server: Bildanfrage abfangen, Bild in neuer Größe erzeugen und umleiten

Serverseitig muss die Anfrage nun auf irgend ein Serverprogramm umgeleitet werden. Dieses kennt den Pfad zum Bild und die gewünschte Dimension. Es nimmt also das Bild, skaliert es herunter und speichert es. Nun schickt es dem Client eine Weiterleitung auf die optimierte Datei. Diese kann sogar permanent sein, da sich die Dimensionen eines Browsers in aller Regel nicht ändern.

Die Skalierung des Bildes ist nur beim ersten mal für eine bestimmte Größe nötig. Später wird auf die bereits erzeugten Varianten verwiesen.

Nur ein Ansatz

Dies ist natürlich nur ein Ansatz. Welche Bilder skaliert werden sollen und wodurch diese vom Server erkannt werden muss für jede Website geklärt werden. Zudem sollte man sich Normgrößen überlegen, damit nicht unzählige Varianten ein und der selben Datei wegen zwei Pixeln Unterschied auf der Platte landen.

Gegenüber verbreiteten Ansätzen gibt es einen zentralen Vorteil. Browser müssen nicht erst alle kleinen Bilder laden um im Nachhinein via Javascript zu erfahren, dass sie diese durch für ihre Größe angemessene Varianten ersetzen sollen. Hier lädt der Client ein Bild und der Server liefert ihm was er braucht.

Der Ansatz funktioniert nicht ohne Javascript und Cookies. Sind diese deaktiviert oder nicht vorhanden, erhält der Browser eine Standardversion des jeweiligen Bildes. Die Website funktioniert somit dennoch wie erwartet, nur die Optimierung fehlt.

]]>
https://sgaul.de/2013/06/15/adaptive-bilder-im-responsiven-webdesign/feed/ 2
PostgreSQL-Byte-Array mit PHP in Datei schreiben https://sgaul.de/2012/10/20/postgresql-byte-array-mit-php-in-datei-schreiben/ Sat, 20 Oct 2012 16:42:30 +0000 https://sgaul.de/?p=1464 PostgreSQL-Byte-Array mit PHP in Datei schreiben weiterlesen]]> Will man Binärdaten, die in einer PostgreSQL-Tabelle als Typ bytea hinterlegt sind, direkt ausgeben oder in eine Datei schreiben, muss die Rückgabe zunächst demaskiert werden. Andernfalls wird sich euer Bildbetrachter weigern, eine gespeicherte Grafik zu öffnen. Grund dafür ist, dass die Daten bei der Auswahl mit SELECT als Oktalzahlen zurückgegeben werden, die mit einem Backslash beginnen. Die Funktion pg_unescape_bytea entfernt diese.

$result = pg_query("SELECT $rowName FROM $tableName;");
while ($row = pg_fetch_assoc($result)) {
    $fileHandler = fopen($filePath, 'wb');
    fwrite($fileHandler, pg_unescape_bytea($row[$rowName]));
    fclose($fileHandler);
}
]]>
PHP-Coding-Guidelines: PHP Framework Interop Group https://sgaul.de/2012/09/29/php-coding-guidelines-php-framework-interop-group/ https://sgaul.de/2012/09/29/php-coding-guidelines-php-framework-interop-group/#comments Sat, 29 Sep 2012 08:23:36 +0000 https://sgaul.de/?p=1445 Neben vielen weiteren hat PHP ein in meinen Augen besonders nerviges Manko: Es stellt keine Guidelines dafür bereit, wie der geschriebene Code formatiert werden soll. Für einen Überblick habe ich vor längerer Zeit schon einmal die Vorgaben großer Projekte verglichen. Viel interessanter scheint jedoch der Ansatz der PHP Framework Interop Group zu sein, die ein ganzes Bündel von Empfehlungen für Webentwickler geschnürt hat. Viele bekannte Projekte wie Zend Framework, PEAR, phpBB, Joomla und Drupal sind daran beteiligt. 

Auf der Projektseite werden drei zentrale Dokumente bereitgestellt, die durch GitHub versioniert werden und verschiedenartige Vorgaben liefern.

PSR-0: Autoloading Standard

Dieses Dokument beschreibt, wie Namespaces und Klassennamen zu wählen sind. Anhand dieser Vorgaben lässt sich ein Autoloader definieren, der automatisch alle benötigten Klassen nachlädt.

PSR-1: Basic Coding Standard

In diesem Schriftstück finden sich die grundlegenden Coding-Standards. Eine Datei muss UTF-8-kodiert sein, PHP-Bereiche werden durch <?php oder <?= eingeleitet. Für zentrale Konzepte gibt es hier Vorgaben zur Schreibweise:

ClassName
CONSTANT_NAME
methodName

Zudem wird festgelegt, dass eine Datei entweder Symbole (wie Klassen, Funktionen) definiert oder Seiteneffekte (Ausgaben erzeugen u. ä.) hat – niemals jedoch beides.

PSR-2: Coding Style Guide

PSR-2 geht ins Formatierungsdetail und hält fest beispielsweise fest, wie Klammern auszurichten sind:

ClassName
{
    function methodName()
    {
        if (true) {
            functionName();
        } else {
            functionName($arg1, $arg2);
        }
    }
}

Zudem wird genau beschrieben, was etwa passiert, wenn z.B. eine Methodendefinition die maximale Zeilenlänge von 120 überschreitet.

ClassName
{
    function tooLongMethodName(
        $one,
        $argument,
        $per,
        $line
    ) {
        // ...
    }
}

Klar formuliert und umfangreich

Die von mir angesprochenen Details sind lediglich Ausschnitte. Das Projekt scheint noch in Bewegung zu sein, dennoch wirken die Vorgaben sehr durchdacht und auch für die meisten Spezialfälle gerüstet. Durch die vielen Beispiele lässt sich der Stil auch ohne langes Lesen einfach adaptieren. Jeder PHP-Entwickler sollte mal einen Blick darauf werfen.

]]>
https://sgaul.de/2012/09/29/php-coding-guidelines-php-framework-interop-group/feed/ 1
Referenzen bei Problemen mit großen Datenmengen https://sgaul.de/2012/04/21/referenzen-bei-problemen-mit-grosen-datenmengen/ Sat, 21 Apr 2012 11:21:58 +0000 https://sgaul.de/?p=1141 In einem größeren PHP-Projekt hatte ich kürzlich das Problem, dass große Teile der Datenbanken in Arrays geschoben wurden um von dort aus weiterverarbeitet zu werden. Dies ist generell kein schöner Ansatz, war in der besagten Situation aber nicht mehr zu ändern. Ein Kollege kam auf die rettende Idee, die ich hier kurz notieren möchte, so dass ich sie nicht vergesse.

Der Speicherfresser: Array zurückgeben

function getAllTableRows() {
  // ...
  return $allRows;
}
$allRows = getAllTableRows();

Dieser Ansatz führte nun leider regelmäßig dazu, dass PHP mit einer Speicherfehlermeldung abbrach.

Der sparsame Ansatz: Array als Referenzparameter

function getAllTableRows(&$allRows) {
  // alle Werte in $allRows schreiben
}
$allRows = array();
getAllTableRows($allRows);

Fast schon traurig, dass das für PHP so einen Unterschied macht. Ich vermute, dass das an PHPs Eigenheit liegt, mehr auf Werten als auf Referenzen zu arbeiten. Ironischerweise behauptet das PHP-Manual an ähnlicher Stelle, der Kern sei intelligent genug, dies selbst zu optimieren, zumindest was Rückgaben angeht.

Mangels ausreichend großer Beispiel konnte ich den folgenden Ansatz nicht testen:

function &getAllTableRows() {
  // ...
  return $allRows;
}
$allRows =& getAllTableRows();
]]>
PHP: echo gegen print; ==, === oder switch? https://sgaul.de/2012/02/18/php-echo-gegen-print-oder-switch/ https://sgaul.de/2012/02/18/php-echo-gegen-print-oder-switch/#comments Sat, 18 Feb 2012 11:11:15 +0000 https://sgaul.de/?p=1042 PHP: echo gegen print; ==, === oder switch? weiterlesen]]> Eine sehr interessante für alle PHP-Entwickler: The PHP Benchmark testet typische PHP-Code-Schnipsel, vergleicht ihre Geschwindigkeit und räumt dabei mit dem einen oder anderen Vorurteil auf.

$tmp[] = 'aaaaaaaaaaaaaaaaaaaa'; // 195 µs
$tmp[] = "aaaaaaaaaaaaaaaaaaaa"; // 193 µs

Ja, die Lehrbücher müssen neu geschrieben werden. Wie oft hat man nicht schon gehört und gelesen, dass das einfache Anführungszeichen ja soviel schneller ist, weil es sich selbst nicht auf enthaltene Variablen überprüfen muss. Klingt ja soweit auch schlüssig… Chris Vincent hingegen hat einfach mal einen Test gemacht. Er fand heraus, dass es ziemlich egal ist, welche Variante man nimmt.

Und genau auf diese Weise klärt die Seite viele Fragen, die man sich vielleicht noch nie gestellt hat. Einige überraschen, andere bestätigen was man schon immer gedacht hat:

  • === ist schneller als ==
  • Switch und If-Elseif-Else-Schleifen unterscheiden sich nicht
  • Operationen im Schleifenkopf sind unfassbar schlecht, z.B. for($x=0; $x = sizeof($array); $x++)
  • Noch ein Klassiker widerlegt: echo 'aa'.'aa' ist sehr viel schneller als echo 'aa','aa'

Aber all das kann die Seite selbst sehr viel besser darstellen und erklären. Hier sollte jeder PHP-Entwickler einmal drübergucken.

Links

]]>
https://sgaul.de/2012/02/18/php-echo-gegen-print-oder-switch/feed/ 11
Reguläre Ausdrücke online testen: Reghex https://sgaul.de/2012/01/05/regulare-ausdrucke-online-testen-reghex/ https://sgaul.de/2012/01/05/regulare-ausdrucke-online-testen-reghex/#comments Thu, 05 Jan 2012 12:50:24 +0000 https://sgaul.de/?p=869 Vor einigen Wochen stolperten wir während einer Vorlesung über das Problem, ein schnelles und einfaches Testwerkzeug für reguläre Ausdrücke unter Linux zu finden. Schnell wurde uns klar, dass man einen solchen Dienst sehr gut als Webanwendung realisieren könnte. Als wir uns dann im Zuge einer anderen Vorlesung mit einem Javascriptprojekt beschäftigen sollten, war „Reghex“ geboren…

Der Name Reghex

Der Name des Tools war eine recht spontane Idee: Ein einfaches Wortspiel aus Regular Expressions bzw. Regex und einer Hexe (die Anwendung ist schließlich zauberhaft gut) formte zunächst die Reghexe, was sich dann später noch auf Reghex verkürzte. Wir haben sogar verschiedene Schreibweisen zu bieten: Die Seite selbst spricht von „reg[h]?ex“, im Code heißt es „RegHex“. Um es nicht so eindeutig zu lassen, habe ich mich hier für das typografisch korrekte Reghex entschieden.

Reguläre Ausdrücke testen

Bei Reghex kann man einen regulären Ausdruck und einen oder mehrere Teststrings eingeben. In Echtzeit prüft die Anwendung nun, ob der reguläre Ausdruck auf die Teststrings passt. Diese werden entsprechend farbig unterlegt: Rot passt nicht, grün wird durch den Ausdrück abgedeckt.

Für die Ausdrücke lassen sich die üblichen Optionen wie „i“ für die Beachtung von Groß- und Kleinschreibung oder „m“ für mehrzeilige Tests einfach über eine Liste auswählen.

Reguläre Ausdrücke für Javascript, PHP und Java

Ein besonderes Highlight ist die Umschaltbarkeit des Regex-Parsers. Neben regulären Ausdrücken, wie sie in Javascript verwendet werden, unterstützt die Anwendung auch die Dialekte, die in PHP und Java zur Verfügung stehen. Weitere Sprachunterstützungen sind hierbei einfach zu realisieren und auch geplant.

Open Source und fast nur Javascript

Die Webanwendung braucht fast nur Javascript, um ihren Dienst zu verrichten. Lediglich für die Dialekte von PHP oder Java wird der Server mittels Ajax bemüht. Hierbei wird eine PHP-Schnittstelle genutzt, welche die Anfrage an ein Programm der entsprechenden Sprache weiterleitet und das Ergebnis im JSON-Format zurück schickt.

Das Projekt mitsamt Quellcode liegt bei Github und kann somit von jedermann eingesehen und genutzt werden. Zwar ist die Entwicklung noch nicht abgeschlossen, generell sollte das Tool aber nutzbar sein.

Links

]]>
https://sgaul.de/2012/01/05/regulare-ausdrucke-online-testen-reghex/feed/ 4
Feedback-System Tweedback für Präsentationen https://sgaul.de/2011/11/05/feedback-system-tweedback/ https://sgaul.de/2011/11/05/feedback-system-tweedback/#comments Sat, 05 Nov 2011 13:54:57 +0000 https://sgaul.de/?p=678 Seit ein paar Tagen haben Georg und ich die Arbeit an unserem Studienprojekt „Tweedback“ abgeschlossen. Ziel war es, eine Anwendung zu schreiben, mit welcher der Zuhörer während einer Vorlesung oder eines Vortrags Rückmeldungen an den Dozenten schicken kann. Dies sollte plattformunabhängig, ohne größere Ablenkung für den Vortragenden und in Echtzeit umgesetzt werden. Die nun abgeschlossene Umsetzung, deren Name eine Mischung aus to tweet (zwitschern) und Feedback ist, setzt diese Anforderungen um und konzentriert sich vor allem auf eine intuitive graphische Oberfläche, die im Browser läuft.

Server: PHP und MySQL

Die Serverseite, welche Tweedback mit Ajaxdaten versorgt, wurde recht geradlinig und ohne Framework umgesetzt. Sie besticht vor allem durch ihre effiziente Nutzung der Datenbankperformance. Viele, teils recht komplexe Anfragen, wurden fast ausschließlich in einzelne Querys verpackt.

Hierbei hat sich aber vor allem ein Problem in den Vordergrund gestellt: Querys, die statt auf feste Tabellen wieder nur auf wiederum verschachtelte Subquerys zugreifen, sind schwer zu entwerfen und noch schwerer zu warten. Ein Quereinsteiger, der sich mit dem Code beschäftigen will, hat es hier sehr schwer. Hinzu kommt, dass ein Query meist als einzelne, abgeschlossene Aktion angesehen wird und daher im inneren schlecht oder gar nicht dokumentiert ist.

Hier sollten wir künftig mehr auf die Werkzeuge der Datenbanken eingehen und z.B. verschiedene Views und UDFs (User Defined Functions) nutzen.

GUI: J-Query Mobile

Die graphische Oberfläche läuft im Browser und basiert auf der dritten Beta von J-Query Mobile. Dieses befindet sich, wie der Name vermuten lässt, selbst noch in Entwicklung. Ärger gab es bei der Entwicklung dennoch nicht, JQM hat sich als zuverlässiges und intuitives Framework bewiesen.

Grundsätzlich ist eine J-Query-Mobile-Rohling auf Kleinstgeräte ausgerichtet. Um auch größere Displays angemessen bedienen zu können, wurde mit Hilfe von Media-Querys des CSS-3-„Standards“ ein sich selbst anpassendes Layout („Responsive Webdesign“) gewählt.

Alles andere folgt streng den Empfehlungen und Vorgaben des Frameworks.

Funktionsweise von Tweedback

Der Dozent

Der Dozent muss vor seinem Vortrag ein Veranstaltung anlegen, in welcher das Feedback gesammelt wird. Wichtig ist hier vor allem der Eventcode, welcher den Zuhörern mitgeteilt wird um am Event teilzunehmen und Rückmeldungen zu geben.

Anschließend befindet sich der Dozent in der Dozentenansicht der Veranstaltung, in welcher aufgekommene Fragen und Warnungen wie „zu schnell“ oder „unklar“ angezeigt werden. Diese Ansicht ähnelt sehr der normalen Veranstaltungsansicht eines Zuhörers, welche gleich noch gezeigt wird.

Nach einer gewissen Zeit werden Events geschlossen und der Dozent erhält einen Abschlussbericht, in welcher die gestellten Fragen aufgelistet und das Nutzerempfinden bezüglich Vortragsgeschwindigkeit und Verständlichkeit in Graphen dargestellt wird.

Der Zuhörer

Der Zuhörer wird nach dem Aufruf von Tweedback folgendermaßen begrüßt:

Wie bereits erwähnt wurde, muss hier der Eventcode eingetragen werden, der vom Dozenten festgelegt wurde. Zusätzlich hat der Zuhörer die Möglichkeit, seinen Namen oder ein Pseudonym einzugeben. Diese Möglichkeit findet sich im persönlichen Einstellungsmenü, welches über die Schaltfläche oben rechts erreichbar ist.

Die Tweedback-Teilnahme ist vollkommen anonym möglich. Ein wesentliches Ziel war ein Webdienst, der den Nutzer zu keiner Anmeldung oder ähnlichen persönlichen Angaben zwingt.

Nach der Eingabe des Eventcodes befindet sich der Zuhörer in der Veranstaltungsansicht. Hier kann dieser bestehende Fragen sehen und diese durch einen Klick auf den orangefarbenen Bereich unterstützen. So werden wirklich wichtige Fragen immer größer dargestellt.

Um die Fragen möglichst knapp zu halten, kann der Nutzer diese einer Kategorie wie Beispiel oder Erklärung zuordnen, um sich bei der eigentlichen Frage auf das zugehörige Stichwort beschränken zu können. Dies ist auf dem obigen Screenshot rechts unten erkennbar, wo neue Fragen erstellt werden können.

Ein weiteres Konzept sind die Schaltflächen Verständnis und Vortragsgeschwindigkeit: Hier kann der Nutzer sein derzeitiges Empfinden durch einen einfachen Buttondruck ausdrücken. Der Dozent erhält die Zusammenfassung dieser Angaben dann als Information (oder ab einer gewissen Stufe als Warnung).

Weitere Entwicklung

Derzeit ist von unserer Seite keine Weiterentwicklung von Tweedback geplant. Da wir mit dem Erreichten jedoch sehr zufrieden sind, bleibt die Hoffnung, dass das System zumindest genutzt oder im Zuge anderen Studienarbeiten erweitert wird.

Der Code ist einfach und verständlich, zudem gibt es eine ausführliche Entwicklerdokumentation. Somit ist auch eine Veröffentlichung des Codes etwa unter der GPL denkbar und von den Entwicklern generell auch vorgesehen. Da auch der betreuende Lehrstuhl über das weitere Vorgehen nachdenkt, wollen wir diese Entscheidung nicht voreilig im Alleingang treffen. Ein Termin für eine mögliche Veröffentlichung ist daher noch nicht abzusehen.

]]>
https://sgaul.de/2011/11/05/feedback-system-tweedback/feed/ 6
Kleine PHP-Helfer für CSS-Animations https://sgaul.de/2011/10/23/kleine-php-helfer-fur-css-animations/ Sun, 23 Oct 2011 15:52:55 +0000 https://sgaul.de/?p=641 CSS-Animationen sind eine leicht verständliche Art, aufwändige und hübsche Animationen zu erstellen. Das Hauptproblem dabei sind vor allem die ständig benötigten Browser-Präfixe, die aufgrund der fehlenden Standardisierung noch immer nötig sind. Ich habe für diesen Zweck zwei PHP-Funktionen geschrieben, welche die verschiedenen Varianten automatisch erstellen.

Zunächst mal die kleine Animation, die ich im Laufe des Tages erstellt habe. Sie soll hoffentlich bald auf der neuen MGVmedia-Seite erklären, was es mit „Responsive Webdesign“ auf sich hat:

KFZ-Meier GmbH
Startseite
Über uns
Leistungsübersicht
Preise
Aktuelles
Willkommen bei KFZ-Meier

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum. Praesent mauris. Fusce nec tellus sed augue semper porta. Mauris massa. Vestibulum lacinia arcu eget nulla. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Curabitur sodales ligula in libero.

Sed dignissim lacinia nunc. Curabitur tortor. Pellentesque nibh. Aenean quam. In scelerisque sem at dolor. Maecenas mattis. Sed convallis tristique sem. Proin ut ligula vel nunc egestas porttitor. Morbi lectus risus, iaculis vel, suscipit quis, luctus non, massa. Fusce ac turpis quis ligula lacinia aliquet. Mauris ipsum. Nulla metus metus, ullamcorper vel, tincidunt sed, euismod in, nibh. Quisque volutpat condimentum velit.

Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nam nec ante. Sed lacinia, urna non tincidunt mattis, tortor neque adipiscing diam, a cursus ipsum ante quis turpis. Nulla facilisi. Ut fringilla. Suspendisse potenti. Nunc feugiat mi a tellus consequat imperdiet. Vestibulum sapien. Proin quam. Etiam ultrices. Suspendisse in justo eu magna luctus suscipit. Sed lectus. Integer euismod lacus luctus magna.

Zumindest in Chrome sieht das alles sehr schön flüssig aus und benötigt nicht eine Zeile Javascript.

Bisher habe ich nur zwei Funktionen benötigt: Eine um Keyframes zu erstellen, die andere um eine Animation an HTML-Elemente mittels animation-name, animation-duration, animation-iteration-count und animation-direction zu binden.

Um zu verstehen, was das alles bedeutet, gibt es viele Tutorials. Für den Anfang kann ich CSS3 Animations von Rich Bradshaw empfehlen.

Wenn man dann weiß, wohin man will, sind die beiden Funktionen überschaubar und selbsterklärend:

]]>
MVC-Anwendungen mit Flow 3 und ein Ausblick auf das nächste Typo 3 https://sgaul.de/2011/10/09/mvc-anwendungen-mit-flow-3-und-ein-ausblick-auf-das-nachste-typo-3/ Sun, 09 Oct 2011 17:31:15 +0000 https://sgaul.de/?p=567 Auf der gerade tagenden „T3CON11“ kommen die Typo-3-Entwickler zusammen und beraten über die Zukunft. Nebenbei zeigen Sie aber auch, was sie schon haben. Nachdem ich in den letzten Monaten doch eher negative Eindrücke von Typo 3 sammeln musste, machen das grundlegende Framework Flow 3 und die ersten Bilder von Typo 3 5 einen sehr guten Eindruck.

Model, View und Controller mit Flow 3

Das MVC-Framework Flow 3 soll noch im Oktober diesen Jahres erscheinen. Ich habe daher mal einen kurzen Blick darauf geworfen und bin über einige tolle Sachen gestolpert, die ich sehr überzeugend finde.

Kommandozeile

In Flow 3 erzeugt man Webapplikationen weitgehend über die Kommandozeile. Die nötigen Dateistrukturen und wesentliche Inhalte von Controllern, Models, Repositorys und Templates werden bereits erzeugt und müssen lediglich angepasst werden. So erzeugt man für einen Blogpost beispielsweise ein recht einfaches Grundgerüst, indem man

./flow3 kickstart:actioncontroller
  --generate-actions
  --generate-related
  TYPO3.Blog Post

im Projektverzeichnis ausführt. Dies erzeugt einen neuen Controller „PostController“ (ein Actioncontroller ist den Zugriff durch den Browser; man kann auch Commandcontoller für die Kommandozeile erstellen). Hierbei werden gleich wesentliche Aktionen wie Hinzufügen und ändern erzeugt (–generate-actions). Die Option –generate-related erzeugt automatisch alles, was noch fehlt: Dies ist hier ggf. das Paket TYPO3.Blog (vorletzter Paramter) und das Model Post, welches passend zum Controller existieren muss. Der letzte Parameter benennt den Controller (ohne das Suffix Controller) und impliziert eine Verbindung zu einem entsprechenden Model.

All das nimmt einem sehr viel Dateiverwaltung und Code-Erzeugung ab. Einen weiteren schönen Einblick in die Kommandozeilenfähigkeiten bekommt man durch das folgende Video:

[vimeo clip_id=“28987131″]

Persistenz an Bord

Eine weitere schöne Sache ist die Verwendung von Doctrine 2: Statt sich hier etwas neues zu überlegen, setzt man auf diese bewährte Lösung, um Objekte ohne viel Aufwand auf Datenbanken zu mappen. Hierfür ist etwas mehr Aufwand im Model nötig. Alle Attribute müssen mittels PHP-Doc typisiert werden:

/**
 * The name
 * @var string
 */
protected $name;

Anschließend kann man diese Models aber mittels eines einfachen Kommandozeilenaufrufs in der Datenbank erzeugen

./flow3 doctrine:migrate

oder später nach Änderungen aktualisieren:

./flow3 doctrine:update

Doctrine ist mittlerweile sehr gut erprobt und bietet unzählige Möglichkeiten.

Wirkt überzeugend – aber was ist mit der Performance?

Was ich bisher gesehen habe, finde ich absolut intuitiv und auch einfacher, als ich es von anderen Frameworks kenne.

Das einzige, wovor ich auf lange Sicht doch ein wenig Angst habe, ist, dass die Entwickler die Performance ähnlich wie bei bisherigen Typo-3-Entwicklungen zu weit hinten anstellen. Schon hier auf dem eigenen Rechner dauerte es manchmal doch erschreckend lange, bis eine Seite vollständig erzeugt wurde. Allerdings war dies meist nur beim ersten Aufruf zu beobachten. Ich denke daher, dass Caching hier über die Geschwindigkeitsprobleme hinweg helfen soll.

Wer selber sehen möchte, was Flow 3 kann, dem sei das Quick-Start-Tutorial ans Herz gelegt.

Typo 3 5

Das neue Typo 3 wird wohl erst Ende nächsten Jahres erscheinen, dennoch zeigte T3N.de in einem Artikel mit Video ein paar schöne erste Eindrücke (das Interview davor ist… merkwürdig, aber wenigstens kurz):

[youtube clip_id=“ihOVcmo6OOI“]

Das Flow-3-Logo stammt von http://flow3.typo3.org/ und ist Eigentum der Typo-3-Association.
5Y593YT8QPDQ
]]>