Häufig ist beim Umgang mit Datenquellen eine Stringumwandlung zwischen der Underscore- und CamelCase-Schreibweise erforderlich. Wo das sinnvoll ist und wie man es einfach anwendet, ist das Thema des heutigen Artikels.
Die Underscore-Schreibart (z.B. “user_id”) findet man sehr oft als Spaltenbezeichner in Datenbanken oder auch in XML-Dateien, im PHP-Model (siehe auch mein Artikel zum Custom_Model) hingegen wird oft CamelCase (z.B. “userId”) verwendet.
Es wird also an der Schnittstelle zwischen dem Model und der Datenquelle eine Art Key-Mapping benötigt. Das lässt sich zwar recht einfach mit regulären Ausdrücken erschlagen, aber man kann sich auch der Zend_Filter-Klassen bedienen, wenn man in einem ZF-Umfeld arbeitet.
Die Anwendung ist wie so vieles beim Zend Framework recht einfach:
<?php $toCamelCaseFilter = new Zend_Filter_Word_UnderscoreToCamelCase(); echo $toCamelCaseFilter->filter('user_id'); // Ausgabe: UserId
Umgekehrt, wen wird es wundern, ist das natürlich genauso leicht:
<?php $toUnderscoreFilter = new Zend_Filter_Word_CamelCaseToUnderscore(); echo $toUnderscoreFilter->filter('UserId'); // Ausgabe: User_Id
Wenn man nicht extra eine Instanz erzeugen will, dann lassen sich die Zend Filter auch mit einem statischen Aufruf nutzen.
<?php echo Zend_Filter::filterStatic('bitte_einmal_camel_case', 'Word_UnderscoreToCamelCase'); // Ausgabe: BitteEinmalCamelCase
Das war es dann auch schon wieder für heute. Ich hoffe, dass euch der Artikel gefallen hat und ihr viele kreative Ideen zum Arbeiten mit den Filtern habt.
23.07.2010 um 10:05 Uhr
Wird UserId wirklich zu User_id? D.h. man müsste es noch mal durch strtolowercase() jagen, damit das gleiche Ergebnis wie darüber, nur rückwärts rauskommt.
23.07.2010 um 15:04 Uhr
Das Ergebnis müsste tatsächlich nochmal durch strtolower() geschickt werden. Ist mir beim Testen auch aufgefallen.