Gerade bemerkte ich eine Lustige Angewohnheit der Auth-Component von CakePHP.
Nehmen wir an wir haben eine Userregistration, also mit Feldern wie Username, Password, E-Mail usw. nun trägt der User alles richtig ein, nur bei der E-Mail vertippt er sich bzw. trägt dort keine valide Mailadresse ein. Da ich natürlich in CakePHP auf das Feld eine ValidationRule gelegt habe die besagt das in das Feld nur valide Mailadressen eingetragen werden dürfen schlägt Cake Alarm und quittiert den Versuch mit einer Fehlermeldung.
Da Cake schlau ist füllt es alle Felder automatisch mit den zuvor eingegebenen Werten wieder aus, damit man auch wirklich nur das fehlerhafte Feld neu bestücken muss. Das lustige ist jedoch das die Auth-Component in das Passwort-Feld bereits den MD5-Hash als value übergibt. Merkt man das nicht und korrigiert nur das eigentlich fehlerhafte Feld, so wird der MD5-Hash nochmal in einen MD5-Hash verwandelt und man kann sich somit nicht mit dem angelegten Account einloggen. Für mich ist das ein klarer Bug, denn die Auth-Component sollte natürlich prüfen ob die Validierung einen Alarm ausgelöst hat, und nur falls alles Ok ist sollte der Wert in MD5 umgewandelt werden.
Im IRC-Channel zu CakePHP wurde mir nun gesagt ich solle doch einfach das Passwordfeld generell leer halten, denn das sei schließlich vollkommen normal das man bei einem Validierungsfehler auch die Passwörter nocheinmal eintragen müsse. Ja klar, das machen zwar einige Portale so, doch mich persönlich nervt das einfach gewaltig.
Sicherlich ist es unsicher das Passwort in das value zu setzen, doch ist sowas doch bei einer Adminoberfläche die nur 2-3 Personen nutzen zu vernachlässigen. Warum wird da ein offensichtlicher Bug also so bekämpft?
Eine Lösung habe ich dafür leider nicht, außer dem Feld dauerhaft ein value="" mit auf den Weg zu geben, damit eben das Feld bei einer Falscheingabe statt dem MD5-Hash wenigsten nichts beinhaltet und somit wieder Alarm schlägt falls man es versehentlich leer lässt.
Wie seht ihr das? Sollte man ein Passwordfeld bei einer Fehlerausgabe wieder mit dem Eingabewert befüllen oder den Nutzer nochmals dazu auffordern sein Passwort einzugeben, obwohl es ja eigentlich die Validierung absolviert hat?
Da ich leider nirgendwo ein fertiges Suchplugin für das “neue” CakePHP-Cookbook fand, bastelte ich mir schnell selber eins zusammen.
Dabei entstanden zwei einfache Suchplugins für die Dokumentation von CakePHP 1.1 und CakePHP 1.2. Im Anschluss wollte ich die beiden XML-Dateien über das Mozilla Add-Ons Portal anderen Entwicklern zugänglich machen, doch Pustekuchen. Ich kann zwar neue Plugins hochladen, aber darf nur Plugins, Wörterbücher, Themes oder Übersetzungen hochladen.
Komisch, oder gibt es da evtl. für die Suchwerkzeuge ein eigenes Formular das irgendwo weit weit versteckt untergebracht wurde?
Naja, solange ich die beiden Dateien nicht direkt bei Mozilla unterbringen darf bekommt der interessierte CakePHP-Entwickler sie eben hier.
Da meine Dateien jetzt nicht auf den Mozilla-Servern liegen, fragt der Firefox auch nicht selber ob man die Suchmaschine direkt hinzufügen will. Daher muss man aktuell noch manuell die jeweilige XML-Datei in den Ordner searchplugins im Firefox-Ordner kopieren. Nach einem Neustart des Browsers solltet ihr dann direkt aus der integrierten Suche heraus das Cookbook durchsuchen können.
Zu meinen reinen Freelancer-Zeiten arbeitete ich ja einige Zeit regelmäßig mit dem MVC-Framework CakePHP, seit Ende letzten Jahres jedoch leider wieder etwas weniger. Das lag zum einen daran das sich meine Aufgabengebiete etwas verschoben haben, zum anderen jedoch an der bis Dato wirklich bescheidenen Dokumentation des Frameworks.
Es gab zwar eine grobe API in der man sich im Notfall z.B. mal ansehen konnte wie einer der Standardhelper überhaupt arbeitet und welche Variablen man einer Funktion überhaupt übergeben kann, um damit dann sein Script zu debuggen, doch am Ende führte dies zu etlichen Stunden von Try & Error.
Nun habe ich mich mal wieder an ein kleines Projekt gewagt was wieder mit CakePHP 1.2 umgesetzt wird, und ich bin begeistert was sich in der Dokumentation so alles getan hat. Mit dem Cookbook kann man endlich richtig arbeiten! Alles ist ordentlich gegliedert und auch die Suche spuckt endlich passable Ergebnisse aus. So habe ich mich z.B. vorher nie an die Auth-Component heran gewagt, einfach weil ich kaum etwas über sie wusste.
In der neuen Dokumentation wird einem nun endlich alles erklärt was man braucht. Es werden direkte Codebeispiele und Vorschläge ausgegeben, so das es wieder richtig Spaß macht sich an neuen Cake-Entdeckungen zu versuchen.
Wer sich also bisher aufgrund der noch schlechten Dokumentation mit CakePHP nicht anfreunden konnte, dem sei ein zweiter Versuch ans Herz gelegt!
Man merkt das Sommerloch auch hier irgendwie, da ich ja auch nicht der tausendste sein möchte der über irgendein ausgelutschtes Thema schreibt sieht es hier aktuell leider etwas leer aus, aber das wird wieder, versprochen!
Solange dann also doch etwas Grundrauschen:
Meine beiden Lieblingsframeworks erfahren in den nächsten Tagen einige Updates. Das betrifft zum einen das PHP-MVC-Framework CakePHP als auch das JavaScript-Framework jQuery.
In der Bakery kam kürzlich die Ankündigung das die erste Stable-Version von CakePHP 1.2 nun in den Startlöchern steht. Zeitgleich wurde dazu aufgefordert sich doch am Testing zu beteiligen um die Entwicklung noch weiter voran zu treiben.
Ich verfolge die Entwicklung von CakePHP nun seit über einem Jahr, fast täglich wird dabei die SVN-Version mit Updates versorgt, auch wenn leider nur selten ein Export in die öffentliche Version stattfinden, so machen die Entwickler durchaus ihre Hausaufgaben, was mich doch stark hoffen lässt das CakePHP 1.2 Stable ein großer Erfolg sein wird.
Was jQuery angeht, so hat der Erfinder John Resig vor ein paar Tagen eine Video-Präsentation veröffentlicht die den alles erklärenden Titel What’s Next in jQuery and JavaScript? trägt.
Dabei wurde unter anderem auch der Plan für die nächsten Versionen des beliebten Frameworks veröffentlicht. So soll bereits in einigen Tagen jQuery 1.2.4 den Weg zu uns finden.
jQuery 1.2.4 hat demnach als Kernpunkte zwei wesentliche Verbesserungen:
- Das Plugin dimensions.js wird direkt in den Core integriert.
- Weitere Performance-Optimierungen
Ob die Integration der dimensions.js so eine gute Idee ist weiß ich gerade nicht, immerhin vergrößert dies abermals die Core-Datei… und gerade jQuery hatte mich damals wegen der minimalen Größe und der grandiosen Plugin-Fähigkeit gereizt. Es mag sein das viele Projekte und auch Plugins die dimensions.js benutzen, dennoch bin ich eher dafür solche Sachen weiterhin Optional zu lassen. Wer jQuery nur für einige kleine Effekte und Funktionen benötigt ärgert sich eh schon über jedes nicht benötigt Kilobyte mehr.
John gibt zudem auch Infos zum nächsten großen Schritt: jQuery 1.4. So soll jQuery 1.4 bereits in diesem Sommer erscheinen und weitere Geschwindigkeitsvorteile mitbringen, nichts weltbewegendes bisher also.
Worauf er in dem Video ebenfalls eingeht ist jQuery UI 1.5, auf das denke ich viele von uns schon gespannt warten. Die Homepage dieses Widget-Pakets wurde übrigens vor kurzem ebenfalls optisch überarbeitet.
Ach nun habe ich schon mehrere male mich daran versucht einen ordentlichen Jahresrückblick für mein 2007 zu verfassen, leider bisher ohne Erfolg. Da kommt man vom hundertsten ins tausende und schweift einfach automatisch zu sehr ab. Eine simple Auflistung der Themen des Jahres wäre auch zu Stumpf, denn dafür gibt ja seit einigen Monaten das Archiv.
Also will ich mich nochmal daran versuchen das Jahr 2007 kurz und knapp Revue passieren zu lassen. Mal sehen obs diesmal was wird :)
Heute war es endlich mal wieder soweit: Sowohl CakePHP 1.1 als auch CakePHP 1.2 wurden in aktuellen Versionen der Öffentlichkeit zugänglich gemacht. Gerade CakePHP 1.2 wurde das letzte mal im Juli aktualisiert, so dass ich schon ins Grübeln kam ob die Entwicklung an der neuen Version denn schon eingeschlafen ist.
Aber nein, es wurden doch einige neue Funktionen in den Core gepackt und was noch viel besser ist: CakePHP 1.2 ist jetzt Pre-Beta. Pre-Beta deshalb, weil es noch nicht alle geplanten Funktionen in die aktuelle Version geschafft haben, sobald die letzten Feature-Tickets dann abgeschlossen sind, was wohl hoffentlich nicht mehr lange dauert, ist CakePHP 1.2 endlich aus dem Alpha-Stadium raus.
Die komplette Meldung zum Thema gibts wie immer in der Bakery.
Wie ich beim Cakebaker gerade lesen konnte, gibt es nun eine erste richtige Dokumentation zur CakePHP 1.2 Alpha.
Bisher konnte man sich bereits mit einer frühen PDF-Version begnügen, doch die jetzt veröffentlichte Version scheint doch um einiges ausführlicher zu sein und ist zudem nicht in einer so unleserlichen Schrift ins Netz gestellt worden.
Aus meiner Sicht ist das ein wichtiger Schritt in Richtung 1.2, denn ohne eine ordentliche Dokumentation fällt einem die Programmierung wirklich etwas schwer, gerade wenn man noch ganz frisch in CakePHP 1.2 ist.
Die Dokumentation ist jedoch leider bei weitem noch nicht komplett und soll daher in der nächsten Zeit ständig erweitert werden.
Update
Leider wurde die Dokumentation fürs offene Netz gesperrt. Den Sinn dahinter kann ich jetzt aufs erste überhaupt nicht deuten. Hoffen wir mal das sie einen guten Grund dazu hatten uns einfach so vor die Tür zu setzen.
Noch ein Update
Gerade im CakePHP-Channel von PHPNut: “That site was not ready to be released to the public. We will make an official announcement when it is ready”. So richtig verstehen will ich das nicht, aber es ist zumindest ein Grund.
Und noch ein Update
Die Doku scheint jetzt wieder Online zu sein. Wer auf Nummer sicher gehen möchte der sollte sich die Doku diesmal wohl lokal abspeichern :)
In der letzten Zeit gab es bei mir immer öfter folgende Situation:
Für eine Cake-Applikation brauchte ich irgendeine tolle Funktionalität, wie z.B. den einfachen Umgang mit GoogleMaps-Daten. So weit so gut, da es für viele Dinge bereits fertige Components und Helper gibt habe ich natürlich direkt in der Bakery nachgesehen und meist auch prompt das gefunden was ich brauchte.
Sowas freut einen natürlich, da somit die Entwicklung wieder einmal schneller voran geht und man sich massiv Zeit einsparen kann. Die Freude hielt bei mir in den letzten Wochen jedoch meist nicht lange an, denn in den Details blinzelte mir oft ein “Version: 1.2.x” zu. Da ich bisher jedoch noch mit CakePHP 1.1 arbeite sind also viele der neuen Helferlein mit meinen Applikationen nicht kompatibel.
Nun ist Cake 1.2 ja immer noch im Alpha-Stadium und sollte daher eigentlich nicht für produktive Applikationen eingesetzt werden, hört man sich jedoch im offiziellen IRC-Channel um, so merkt man recht schnell das bereits ein Großteil der Community auf den 1.2 Zug aufgesprungen ist, bisher wohl ohne größere Probleme.
Ich habe für mich daher nun den Entschluss gefasst kommende Projekte auf der Basis von CakePHP 1.2 aufzusetzen. Meist dauert die Entwicklung einer Applikation eh eine geraume Zeit und ich will daher hoffen das die 1.2 Version bis dahin vielleicht doch schon im Beta-Stadium angelangt ist.
Mich erwarten nun vollkommen neue Möglichkeiten wie z.B. die erweiterten Validierungsmöglichkeiten, endlich keine großen RegEx-Bauten mehr für relativ einfache Validierungs-Regeln.
Über meine Erfahrungen, ob gut ob schlecht, werde ich selbstverständlich berichten, auch wenn das noch eine Weile dauern kann. Derzeit ist eher Akkordarbeit mit Sefrengo angesagt.
Ein paar Wochen liegt der erste Technikwürze-Podcast zum Thema CakePHP nun schon zurück. Wie einige von euch im Podcast eventuell schon gehört haben, haben David und ich uns damals fest vorgenommen noch mindestens eine zweite Folge zum Thema zu produzieren.
Nun fing ich gerade mit dem Script zur Sendung an, dachte mir dann jedoch das es doch eigentlich Blödsinn wäre Themen vorzugeben die am Ende vielleicht gar keinen Interessieren.
Darum meine Frage:
Welche Themen rund um das PHP-Framework CakePHP brennen euch auf der Seele? Womit habt ihr Probleme? Was ist euch noch nicht verständlich oder wollt Ihr einfach ein praktisches Beispiel zu einem bestimmten Thema?
Generell soll die zweite Sendung schon etwas mehr ins Detail gehen und bestimmte Beispiele bzw. Themen aufgreifen. Die erste Sendung war ja eher dazu gedacht, den Hörern einen ersten Eindruck über das Framework zu vermitteln.
Also: Ich würde euch bitten eure Ideen und Fragen einfach als Kommentar an den Artikel anzuhängen. Keine Angst… es gibt keine dummen Fragen, nur dumme Antworten :)
Wie der Cakebaker berichtet hat die Mambo Foundation nun bekannt gegeben, dass die nächste Version der CMS-Software auf CakePHP aufbauen wird.
Mambo ist übrigens der Vorgänger des heutigen Joomla-CMS, was denke ich mittlerweile sehr vielen ein Begriff sein düfte. Mambo legte damals den Grundstein für die Entwicklung des CMS, leider trennten sich jedoch vor ca. 2 Jahren dann die Entwickler und Joomla wurde geboren.
Ich persönlich finde die Entscheidung ein Framework für die nächste Version zu verwenden sehr gut, denn umso leichter dürfte es Cake-Entwicklern später fallen eigene Funktionen und Anpassungen in Mambo zu implementieren.
Aus meiner Sicht sollten diesen Schritt noch viel mehr Projekte gehen. Bisher kocht ja jedes Projekt da mehr oder weniger sein eigenes Süppchen, für Außenstehende ist der Quelltext daher oft mehr als verwirrend. Gerade der MVC-Pattern könnte hier für mehr Ordnung und Struktur sorgen.
Ich für meinen Teil bin gespannt wie sich das Projekt weiter entwickelt.
Tja, Totgeglaubte leben bekanntlich länger…
In CakePHP stand ich bisher oft vor einem Problem wenn ich auf allen Seiten meiner Anwendung Daten aus einem bestimmten Controller brauchte.
Ein Anwendungsbeispiel: Ihr erstellt eine Eventdatenbank und wollt das in eurem Template z.B. in der Sidebar immer die nächsten 4 Events aus eurer Datenbank ausgegeben werden.
Das ist in sofern nicht ganz soooo easy, da CakePHP eigentlich immer nur das aktuelle Model ansprechen kann Wenn man sich also auf der Seite gerade die Userliste ( /users/ ) anschaut, und auf dieser Seite dann einen Aufruf zum Event-Model starten möchte würde es im Normalfall nicht so einfach funktionieren, da eben gerade nur das User-Model aktiv wäre.
Nun gibt es für dieses “Problem” viiiiele verschiedene Lösungen…
Beim Download der aktuellen CakePHP-Version stolpert man immer wieder über die Versionen CakePHP 1.1xxx (Stable) und CakePHP 1.2xxx (Developement). Nun denkt man ja eigentlich, je höher die Versionsnummer, umso besser.
Nun, das stimmt zum Teil auch, Cake 1.2 bringt eine größere Funktionsvielfalt mit als es Cake 1.1 tut. Das liegt daran, das die Entwickler eben irgendwann einen Schritt weiter gehen wollten, und alle neuen Features in eine neue, eigenständige Version eingebaut haben. Cake 1.1 wird zwar dennoch immer aktualisiert, der Funktionsumfang bleibt jedoch der selbe.
Eins vorweg: Cake 1.1 Applikationen sind mit Cake 1.2 nicht einfach so kompatibel, es spielt also bei der Wahl schon eine Rolle für was man sich bei der Entwicklung entscheidet.
Mein Tipp für Einsteiger: Nutzt für eure erste Applikation auf jeden Fall Cake 1.1, der Grund dafür ist denkbar einfach.
Cake 1.2 hat zwar tolle neue Funktionen, dafür jedoch keine wirkliche Dokumentation, gerade gefunden, eine Cake 1.2 Doku im Beta-Stadium , ist ja auch Alpha. Für Einsteiger wäre es daher ein Graus wen man endlich einen passenden Artikel in der Bakery oder im Manual gefunden hat, und dieser dann (noch) für Cake 1.1 geschrieben wurde.
Man darf auch nicht vergessen das es sich eben noch um eine Alpha-Version handelt. Alpha-Version ist bei mir im Kopf getagged mit “non-productive, buggy, test-only”.
Letztendlich kann einem aber keiner die Entscheidung abnehmen. Wer sich fit genug fühlt, der kann natürlich auch Cake 1.2 in produktiven Umgebungen nutzen, von groben Bugs habe ich zumindest bisher noch nichts gehört.
Nun habe ich in letzter Zeit auch ein wenig in Sachen CakePHP dazu gelernt. Einige meiner Erfahrungen und Kniffe möchte ich an dieser Stelle an euch weiter geben. Gedacht sind sie gerade für Einsteiger in die Thematik, für alte Hasen sind viele der Tipps sicherlich nichts neues.
Sollten euch vielleicht auch noch nützliche Tipps zu diesem Thema einfallen, so sind diese natürlich in den Kommentaren jederzeit willkommen.
Zwei Wochen ist es nun in etwa her, dass Martin Labuschin mich mit David Maciejewski vom Technikwürze-Podcast bekannt machte.
Kurz darauf kam David und mir die Idee eine Sendung zum Thema CakePHP zu machen, welche ich als “Semi-Experte” *hust* begleiten sollte.
Nun waren heute (13.06.2007) die Aufnahmen zur am Montag erscheinenden Sendung und es hat wirklich riesigen Spaß gemacht, nochmals einen großen Dank an David an dieser Stelle. Es war wirklich eine angenehme Atmosphäre und ich freue mich schon auf die nächste Sendung.
Sobald die Aufnahme den Schnitt überlebt hat und dann am 18.06. ins Netz gestellt wird gibt es an dieser Stelle natürlich auch den dazu passenden Link.
So, nun ist die Sendung endlich für die Öffentlichkeit zugänglich. Aber ich möchte keine Beschwerden über mein “Genau Genau” lesen ;)
Nun habe ich mich ja in letzter Zeit neben CakePHP auch mit dem jQuery-Framework beschäftigt, und in diesem Zusammenhang eine kleine “Probeanwendung” gebaut, nämlich eine Login-Seite mit Ajax-Funktionalität. Für den ein oder anderen stellt sich nun sicherlich die Frage, ob solch eine Funktion wirklich sinnvoll ist…doch für mich zählt hier eher die Erklärung als der Sinn des Ganzen :-).
Wie das Ganze später aussehen könnte seht ihr in dieser kurzen Demo (richtiger Login: gast:gast). Das ganze wurde grafisch natürlich ein wenig aufgepeppt. Um die jQuery-Animationen auf dem variablen Hintergrund hinzubekommen musste auf das PNG-Format zurückgegriffen werden, zudem wurde für die IE6-User ein PNG-Behaviour eingesetzt.

Vor einiger Zeit begann ich ja das CakePHP-Framework für mich zu entdecken. Schneller ging die Arbeit damit schon nach kurzem Lernprozess von statten, ohne dabei seine Flexibilität irgendwie einengen zu müssen.
Nach diesem positiven Startschuss in Sachen Framework-Erfahrung habe ich mich heute an das jQuery-Framework heran getraut und bin wirklich begeistert. Die Syntax ist dank Gerrits Vortrag schnell erklärt, und eine kompakte Dokumentation zum Mitnehmen findet man bei Visual jQuery und Bennadel (vorsicht, PDF-Dokument).
So habe ich mich nun heute einige Zeit daran gesetzt die ersten Schritte zu gehen, und sie vielen mir so einfach wie nie, ich war wirklich überrascht.
Man muss dazu sagen, dass ich was JavaScript bisher angeht wirklich nur seeeehr oberflächliches Wissen habe.
Ich denke das ich in die nächsten anstehenden Projekte sicherlich die ein oder andere sinnvolle Funktion einbauen werde, gerade bei dieser Zeitersparnis. Das lernen macht durch die tollen Animationen sogar noch ein wenig mehr Spaß als mit Cake :)
Wenn mir nun noch jemand sagen könnte wie man in jQuery bzw. Javascript allgemein so etwas wie eine “Pause” einbinden kann (z.b.: slideOut(), dann 5 Sekunden warten, dann wieder slideIn(), das wäre super! Was mir auch noch so Gedanken macht sind Schleifen jeglicher Art in JavaScript (also z.B. alle <li> eines <ul> nacheinander durchlaufen.
Für Antworten bin ich jederzeit zu haben…und natürlich werde ich einige meiner Lernerfolge hier auch protokollieren :)
Puh, das war ein hartes Stück Arbeit. Für ein aktuelles Projekt, welches ich mit CakePHP umsetze, war es nötig aus einer Mitarbeiterdatenbank alle Geburtstagskinder der nächsten bzw. letzten 5 Tage auszulesen, und dazu auch gleich das Alter und die Tage bis zum Geburtstag zu berechnen.
Mit Hilfe des Tutorials-Forums kam ich auf den richtigen Weg, und habe nun einen MySQL-Query, der sowohl mit Schaltjahren, als auch Jahresübergängen einwandfrei zu funktionieren scheint. Da ich sicherlich nicht der letzte mit diesem Problem bin, wollte ich euch den Query nicht vorenthalten…





