IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend Framework PHP Discussion :

[Zend_View_Helper] Problème avec un helper personnalisé pour ma vue


Sujet :

Zend Framework PHP

  1. #1
    Membre régulier
    Profil pro
    Développeur Web
    Inscrit en
    Décembre 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2005
    Messages : 110
    Points : 77
    Points
    77
    Par défaut [Zend_View_Helper] Problème avec un helper personnalisé pour ma vue
    Bonjour !

    Je suis en train de travailler sur une vue, et j'aurais besoin d'un helper parce que j'ai du code html récurrent dans mes pages et qu'il serait beaucoup mieux pour la lisibilité que ce code soit renvoyé par un helper.
    J'ai suivi la documentation Zend. J'ai donc :
    - crée un fichier 'NomDeMonHelper.php"
    - dans lequel j'ai défini une classe "Helper_NomDeMonHelper"
    - dans laquelle j'ai défini une méthode publique "nomDeMonHelper"

    Voilà ce fichier :
    Code GetWidget.php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
     
    class Helper_GetWidget {
     
    	public function getWidget() {
    		return 'coucou';
    	}
    }
    ?>

    Dans mon IndexController, fonction init(), j'ai écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $view = new Zend_View();
    $view->addHelperPath(ROOT_URL.'application/views/helpers', 'Helper');
    Enfin, dans ma vue, j'ai écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo $this->getWidget(); ?>
    A l'exécution, j'ai l'erreur suivante :
    Uncaught exception 'Zend_View_Exception' with message 'helper 'GetWidget' not found in path' in C:\wamp\www\...\Zend\View\Abstract.php:1004 Stack trace: #0 C:\wamp\www\...\Zend\View\Abstract.php(497)
    Le chemin que j'ai donné est bien valide, je l'ai affiché pour voir si la constante ROOT_URL était bien interprétée.

    D'après vous d'où peut venir le problème ? Si ça se trouve il saute aux yeux, mais je commence à loucher sur mon code

    Merci d'avance

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    Bonjour,

    le nom de la méthode est ok.

    essaie avec un underscore, je pense que ca ira mieux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $view->addHelperPath(ROOT_URL.'application/views/helpers', 'Helper_');

  3. #3
    Membre régulier
    Profil pro
    Développeur Web
    Inscrit en
    Décembre 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2005
    Messages : 110
    Points : 77
    Points
    77
    Par défaut
    Citation Envoyé par _julz_ Voir le message
    Bonjour,

    le nom de la méthode est ok.

    essaie avec un underscore, je pense que ca ira mieux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $view->addHelperPath(ROOT_URL.'application/views/helpers', 'Helper_');
    Dans la doc ils disent qu'on peut préciser ou pas cet underscore, au choix.
    Je viens d'essayer quand même, ça ne fonctionne pas mieux. Même erreur.

    Merci pour ta réponse.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    mon code qui marche :
    Dans le bootstrap:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $view= new Zend_View();
    //add helpers        
    $view->addHelperPath('My/View/Helper/', My_View_Helper_');
    require_once 'My/View/Helper/NomHelper.php';
    Dans le template :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo $this->NomHelper();
    Verifie bien ton chemin.

    Sinon regarde les chemins des helpers stockées dans ta vue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var_dump($view->getHelperPaths());

  5. #5
    Membre régulier
    Profil pro
    Développeur Web
    Inscrit en
    Décembre 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2005
    Messages : 110
    Points : 77
    Points
    77
    Par défaut
    Ca ne fonctionne pas non plus avec le require_once.

    J'avais déjà fais appel à la méthode getHelperPaths() pour vérifier, avant de poster ma question sur le forum

    Je ne vois pas ce que ça peut être... D'autres suggestions ?

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    hmm mystère...

    quelle est ta version du framework ?

    fais voir ton var_dump() de view qd même s'il y a pas quelque chose louche.

  7. #7
    Membre régulier
    Profil pro
    Développeur Web
    Inscrit en
    Décembre 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2005
    Messages : 110
    Points : 77
    Points
    77
    Par défaut
    Citation Envoyé par _julz_ Voir le message
    hmm mystère...

    quelle est ta version du framework ?

    fais voir ton var_dump() de view qd même s'il y a pas quelque chose louche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array(2) { [0]=>  array(2) { ["prefix"]=>  string(7) "Helper_" ["dir"]=>  string(54) "http:\\localhost\...\application\views\helpers\" } [1]=>  array(2) { ["prefix"]=>  string(17) "Zend_View_Helper_" ["dir"]=>  string(48) "C:\wamp\www\...\library\Zend\View\Helper\" } }
    J'utilise le Zend Framework Release 1.0.3 (revision 6986 pour être précise ! )

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    C'est normal,

    tu ne dois pas passer une url mais le chemin complet vers ton repertoire,

    Exemple :

    windows : C:\wamp\path\application\helpers\

    linux : /home/name/application/helpers/

    ca doit marcher sans problème après ce changement.

    Ps: De même que dans ROOT_URL tu as stocké l'url racine, tu peux stocker dans ROOT_DIR le chemin vers ton application

  9. #9
    Membre régulier
    Profil pro
    Développeur Web
    Inscrit en
    Décembre 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2005
    Messages : 110
    Points : 77
    Points
    77
    Par défaut
    Citation Envoyé par _julz_ Voir le message
    C'est normal,

    tu ne dois pas passer une url mais le chemin complet vers ton repertoire,

    Exemple :

    windows : C:\wamp\path\application\helpers\

    linux : /home/name/application/helpers/

    ca doit marcher sans problème après ce changement.

    Ps: De même que dans ROOT_URL tu as stocké l'url racine, tu peux stocker dans ROOT_DIR le chemin vers ton application

    J'y ai cru mais ça ne fonctionne pas non plus

    array(2) { [0]=> array(2) { ["prefix"]=> string(7) "Helper_" ["dir"]=> string(49) "C:\wamp\www\...\application\views\helpers\" } [1]=> array(2) { ["prefix"]=> string(17) "Zend_View_Helper_" ["dir"]=> string(48) "C:\wamp\www\...\library\Zend\View\Helper\" } }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $view->addHelperPath(APP_DIR.'application/views/helpers', 'Helper');
    Je suis déséspérée

    J'ai exactement la même erreur...

    Tu utilises quelle version ? Je vais essayer de repasser à la 1.0.2 pour voir...

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    j'ai la version 1.0.3 (stable)

    mais c'est le chemin je pense.

    Vérifie que le chemin est bon ( si tu n'es pas sûre ne garde pas dans ton chemin du relatif, mais copie le chemin indiqué par windows qd tu es dans le dossier voulu )

    Verifie que tu as bien appelé le fichier avec require_once (ou autre include etc..)

    et tout ce qu'on a dit avant reste bon

  11. #11
    Membre régulier
    Profil pro
    Développeur Web
    Inscrit en
    Décembre 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2005
    Messages : 110
    Points : 77
    Points
    77
    Par défaut
    Citation Envoyé par _julz_ Voir le message
    j'ai la version 1.0.3 (stable)

    mais c'est le chemin je pense.

    Vérifie que le chemin est bon ( si tu n'es pas sûre ne garde pas dans ton chemin du relatif, mais copie le chemin indiqué par windows qd tu es dans le dossier voulu )

    Verifie que tu as bien appelé le fichier avec require_once (ou autre include etc..)

    et tout ce qu'on a dit avant reste bon
    Bon j'ai vérifié les chemins 25 000 fois, je n'ai pas trouvé d'erreurs...
    En attendant, j'ai trouvé une solution pour contourner le problème.
    Dans le controller, j'affecte l'objet helper à une variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $view = new Zend_View();
    $view->setHelperPath(APP_DIR.'application/views/helpers', 'Helper');
    $this->view->helper = $view->getHelper('GetWidget');
    Puis, dans ma vue, j'appelle une méthode du helper en passant par cet objet...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo $this->helper->getDebutWidget('test', $this->imgDir); ?>
    Si quelqu'un a des suggestions, je prends !
    Merci pour ton aide julz.

  12. #12
    Membre régulier
    Profil pro
    Développeur Web
    Inscrit en
    Décembre 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2005
    Messages : 110
    Points : 77
    Points
    77
    Par défaut
    Ca y est j'ai trouvé la solution (merci à Benjamin s'il passe par ici ).

    La documentation officielle semble erronée, visiblement on ne peut pas redéfinir comme on veut le préfixe de la classe. J'avais passé en paramètre le préfixe 'Helper' et ça n'avait pas l'air de plaire au ZF.

    J'ai retenté ma chance sans préciser de préfixe, et carrément en supprimant l'instruction qui donnait le chemin vers le helper (si on respecte la structure de répertoire application/views/helpers/monHelper.php normalement pas besoin de préciser le chemin avec la méthode addHelperPath().

    Du coup dans mon controller j'ai supprimé l'instruction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //Paramètre 1 : chemin vers les helpers
    //Paramètre 2 : préfixe personnalisé
    $view->addHelperPath( $this->_request->getBaseUrl().'application/views/helpers', 'Helper');
    Dans mon helper j'ai changé le nom de la classe en remplaçant le préfixe 'Helper' par le préfixe "officiel" 'Zend_View_Helper' :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class Zend_View_Helper_GetWidget 
    {
    ...
    }
    Et enfin dans ma vue je peux appeler mon helper tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo $this->getWidget(); ?>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec html-helper-mode pour emacs
    Par Vyrob dans le forum Applications et environnements graphiques
    Réponses: 1
    Dernier message: 17/01/2011, 23h17
  2. [XML] problème avec :content et :before pour un XML
    Par sab_etudianteBTS dans le forum Mise en page CSS
    Réponses: 9
    Dernier message: 21/01/2007, 15h49
  3. Réponses: 2
    Dernier message: 29/08/2006, 14h59
  4. Réponses: 6
    Dernier message: 15/06/2006, 16h15
  5. [JMeter] Problème avec la boucle infinie pour les tests
    Par zegreg dans le forum Tests et Performance
    Réponses: 1
    Dernier message: 05/10/2005, 12h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo