Gestern habe ich das erste mal überhaupt ein Captcha einbinden müssen, und habe (natürlich) den Zend_Captcha Adapter verwendet. Das Implementieren von Zend_Captcha_Image war recht einfach und das Ergebnis sah auch gar nicht übel aus – ungefähr so:

Nunja, heute morgen hatten sich zwei neue Spambots registriert. Das hat mich sehr geärgert, sollte so ein Feature des Zend Frameworks doch wenigstens ordentlich funktionieren.
Continue reading ‘Zend_Captcha_Image unsicher…’
Im Moment das heißeste Thema hier im Blog (wenn “heiß” auch stark übertrieben wäre), ist noch immer Doctrine 2. Ich hatte mich vor einiger Zeit entschieden, die neue Version des Propel-Konkurrenten für ein Projekt zu verwenden. Zwar befindet sich die Software noch im alpha Stadium, (die Beta wird laut der aktualisierten Roadmap mit zwei Wochen Verspätung erscheinen) ich konnte bisher aber keine Bugs feststellen – lediglich einige Verbesserungswünsche und Unzulänglichkeiten.
Eine davon möchte ich hier besprechen.
Continue reading ‘Doctrine 2 – Speichern von Verknüpfungen’
Mit dem Post hier nehme ich an dem Gewinnspiel von PHP hates me teil. Da es um Geschwindigkeit geht, spare ich mir jetzt einen sinnvollen Artikel darüber. Ich will ja das Zend Framework Poster bekommen!
In einem neuen Projekt möchte ich gern Doctrine 2 verwenden, und habe schonmal etwas vorgearbeitet und mir eine Superclass für die Models erstellt. Doctrine 2 lässt es zu, Models von solch einer Superclass erben zu lassen, in welcher man beispielsweise Felder festlegen kann, die in jedem Model zur Verfügung stehen sollen.
Meine Superclass füllt ein paar Funktionslücken und ist mit folgenden nützlichen Methoden ausgestattet:
- Definiert die Felder created und updated (jeweils DateTime) und füllt sie entsprechend beim Erstellen und Updaten des Objektes. Wie in Doctrine 1: “act as timestampable”
- Bietet eine Model::find($id) Methode, welche die gefundene Row oder sonst “null” zurückgibt. Wird Model::find($id, true) aufgerufen, wird ein neues Objekt erstellt und zurückgegeben, wenn $id nicht gefunden wurde. Nützlich, um zum Beispiel die Funktionen zum Erstellen und Bearbeiten von Zeilen nicht doppelt implementieren zu müssen
- $obj->from($array) erwartet ein array(‘feldname’=>’neuer wert’,…) und füllt die Felder des Objektes entsprechend. Nützlich um viele Werte gleichzeitig zu setzen.
- $obj->getFieldName() und $obj->setFieldName($value) geben den Wert von field_name zurück, bzw. setzen ihn. Die setter Methode gibt das Objekt zurück, sodass Methodchaining à la $obj->setField1($val1)->setField2($val)… möglich ist. Die setter und getter unterstützen CamelCase. getCamelCaseString würde das Feld camel_case_string zurückgeben.
Anwendung ist ganz einfach; class My_Model extends Model_Base {}. Außerdem muss in der Zend_Registry der EntityManager von Doctrine abgelegt werden, sodass
$registry = Zend_Registry::getInstance(); $em = $registry->entitymanager;
diesen holen kann! Das ginge auch über eine globale Variable oder sowas.
Hier endlich die Klasse zum Kopieren und Spielen:
Continue reading ‘Meine Superclass für Doctrine 2 Models’
Ich bin eben über heise security auf ein sehr nettes Video gestolpert, in welchem Chris Tarnovsky zeigt, wie er die Chips auf Sat-TV Smartcards geknackt hat: Hack a Sat-TV Smart Card
Und ich dachte immer, zum Hacken reicht eine Shell mit Internetzugang…