Bonjour,

J'ai décidé de gérer mes zend_form avec les fichiers de config ini.
L'idée est de gérer "facilement" toute la config de l'objet dans un fichier plat.

Je construis par la suite mon objet via un builder. En effet mes forms n'ont pas forcement les mêmes type d’éléments ou les mêmes validators en fonction des profils de mes utilisateurs (j'utilise donc les setters uniquement dans le builder pour surcharger la config ini).

Jusqu'ici ça fonctionne bien.
Hormis pour les decorators. Les decorators Zend_form font intervenir beaucoup de balisage qui ne m’intéresse pas. J'ai donc une configuration globale qui les retire.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
decorators.formElements.decorator = FormElements
decorators.form.decorator = Form
decorators.FormErrors.decorator = FormErrors
 
elementdecorators.viewhelper.decorator = ViewHelper
elementdecorators.label.decorator = Label
elementdecorators.description.decorator = Description
Néanmoins, pour certains éléments j'ai besoin d'un rendu particulier, j'ai donc défini mes propres decorators.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
elementPrefixPath.decorator.prefix = "My_Decorator"
elementPrefixPath.decorator.path = "my/path/to/decorators/"
 
elements.numero.options.decorators.SimpleInput.decorator = "SimpleInput"
Évidemment à ce moment là, la configuration globale surcharge celle au niveau de l’élément. Elle n'est donc jamais utilisée.

La solution consiste à la définir coté php, dans la classe, après que l'objet ai été chargé avec le fichier de config.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
//custom_form est un objet qui crée un objet zend_form directement alimenté par mon config ini
$v_form = new Custom_Form();
$v_Element = $v_form->getElement(Custom_Form::NUMERO);
$v_Element->setDecorators(array('SimpleInput'));
Mais ça ne me convient pas. Je suite passer par les setters uniquement pour ma strategie de création d'objet.

Y a t'il une façon de faire qui permet à ces deux approches de fonctionner ensemble ?
A savoir interdire tout un ensemble de décorations mais autoriser une décoration précise sur un élément et ce toujours dans le même fichier de configuration ?