Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 22-06-2009 10:32:44

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

[Résolu][ZF 1.8]Décorateurs et autoloader

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:

Code:

class Default_Form_Decorator_Composite extends Zend_Form_Decorator_Abstract
{
}

L'arbo:

Code:

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:

Code:

$autoloader = new Zend_Application_Module_Autoloader(array(
    'namespace' => 'Default_',
    'basePath'  => dirname(__FILE__),
));

Et dans le formulaire:

Code:

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:

Code:

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:

Code:

#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:

Code:

$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 smile

Merci,

A+ benjamin.

Dernière modification par Delprog (05-07-2009 00:20:47)


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#2 04-07-2009 20:50:13

Dede
Membre
Date d'inscription: 26-06-2009
Messages: 99

Re: [Résolu][ZF 1.8]Décorateurs et autoloader

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 :

Code:

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)


« Il ne faut pas lier un navire à une seule ancre, ni une vie à un seul espoir. »
Epictète
http://www.noumcreation.com

Hors ligne

 

#3 05-07-2009 00:19:56

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [Résolu][ZF 1.8]Décorateurs et autoloader

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 smile


A+ benjamin.


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#4 31-07-2009 19:55:20

probitaille
Membre
Lieu: Montréal
Date d'inscription: 20-04-2009
Messages: 336
Site web

Re: [Résolu][ZF 1.8]Décorateurs et autoloader

Triste de voir que ce problème n'a jamais été réglé car j'ai exactement la même situation :

Le problème:

Code:

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:

Code:

$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

 

#5 02-08-2009 17:11:04

probitaille
Membre
Lieu: Montréal
Date d'inscription: 20-04-2009
Messages: 336
Site web

Re: [Résolu][ZF 1.8]Décorateurs et autoloader

Un petit up ?

Hors ligne

 

#6 25-08-2009 20:34:30

probitaille
Membre
Lieu: Montréal
Date d'inscription: 20-04-2009
Messages: 336
Site web

Re: [Résolu][ZF 1.8]Décorateurs et autoloader

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

 

#7 25-08-2009 20:54:46

probitaille
Membre
Lieu: Montréal
Date d'inscription: 20-04-2009
Messages: 336
Site web

Re: [Résolu][ZF 1.8]Décorateurs et autoloader

C'est probablement un problème de lien mais pourtant j'utilise l'arbo recommandé:

Code:

/application
  /Controllers
  /forms
    form.php
    /decorators
      Composite.php

Code:

    public function indexAction()
    {
        $form= new Default_Form_DecoratorForm();
        $form->addPrefixPath('Default_Form_Decorator', 'forms/Decorator/', 'decorator');
...

Hors ligne

 

#8 25-08-2009 21:23:35

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: [Résolu][ZF 1.8]Décorateurs et autoloader

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)


----
Gruiiik !

Hors ligne

 

#9 25-08-2009 21:41:39

probitaille
Membre
Lieu: Montréal
Date d'inscription: 20-04-2009
Messages: 336
Site web

Re: [Résolu][ZF 1.8]Décorateurs et autoloader

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

Code:

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:

Code:

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

 

#10 25-08-2009 22:32:25

probitaille
Membre
Lieu: Montréal
Date d'inscription: 20-04-2009
Messages: 336
Site web

Re: [Résolu][ZF 1.8]Décorateurs et autoloader

Voici la solution à tous les problèmes:

Code:

$form->addPrefixPath('My_Decorator', APPLICATION_PATH.'/forms/decorators/', 'decorator');
$form->addElementPrefixPath('My_Decorator', APPLICATION_PATH.'/forms/decorators/', 'decorator');

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages