Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Une petite question, je passe à la 1.8, c'est pas de tout repos, beaucoup de mes sur-couches disparaissent (ce qui est une bonne chose, mais pas simple :p)
Bref, même si je suis contre la pratique, je test en ce moment les formulaires et les décorateurs pour voir jusqu'où on peut aller.
Pour avancer dans mes tests, j'utilise les exemples de la doc.
Problème basique, pour tester j'ai pour l'instant placé mes décorateurs dans un dossier decorators dans le dossier forms. Si on prend l'exemple de base de ZF 1.8, ce serait donc:
class Default_Form_Decorator_Composite extends Zend_Form_Decorator_Abstract { }
L'arbo:
application/ configs/ application.ini controllers/ forms/ decorators/ Composite.php Guestbook.php models/ views/ Bootstrap.php library/ public/ index.php
J'utilise l'arbo classique pour mes tests. J'ai donc dans le bootstrap:
$autoloader = new Zend_Application_Module_Autoloader(array( 'namespace' => 'Default_', 'basePath' => dirname(__FILE__), ));
Et dans le formulaire:
class Default_Form_Guestbook extends Zend_Form { public function init() { // Set the method for the display form to POST $this->setMethod('post'); $this->addPrefixPath('Default_Form_Decorator', 'forms/decorators', 'decorator'); $this->addElementPrefixPath('Default_Form_Decorator', 'forms/decorators', 'decorator'); // .... les élements du form $this->setDecorators(array('Composite')); }
Ce qui donne:
Message: Plugin by name 'Composite' was not found in the registry; used paths: Default_Form_Decorator_: forms/decorators/ Zend_Form_Decorator_: Zend/Form/Decorator/
Dans la trace il essaie de faire:
#0 G:\PHPServer\Zend\ZendServer\share\ZendFramework\library\Zend\Form.php(2321): Zend_Loader_PluginLoader->load('Composite')
J'ai essayé bêtement d'ajouter une ressource au Module_Autoloader, ce qui donne:
$autoloader = new Zend_Application_Module_Autoloader(array( 'namespace' => 'Default_', 'basePath' => dirname(__FILE__), )); $autoloader->addResourceTypes(array( 'decorator' => array( 'namespace' => 'Form_Decorator', 'path' => 'forms/decorators' ) ));
Mais pas moyen. Je me trompe soit dans un chemin, soit dans la logique du truc, mais j'aimerais bien un petit éclaircissement
Merci,
A+ benjamin.
Dernière modification par Delprog (05-07-2009 00:20:47)
Hors ligne
Je ne suis qu'un débutant dans le FW mais peut être que ma petite expérience te sera utile?
Je suis dans une arborecence tel que dans le Quickstart :: http://framework.zend.com/docs/quicksta … ur-project
jette un œil sur la fin de ce Post :
http://www.z-f.fr/forum/viewtopic.php?id=2726
en gros j'ai fait un dossier "My" dans la librairie :
Library/
Zend/
My/
Decorateur/Composite.php
et dans le ficher d'appel du formulaire :
class Default_Form_Decorator_Composite extends Zend_Form_Decorator_Abstract { $this->addPrefixPath('My_Decorator', 'My/Decorateur/', 'decorator'); //puis dans chaque éléments : $this->addElement('text', 'firstname', array('decorators' => array('Composite'), 'label' => 'Votre nom:')); }
J'espère que cela pourra t'aider.
Dede
Dernière modification par Dede (04-07-2009 20:55:09)
Hors ligne
Salut,
Oui ça fonctionne de cette manière, du moment que le dossier est dans l'include_path. Mais ce n'était pas ce que je recherchais.
Depuis, j'ai passé du temps sur Zend_Application et j'ai abordé la chose différemment.
Et, de toute façon, l'utilisation de Zend_Form, malgré les décorateurs ne répond pas à tous les cas particuliers dont j'ai besoin, donc je vais continuer avec des formulaires conventionnels un peu enrichis, dont l'organisation restera côté public.
Merci quand même pour ton aide, je vais clôturer le topic cette fois-ci
A+ benjamin.
Hors ligne
Triste de voir que ce problème n'a jamais été réglé car j'ai exactement la même situation :
Le problème:
Uncaught exception 'Zend_Loader_PluginLoader_Exception' with message 'Plugin by name 'General' was not found in the registry; used paths: Default_Form_Decorator_: forms/decorator/ Zend_Form_Decorator_: Zend/Form/Decorator/'
Voici ce que j'esseye de faire dans la classe de mon formulaire, bien sur $this est mon formulaire:
$this->addPrefixPath('Default_Form_Decorator', 'forms/decorator', 'decorator'); $this->addElementPrefixPath('Default_Form_Decorator', 'forms/decorator', 'decorator'); $this->setDecorators(array('General'));
Mon arbo:
application/
--forms/
----Form.php
----decorator/
------General.php
Je suis presque sur qu'il faut définir le dossier des décorateurs quelques part...
Dernière modification par probitaille (31-07-2009 20:07:51)
Hors ligne
Un petit up ?
Hors ligne
ReUp, j'ai le même problème que le premier message qui est totalement basé de la doc de Zend:
http://framework.zend.com/manual/fr/zen … ators.html
Hors ligne
C'est probablement un problème de lien mais pourtant j'utilise l'arbo recommandé:
/application /Controllers /forms form.php /decorators Composite.php
public function indexAction() { $form= new Default_Form_DecoratorForm(); $form->addPrefixPath('Default_Form_Decorator', 'forms/Decorator/', 'decorator'); ...
Hors ligne
Attention aux majuscules
Je crois que l'autoloader ne convertit pas les premieres lettes des mots.
Ainsi, si tu demandes Form_Decorator_Xxxx
Il faut bien les majuscules dans tes répertoires aussi Form/Decorat/Xxx.php
Dans ton message précédant, je vois une arbo /forms/decorators/ et un code qui dit forms/Decorator/ (et en plus, il manque le s !)
Vérfie tes chemins
Dernière modification par nORKy (25-08-2009 21:24:07)
Hors ligne
Ouais justement entre les deux messages j'ai fait des tests sur la nomenclature, non en effet, j'ai vérifier les majuscule, seul différence
form avec "S" $form->addPrefixPath('Default_Form_Decorator', 'forms/Decorator/', 'decorator'); et form $form->addPrefixPath('Default_Form_Decorator', 'form/Decorator/', 'decorator');
Cela n'agit pas de la même façon, ce dernier me sort plein de problème d'include du genre:
Warning: include_once(form/Decorator/FormElements.php) Warning: include_once(form/Decorator/HtmlTag.php) Warning: include_once(form/Decorator/Form.php) No such file or directory in C:\wamp\www\TestOdc\library\Zend\Loader\PluginLoader.php
Enfin, j'ai déjà perdu une bataille contre les décorators perso dans un fichier et là je me relance contre eux.
Hors ligne
Voici la solution à tous les problèmes:
$form->addPrefixPath('My_Decorator', APPLICATION_PATH.'/forms/decorators/', 'decorator'); $form->addElementPrefixPath('My_Decorator', APPLICATION_PATH.'/forms/decorators/', 'decorator');
Hors ligne
Pages: 1