Ich habe mich nun doch endlich mal entschlossen die PHP-Zertifizierung zu buchen. Man lernt ja nie aus, wie man so schön sagt. Es gibt jedoch diverse Meinungen zur Zertifizierung als solches.
Sie bescheinigt eigentlich ja nur ein gewisses Maß an Kenntnisse und nicht, wie kreativ oder geeignet jemand für ein Projekt oder Aufgabe ist. Auf der andere Seite zeigt es das man bemüht ist Qualität abzuliefern und sein Wissen zu erweitern. Obwohl “Wissen erweitern” nicht korrekt ist, denn hervorzuheben ist hier wohl das Wort “Zertifizierung” (Man bekommt nur einen “Stempel” für das, was man schon längst wusste).
Wie steht ihr zu dem Thema Zertifizierung? Habt ihr vielleicht schon die Zertifizierung abgeschlossen? War nach Abschluss irgendetwas anders in Bezug auf Bewerbungsgespräche, Kundenresonanz, etc..?
Würde mich freuen ein paar Kommentare zu dem Thema zu lesen.
Ich mag es einfach und nutze dabei sehr häufig den AppController um mir immer wiederkehrende Aufgaben zu sparen. Sanitize ist fast immer notwendig um die Benutzereingaben zu säubern und auf die Verwendung in Datenbank Queries vorzubereiten. Hier nun ein kleiner Tip wie man sich das ständige escaping und cleaning in den Actions spart:
class AppController extends Controller
{
var $cleandata = array();
var $helpers = array('Html', 'Form', 'Javascript', 'Time', 'Text');
function beforeFilter() {
if(!empty($this->data)) {
uses('sanitize');
$sanitize = new Sanitize();
$this->cleandata = $sanitize->clean($this->data);
}
}
}
Also wenn wir Daten haben (nicht empty), lade die Sanitize Bibliothek (uses) und schreibe das gesäuberte Array in cleandata.
Nun haben wir $this->data und $this->cleandata in jedem Controller zur Verfügung. Das folgende Beispiel stammt aus dem UsersController:
function signup() {
if(!empty($this->data)) {
if($this->User->create($this->cleandata) && $this->User->validates())
{
echo 'valid!'; // save data .. etc..
}
}
}
Ihr könnt natürlich auch !empty($this->cleandata) verwenden. Mein Beispiel soll nur zur Veranschaulichung dienen.
Nach langer Zeit mal wieder ein Update. Diesmal mit schicken Optionsmenü und komplett überarbeitet. Funktioniert endlich mit Wordpress 2.2. Als kleines Bonus habe ich eine komprimierte Version der Prototype Bibliothek beigelegt und es wird die neuste Version der Lightbox verwendet.
Ich habe heute morgen ein kleines Mashup (Mix aus zwei Web-Diensten) entwickelt.
Wenn ihr irgendwo seid und braucht mal eben eine Preisinfo über eine DVD gibt es nun einen Twitter-Bot der für euch eben bei Amazon nach den günstigsten Angeboten sucht. Oft steht man ja vor einem Regal und weiss nicht ob man den Film im Netz nicht vielleicht billiger bekäme.
Das ganze funktioniert recht einfach:
- Meldet eucht bei Twitter an (falls nicht schon geschehen)
- Geht zum Profil des Bots, oder sendet einfach “FOLLOW dvdz” an Twitter
- Der Bot fügt euch jetzt automatisch als Freund hinzu
- Schreibt nun folgendes: “@dvdz [Filmtitel]” .. also z.B. “@dvdz Herr der Ringe”
- Kurze Zeit später (ca. 1-2 minuten) erhaltet ihr eine direkte Nachricht.
Anschliessend braucht ihr einfach immer nur “@dvdz [Filmtitel]” und ihr bekommt innerhalb kürzester Zeit die Infos. Ist doch easy, oder? :)
Hier mal ein Beispiel wie die Nachrichten vom Twitter-Bot aussehen:

Übrigens: Das http://qurl.com/ in der Nachricht ist eine Kurz-URL zu dem Artikel auf Amazon.
Viel Spass damit!
PS: Natürlich alles BETA und so weiter. Im schlimmsten Fall bekommt ihr eine Antwort doppelt. Kostet euch aber nichts, also was solls. :) Wenn es sich unerträglich häuft, bitte einfach eben melden. Bisher ist mir das nur ein mal passiert. Es ist natürlich auch möglich das Twitter Server mal streiken, dann bekommt ihr die Info nachgereicht.
Ich hab mir ja letztens ein MacBook gekauft und bin überaus zufrieden mit allem. Konnte sogar die POS1 und ENDE Tasten mit dem bekannten DefaultKeyBindings.dict Trick ummodeln und auch in 10.4 die CTRL und ALT Tasten dem von Windows anpassen. (also Apfel Taste ist nun ALT bei mir, und control ist wirklich control .. also CTRL+C für copy. etc..)
Ich weiss, dass ist vielleicht nicht die feine Art in ein neues Betriebssystem einzusteigen, aber ich bin Programmierer und schreibe mehrere 100 zeilen am Tag und kann daher einfach nicht anders.
Man möge mir verzeihen…
Mir fehlt jetzt nur noch eines:
Die geschweiten Klammern ( Braces ) und die eckigen Klammern ( Brackets ) sind bei Mac völlig woanders. Für die Brackets brauch man sogar zwei Hände, gegenüber dem PC.
Windows:
- { = ALT-7,
- } = ALT-0,
- [ = ALT-8,
- ] = ALT-9
Mac
- { = ALT-8,
- } = ALT-9,
- [ = ALT-5,
- ] = ALT-6
Nun .. Braces um einen verschoben und Brackets ganz woanders. Hilfeee!
Weiss einer eine Lösung? Ich kann mich einfach nicht umgewöhnen, zumal ich gleichzeitig an Windows und Mac arbeite. Ich vertue mich schon oft genug mit der Maus, aber dann noch ein Fingerkrampf obendrauf ist zuviel für mein zartes Gemüt :)
Ich habe nur eine Lösung mit “xmodmap” finden können, leider hat das was mit Apple X11 zu tun und dazu gibts irgendwie kein Download mehr.
Hier mal das listing:
xmodmap -e ‘keycode 34 = 7 slash braceleft backslash’
xmodmap -e ‘keycode 37 = 0 equal braceright dead_macron’
xmodmap -e ‘keycode 36 = 8 parenleft bracketleft dead_tilde’
xmodmap -e ‘keycode 33 = 9 parenright bracketright periodcentered’
Sieht gut aus, Terminal sagt aber: “xmodmap: command not found”..
Hab Darwin Kernel 8.10.1 i386
Wenn einer weiss wie man das via “DefaultKeyBinding.dict” oder ähnlichem “alternativ zu xmodmap” regeln kann: bitte her damit! auch tools oder so sind willkommen. Alles was es mir möglich macht 7,8,9,0 für die sonderzeichen zu nutzen.
Ich habe hier mal eine allgemeine Frage bzw. bin auf der Suche nach einer Erklärung. Hier das Beispiel:
class Base {
public function __toString()
{
return 'Class: '.__CLASS__;
}
}
class SubClass extends Base
{
// something
}
Unter Verwendung der Pseudo-Konstante “__CLASS__” möchte ich via “__toString()” eine dynamische Debugausgabe für alle Unterklassen von “Base” erzielen. Die definierte toString Methode wird auch vererbt, aber seht selbst:
$obj = new SubClass();
echo $obj;
// ergibt: "Class: Base"
Das diese Ausgabe falsch ist, ist offensichtlich, aber vielleicht auch nicht?
Eigentlich wird __CLASS__ mit dem Aufruf __toString() ausgeführt und sollte sich daher nicht durch die Position im Code verwirren lassen. Das Problem oben ist schon etwas älter, aber heute bin ich wieder drauf gestossen und dachte mir, das es sich eigentlich korrekt verhält.
Erklärungsversuch:
Da __CLASS__ eine magische Konstante ist und nur in Base verwendet wird, gilt dies als “der letzte Stand” und wird vererbt.
Bug oder Normal?
Mal was einfaches, aber doch nicht so offensichtliches:
class UserHelper extends SessionHelper {
function authed() {
return $this->check('User');
}
}
Damit dies funktionieren kann, muss man allerdings zuvor die Reihenfolge der Helper beachten:
class AppController extends Controller {
var $helpers = array('Session', 'User');
}
Dann klappts auch mit dem extend ;)
Wenn ihr schnell mal eure Übersetzung testen wollt, empfehle ich die Quick Locale Switcher Extension. Damit könnt aus der Statusleiste heraus auf jede Sprache wechseln die ihr wollt. Diese wird dann beim neuladen der Website als Hauptsprache gesendet und Cake versucht die passende Sprachdatei in eurem “locales” Ordner zu finden. Zum testen und Debuggen einfach unschlagbar.
__('Schön :)'); ?>
Ich habe mir die Zeit genommen und eine Offlineversion der Wiki Doku zusammengestellt. Ich hoffe es gefällt und ist eine gute Ergänzung zu den bereits bekannten Prototype API Docs.
Es gibt sie in drei Geschmacksrichtungen: Als druckbares PDF ohne hyperlinks und bookmarks und als desktop version mit klickbaren Querverweisen. Obendrauf gibt es die CHM zum einbauen in eure IDE und als einfache Schnellreferenz unter Windows. Dateigrösse varriert von 72K bis 250K als PDF und ist circa 40 Seiten lang.
Okay.. habe gerade den neusten Trunk von CakePHP 1.2 ausgecheckt und als erstes fiel mir auf das der “scripts” Ordner verschwunden ist. Es gibt nun einen neuen Ordner unter “cake” namens “console”. Dieser beherbergt ein Shellskript und eine Batch-Datei für Windowsuser. Da bisher noch keine Doku existiert stand ich anfangs vor einem Problem: “Wie zum Geier soll die BAT funktionieren?”
In der Datei selbst gab es jedoch einen kleinen Hinweis, wenn auch mit Falschinformation gewürzt:
In order for this script to work as intended, the cake\scripts\ folder must be in your PATH
Scripts wurde ja entfernt. Müsste also “cake\console\” sein.
Console Ordner eurer PATH variable hinzufügen
Die globale PATH variable kennt man noch aus DOS Zeiten und ist unter XP auch recht gut versteckt.
- Rechte Maustaste auf das Arbeitsplatz-Symbol -> Eigenschaften
- Systemeigenschaften: Wählt dort “Erweitert”
- Erweitert: Unten ist ein Button “Umgebungsvariablen”. Klicken.
- Dort sind zwei Listenfelder. In dem unteren “Systemvariablen” Feld “Path” suchen
- Markiert “Path” und klickt auf den “Bearbeiten”-Button
- Wert der Variablen: Ist eine durch Semikolon getrennte Liste mit Pfaden
- Fügt nun den vollen Pfad zu eurem “cake” Ordner (wahrscheinlich irgendwo in htdocs)
- Beispiel:
;F:\xampp\php;F:\htdocs\cake\console; - Bestätigen mit OK und fertig.
Hinweis 1: Ich habe neben cake\console auch xampp\php hinzugefügt, damit ich PHP von überall aufrufen kann.
Hinweis 2: Wenn ihr die “CMD” Konsole noch offen habt, müsst ihr die neu aufrufen, damit die geänderte PATH variable auch aktiv ist.
Neues Projekt anlegen
Es hat sich einiges geändert. Früher konnte man mit scripts\bake.php -project “name” ein neues Skelett anlegen lassen. In CakePHP existiert aber der “project” parameter nicht mehr, und man kann ihm auch nicht sagen wo es hingehen soll (soweit ich weiss..). Da man nun von überall backen kann, muss man einfach in den zukünfigten Projektordner wechseln!
- Prüft ob der neue Befehl “cake” funktioniert. Öffnet “cmd” und gebt einfach irgendwo “cake” ein, gefolgt von Enter.
- Ihr solltet “Welcome to CakePHP v1.2.0.5165alpha Console” sehen, gefolgt von ein paar Statusinfos.
- Geht nun in euren Ordner wo die cake-, app- und vendor-Ordner ebenfalls liegen. Erstellt einen neuen Ordner. Zum Beispiel “testprojekt”.
- Wechselt nun nach “testprojekt” und ruft “cake bake” auf, wobei “bake” nun ein Parameter ist und “cake” unsere Batch-Datei.
- Ihr solltet nun einen ähnlichen Dialog bekommen wie früher mit “bake.php -project ..”
App : testprojekt Path: F:\htdocs\testprojekt --------------------------------------------------------------- Skel Directory: F:\htdocs\cake\console\libs\templates\skel Will be copied to: --------------------------------------------------------------- App: testprojekt Path: F:\htdocs\testprojekt --------------------------------------------------------------- Look okay? (y/n/q)
- Entscheidet ob der gefundene Pfad richtig ist und dann geht es gewohnt weiter :)
Ihr solltet nun die Willkommensseite sehen wenn ihr http://localhost/testprojekt aufruft. Angaben und Pfade varrieren selbstverständlich. Aber das dürfte ja klar sein.
Für weitere Tips und Tricks empfehle ich den Beitrag von Cakebaker zu den neuen Funktionen.
Viel Spass!

