Zend_Filter_InflectorZend_Filter_Inflector ist ein generell verwendbares Tool für regel-basierende Beugung von Strings zu einem gegebenen Ziel. Als Beispiel, kann es gewünscht sein MixedCase oder camelCaseWörter in einen Pfad zu transformieren; für die Lesbarkeit, OS Policies, oder andere Gründe, sollen diese auch kleingeschrieben werden, und die Wörter sollen mit einem Bindestrich ('-') getrennt werden. Eine Beugung (Inflector) kann das erledigen. Zend_Filter_Inflector implementiert Zend_Filter_Interface; eine Beugung kann durch den Aufruf von filter() auf der Objekt Instanz durchgeführt werden. Example #1 MixedCase und camelCaseText in ein anderes Format transformieren
FunktionEine Beugung benötigt ein Ziel (target) und ein oder mehrere Regeln (rules). Ein Ziel ist grundsätzlich ein String der Platzhalter für Variablen definiert die ersetzt werden sollen. Sie werden durch das Voranstellen eines ':' spezifiziert: :script. Wenn filter() aufgerufen wird, muß ein Array von Schlüssel und Wert Paaren übergeben werden die den Variablen im Ziel entsprechen. Jede Variable im Ziel kann null oder mehr, mit Ihr assoziierte Regeln, besitzen. Regeln können entweder statisch (static) sein oder zu einer Zend_Filter Klasse verweisen. Statische Regeln werden den angegebenen Text ersetzen. Andernfalls wird eine Klasse verwendet die auf die Regel passt die angegeben wurde, um den Text zu beugen. Klasse werden typischerweise spezifiziert indem ein Kurzname verwendet wird, der den Filternamen indiziert, wobei jeglicher üblicher Präfix entfernt wurde. Als Beispiel kann jede konkrete Zend_Filter Implementierung verwendet werden; trotzdem, statt auf diese als 'Zend_Filter_Alpha' oder 'Zend_Filter_StringToLower' zu verweisen kann einfach 'Alpha' oder 'StringToLower' spezifiziert werden. Pfade zu alternativen Filtern setzenZend_Filter_Inflector verwendet Zend_Loader_PluginLoader um das Laden von Filtern zu managen die von der Beugung verwendet werden sollen. Standardmäßig, wird jeder Filter mit dem Präfix Zend_Filter vorhanden sein. Um auf Filter mit diesem Präfix zuzugreifen, die aber tiefer in der Hirarchie vorhanden sind, kann einfach der Zend_Filter Präfix entfernt werden:
Um einen alternativen Pfad zu setzen hat Zend_Filter_Inflector eine Utility Methode die den Plugin Lader verwendet, addFilterPrefixPath():
Alternativ kann der Plugin Lader von der Beugung empfangen, und direkt mit Ihm interagiert werden:
Für weitere Optionen über das Bearbeiten von Pfaden zu Filtern sollte in die PluginLoader Dokumentation gesehen werden. Das Ziel der Beugung setzenDas Ziel der Beugung ist ein String mit einigen Platzhaltern für Variablen. Platzhalter haben die Form eines Identifizierers, standardmäßig einem Doppelpunkt (':'), gefolgt von einem Variablennamen: ':script', ':path', usw. Die filter() Methode sieht nach dem Identifizierer gefolgt von dem Variablennamen der ersetzt werden soll. Der Identifizierer kann geändert werden in dem die setTargetReplacementIdentifier() Methode verwendet wird, oder indem er als drittes Argument dem Konstruktor übergeben wird:
Typischerweise wird das Ziel über den Konstruktor gesetzt. Trotzdem kann es Ziel später geändert werden (zum Beispiel, um die Standardbeugung in Kernkomponenten die dem ViewRenderer oder Zend_Layout zu verändern). setTarget() kann für diese Zwecke verwendet werden:
Zusätzlich kann es gewünscht sein einen Klassenmember für die eigene Klasse zu haben, der es erlaubt das Beugungsziel zu aktualisieren -- ohne dass das Ziel jedesmal direkt aktualisiert werden muß (was Methodenaufrufe erspart). setTargetReference() erlaubt es das zu tun:
BeugungsregelnWie bereits in der Einführung erwähnt, gibt es zwei Typen von Regeln: statische und filter-basierende.
Statische RegelnStatische Regeln führen einfach eine Ersetzung von Strings aus; sie sollten verwendet werden wenn ein Segment in einem Ziel existiert das typischerweise statisch ist, aber welches der Entwickler ändern darf. Die setStaticRule() Methode kann verwendet werden um die Regel zu ändern:
So wie das Ziel selbst kann auch eine statische Regel an eine Referenz gebunden werden, was die Aktualisierung einer einzelnen Variablen erlaubt statt das ein Methodenaufruf benötigt wird; das ist oft nützlich wenn die Klasse intern eine Beugung verwendet, und die User den Beugungsmechanismus nicht holen sollen damit dieser aktualisiert werden kann. Die setStaticRuleReference() kann verwendet werden um das durchzuführen:
Beugungsregeln filternDie Filter von Zend_Filter können auch als Beugungsregeln verwendet werden. Genauso wie bei statische Regeln werden Sie an eine Zielvariable gebunden; anders als statische Regeln können mehrfache Filter definiert werden die zur Beugung verwendet werden. Diese Filter werden in der Reihenfolge ausgeführt, weswegen man vorsichtig sein sollte und Sie in der Reihenfolge registriert die für die Daten die empfangen werden sollen Sinn machen. Regeln können durch Verwendung von setFilterRule() hinzugefügt werden (was alle vorhergehenden Regeln für diese Variable überschreibt) oder addFilterRule() (was die neue Regel zu jeder existierenden Regel für diese Variable hinzufügt). Filter werden in einem der folgenden Wege spezifiziert:
Viele Regeln auf einmal setzenTypischerweise ist es einfacher viele Regeln auf einmal zu setzen als eine einzelne Variable und die Beugungsregeln auf einmal zu konfigurieren. Zend_Filter_Inflector's addRules() und setRules() Methode erlaubt dies. Jede Methode nimmt ein Array von Variable und Regel Paaren, wobei die Regel alles sein kann was der Typ der Regel akzeptiert (String, Filterobjekt, oder Array). Variablennamen akzeptieren eine spezielle Schreibweise um das Setzen von statischen Regeln und Filterregeln zu erlauben, entsprechend der folgenden Schreibweise:
Example #2 Mehrere Regeln auf einmal setzen HilfsmethodenZend_Filter_Inflector hat eine Anzahl von Hilfsmethoden für das Empfangen und Setzen der Plugin Laders, die Manipulation und das Empfangen von Regeln, und die Kontrolle ob und wann Ausnahmen geworfen werden.
Zend_Config mit Zend_Filter_Inflector verwendenZend_Config kann verwendet werden um Regeln, Filter Präfix Pfade, oder andere Objektstati im Beugungsmachanismus zu setzen, entweder durch die Übergabe eines Zend_Config Objekts zum Konstruktor, oder durch setOptions(). Die folgenden Einstellungen können spezifiziert werden:
Example #3 Zend_Config mit Zend_Filter_Inflector verwenden
|