Es gibt ja eine ganze Fülle an PHP Frameworks und jedes wartet mit seinen ganz eigenen Vor- und Nachteilen auf. Für rsslounge habe ich das Zend Framework gewählt und bereue diese Entscheidung nicht, denn es bietet eine Vielzahl an sehr nützlichen Funktionen und sorgt für eine saubere und aufgeräumte Struktur. Ein gravierender Nachteil ist allerdings die Größe und die hohe Anzahl an Dateien, die das Framework mit sich bringt. Für ein Webprogramm, das anderen zur Verfügung gestellt werden soll und die dies dann auf einen eigenen Server hochladen sollen, ist das ziemlich lästig. Hinzu kommt doch eine gewisse Komplexität, wie man beispielsweise am Cachingverhalten sieht.
Für mein neuestes Projekt wollte ich etwas einfaches, das eine saubere Struktur ermöglicht, aber nicht mit tausenden Dateien und riesigem Funktionsumfang daher kommt. Da ich schon vor einiger Zeit auf das PHP Fat-Free Framework gestoßen bin, und es einen sehr guten ersten Eindruck hinterlassen hat, habe ich mich entschlossen mir das Framework etwas genauer anzusehen. Sehr schnell war klar, dass es perfekt geeignet ist.
Features
Das PHP Fat-Free Framework verfügt über alle wichtigen Features, die mittlerweile so Standard sind:
- Routing Mechanismus (sehr einfach auch im MVC Style realisierbar)
- Datenbankzugriff (sogar mit einem mini ORM und einem MongoDB mapper)
- Template Engine
- Schnick Schnack wie: On-the-fly JavaScript/CSS compressor, CAPTCHA generator, OpenID, usw.
Die Template Engine konnte mich nicht ganz überzeugen, hier habe ich selbst Hand angelegt, eine kleine Hilfsklasse geschrieben und auf den in PHP integrierten Syntax zurückgegriffen. Ansonsten konnte das Framework in voller Linie überzeugen. Selbst eine Migration um eine Major Version funktionierte mit sehr geringem Aufwand, was mich doch sehr überrascht hat.
Anforderungen
Das Framework selbst ist sehr klein und wird mit einer einzigen 55KB großen PHP Datei beworben. Ganz richtig ist das aber nicht: Der Datenbankzugriff und weitere Funktionen wurden in Plugins ausgelagert. Nimmt man den gesamten Funktionsumfang, so hat man 27 Dateien mit einer gesamten Größe von 223 KB, was natürlich immernoch sehr schlank ist.
Ein bestimmter Server ist nicht erforderlich und das Manual bietet Anleitungen für das Umschreiben der URLs für den Apache Webserver, lighttpd und nginx. Einziger Wermutstropfen: Es benötigt mindestens PHP 5.3, was für einen simplen RSS Reader, der möglichst überall laufen soll eine doch recht hohe Anforderung ist. Gleichzeitig liefert diese Anforderung auch zahlreiche Vorteile, wie beispielsweise schlankeren Code durch Lambda-Funktionen oder der Einsatz von Namespaces.
F3 in der Praxis
Warum mir das Framework so zusagt, sieht man schnell, wenn man ein paar Zeilen Code sieht. Ein Beispiel ist das Routing:
require __DIR__.'/libs/f3/base.php';
F3::set('AUTOLOAD','libs/f3/|libs/|libs/WideImage/|models/|libs/twitteroauth|libs/FeedWriter');
F3::route('GET /', 'controllers\Index->home');
F3::route('GET /mark/@item', 'controllers\Items->mark');
F3::route('POST /source', 'controllers\Sources->add');
F3::route('PUT /source/@id', 'controllers\Sources->write');
Mit der ersten Zeile wird das Framework eingebunden. Mit der zweiten wird ein Autoloader registriert und die entsprechenden Inlcude-Pfade gesetzt (das Pipe Symbol | dient hier als Trennzeichen. Dann werden die Routen definiert. Das Fat-Free Framework unterstützt hierbei auch den REST Ansatz und einzelne URLs können mehrfach, je nach Art des HTTP Requests belegt werden. In diesem Beispiel wird bei einem GET Aufruf der URL / die Klasse \controllers\Index instaziiert und dort die Methode home aufgerufen.
Ähnlich einfach ist der Datenbankzugriff:
F3::set('DB',
new DB(
'mysql:host=localhost;port=3306;dbname=mysqldb',
'admin',
'p455w0rD'
)
);
DB::sql('SELECT brandName FROM wherever');
foreach (F3::get('DB->result') as $row) {
// whatever you want to do with $row
}
Um SQL Injection vorzubeugen, werden natürlich auch parametrisierte Queries unterstützt.
Ähnlich simpel ist das gesamte Framework gestrickt und meist bietet es verschiedene Wege etwas umzusetzen. Besonders elegant finde ich das Routing mit Lambda Funktionen:
F3::route('GET /about',
function() {
echo 'No subliminal messages here...';
}
);
Lizenz und Downloads
Das Framework steht unter der GPLv3 Lizenz zur Verfügung, es wird aber auch eine kostenpflichtige, kommerzielle Lizenz angeboten. Das finde ich das einzige Manko, hier bietet beispielsweise das Zend Framework unter der MIT Lizenz sehr viel mehr Möglichkeiten.
Zur Projektseite des PHP Fat-Free Frameworks: http://fatfree.sourceforge.net/
Meine liebste Jahreszeit, der Herbst ist nun da, was natürlich zwangsläufig zu neuen Fotos führt. Natürlich bin ich auch sonst sehr aktiv, aber die Bilder vom Herbst werde ich wieder online stellen. Auch sonst bin ich gut unterwegs, auch wenn hier nicht allzu viel passiert. Mein neuer RSS Reader ist nun fertig und schon seit geraumer Zeit in der Beta Phase. Ich muss lediglich noch die Webseite dafür gestalten, dann werde ich selfoss (so heißt das neue, PHP basierte Online-Tool) wie gewohnt unter GPL veröffentlichen.
Auf deviantArt hat man nun auch mein altes Bild autumn rainbow wiederentdeckt und als daily deviation geehrt, was natürlich sehr schön ist, wenn auch das Bild schon 6 Jahre dort zu finden ist.
Ein paar ältere Herbstbilder von mir findet ihr hier: http://blog.aditu.de/2008/10/04/herbst/
Zwei kurze News habe ich zu vermelden und gebe damit gleichzeitig hier ein Lebenszeichen von mir.
- Hiacynta Jelen hat in ihrem Blog ein Interview mit mir veröffentlicht. Vielen Dank an dieser Stelle von mir, es freut mich sehr, dass sie mich für den Start ihrer neuen Interview-Serie ausgewählt hat.
- Meine Prints gibt es nun auch bei Artflakes. Natürlich kann man meine Bilder auch auf deviantart.com erstehen oder direkt bei mir anfragen.
Modernizr ist mittlerweile kein Geheimtipp mehr, nachdem ich es aber das erste Mal einsetze und das Skript überzeugen konnte, will ich es vorstellen.
Das Prinzip von diesem JavaScript Skript ist recht simpel: Wo es geht, soll man aufgrund von Kompatibilität nicht auf neue Features von HTML5 und CSS3 verzichten. Aber es sollen auch nicht Besucher ausgeschlossen werden, die nicht mit den neuesten Browser-Versionen ausgestattet sind (dabei denke ich nicht an IE6 Benutzer, sondern auch an alternative Browser; accessibility ist hier ein Thema). Die Idee ist also, dass Benutzer, welche mit aktueller Software eine Seite besuchen, alle Effekte und Funktionen zu sehen bekommen, wohingegen bei fehlenden Features einfach auf eine Fallbacklösung zurückgeschalten wird.
Ein Beispiel aus meinem aktuellen Projekt: Besitzt der Benutzer ein Touch-Device, dann werden zusätzliche Elemente geladen, wodurch ein Touch-Display besser unterstützt wird.
Dabei kann man sehr einfach feststellen, welche Features unterstützt werden. Modernizr setzt beim Aufruf der Seite für das html Element CSS Klassen, die beschreiben, was möglich ist und was nicht:

Zusätzlich steht auch ein JavaScript Objekt zur Verfügung. Aus meiner Sicht eine feine Sache. Manchmal kann man durchaus auf die neuen Features verzichten und dann ist Modernizr eine ganz gute Lösung.
Mit dem Boom der Smartphones und Tablet kommt man beim Entwickeln von Webseiten natürlich mittlerweile nicht mehr um das Thema herum. Ein Problem, das dabei immer wieder auftaucht, ist das Scrollen innerhalb von Elementen fester Größe.
Eine super Lösung, die sowohl unter iOS als auch Android läuft, ist iScroll. Auf meinem Android Phone läuft es zwar nicht besonders smooth (scheinbar ist es doch etwas anspruchsvoller, was die Ressourcen angeht), aber auf dem iPad funktioniert es super. Vielleicht also ganz nützlich für den ein oder anderen Leser von diesem Blog: zur Webseite von iScroll
Es gibt mal wieder seit langer Zeit ein Gewinnspiel, wo ich gerne mitmache und auch mit meinem Blog werbe. Es handelt sich um Cashys sechsten (Blog-)Geburtstag. Happy Birthday von mir an Cashy und seinem Blog, den ich ganz gerne lese, weil seine Artikel über Gadgets und nerdigen Krimskrams immer recht authentisch aus Consumer-Sicht geschrieben sind.
Nach langer Zeit ist es nun mal wieder so weit: eine neue Version von rsslounge ist verfügbar. Es gibt einige Änderungen und Optimierungen. Neue Features und größere Umbauten sind immer eine Frage der Zeit. Ich habe ja einiges auf der Wunschliste und auch im Forum haben einige Wünsche geäußert. Besonders interessant ist eine Funktion, so dass aus den gesammelten Feedbeiträgen wieder ein RSS Feed erzeugt wird. Das kann dann an beliebiger Stelle (z.B. in einer Android RSS App) eingebunden werden.
An dieser Stelle vielen Dank an alle, die mich mit Sprachdateien versorgt haben und mir Feedback geben. Sofern ich die Zeit finde, versuche ich sinnvolle Neuerungen einzubauen. Die Performance zu optimieren (besonders das erstmalige Laden von rsslounge zu beschleunigen) war im aktuellen Update mein primäres Anliegen. Die Änderungsliste ist im Changelog zu finden.
Download: rsslounge 1.7




