Zend_Filter_InflectorZend_Filter_Inflector est un outil de conversion de règles (sous forme de chaîne de caractères), vers une cible. Ce procédé est appelé inflexion. Par exemple, transformer des MotsEncasseMélangée ou des motsEnCamelCase vers un chemin. Vous pourriez avoir besoin de passer les caractères en minuscules, et séparer les mots en utilisant un tiret ("-"). Un inflecteur sert à ceci. Zend_Filter_Inflector implémente Zend_Filter_Interface ; pour utiliser l'inflexion, vous appelez filter() sur votre instance. Example #1 Transformer du texteEncasseMelangée ou du texteCamelCase vers un autre format
Opération
Un inflecteur a besoin d'une cible et d'une ou plusieurs
règles. Une cible est une chaîne dans laquelle des jokers pour les
variables à remplacer sont présents. Ils sont préfixés de doubles-points, par exemple
L'appel à filter(), nécessite un tableau de clés/valeurs pour les jokers présents dans la cible. Chaque variable dans la cible peut avoir zéro ou plusieurs règles associées. Les règles peuvent être statiques ou faire référence à une classe Zend_Filter. Les règles statiques sont des remplacements purs et simples. Sinon, la classe qui correspond à la règle sera utilisée pour analyser le texte. Ces classes sont spécifiées par leur nom (du filtre), non préfixé.
Par exemple, vous pouvez utiliser n'importe quelle instance de
Zend_Filter. Cependant, plutôt que d'y faire référence via
"Zend_Filter_Alpha" ou
"Zend_Filter_StringToLower", vous spécifierez seulement
" Créer des chemins vers des filtres alternatifsZend_Filter_Inflector utilise Zend_Loader_PluginLoader pour gérer les filtres chargés. Par défaut, n'importe quel filtre préfixé par Zend_Filter sera disponible. Pour accéder aux filtres ayant d'autres préfixes plus profonds, enlevez leur préfixe "Zend_Filter" tout simplement :
Pour spécifier d'autres chemins, Zend_Filter_Inflector possède une méthode qui proxie vers le plugin loader, addFilterPrefixPath() :
Il est possible également de récupérer le plugin loader, et d'intervenir sur son instance de manière directe :
Pour plus d'informations sur la modification des chemins vers les filtres voyez la documentation de PluginLoader. Paramétrer la cible de l'inflecteurLa cible de l'inflecteur est un mot joker (ou un identifiant), précédé du caractère spécial, double-point. ":script", ":path", etc. La méthode filter() cherche ces identifiants pour les traiter (les remplacer). Il est possible de changer le caractère spécial double-point avec setTargetReplacementIdentifier(), ou en troisième paramètre de constructeur :
En général, concernant la cible, on la passe en constructeur. C'est le cas
classique. Il peut être en revanche nécessaire de pouvoir passer une cible après la
construction de l'objet. (Par exemple modifier l'inflecteur des composants Zend intégrés
tels que
De plus, vous pouvez agréger la cible dans un membre de votre classe, si cela vous permet d'éviter trop d'appels de méthodes. setTargetReference() permet ceci :
Règles d'inflexionComme dit en introduction, il existe 2 types de règles : statiques et basées sur des filtres.
Règles statiquesLes règles statiques permettent des remplacements simples. Si vous avez un segment statique dans votre cible, ce type de règle est idéal. setStaticRule() permet de les manipuler :
Bien sur il est possible d'agréger la règle dans une propriété de classe, ceci permettra d'éviter l'appel de méthodes. Ce cas se produit typiquement lorsque l'inflecteur est embarqué (encapsulé) dans une classe. Vous pouvez à ce moment là interdire la récupération de l'inflecteur depuis l'extérieur de la classe, par exemple. La méthode setStaticRuleReference() vous y aidera :
Règles non statiques : basées sur des filtresDes filtres de type Zend_Filter peuvent être utilisés comme règles dans l'inflecteur. Ils sont donc liés à des variables cibles, mais vous pouvez lier plusieurs filtres pour une même cible. Ils sont alors procédés dans l'ordre (FIFO), prenez donc garde à ceci. Les règles des filtres sont ajoutées avec setFilterRule(). Cette méthode écrase toute règle déjà définie. addFilterRule() au contraire, n'écrase pas mais gère une pile de filtres pour une variable. Les noms des filtres passés à ces 2 méthodes sont de la forme :
Paramétrer plusieurs règles en une seule foisEn temps normal il est plus pratique de spécifier ses règles (statiques et/ou filtres) en une seule fois, plutôt qu'en plusieurs étapes. Les méthodes de Zend_Filter_Inflector comme addRules() et setRules() permettent ceci. Chacune de ces 2 méthodes prend en paramètre un tableau de variable/règle. La règle peut être n'importe quel type accepté (string, objet filtre ou array). Les noms des variables proposent une syntaxe spéciale pour différencier les règles statiques des filtres :
Example #2 Paramétrer plusieurs règles en une seule fois Autres méthodes utilitairesZend_Filter_Inflector possède d'autres méthodes pour changer le plugin loader, manipuler des règles, et contrôler les exceptions.
Zend_Config avec Zend_Filter_InflectorZend_Config peut être utilisé pour spécifier les règles, les préfixes des filtres et d'autres choses dans vos inflecteurs. Passez un objet Zend_Config au constructeur ou à la méthode setConfig() :
Example #3 Utiliser Zend_Config avec Zend_Filter_Inflector
|