Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework
Zend Framework Forum d'entraide sur la programmation PHP avec Zend Framework. Avant de poster -> FAQ ZF, Cours ZF
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/12/2007, 11h38   #1
Membre du Club
 
Développeur Web
Inscription : décembre 2005
Messages : 110
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2005
Messages : 110
Points : 45
Points : 45
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 :
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 :
1
2
3
 
$view = new Zend_View();
$view->addHelperPath(ROOT_URL.'application/views/helpers', 'Helper');
Enfin, dans ma vue, j'ai écris :
Code :
<?php echo $this->getWidget(); ?>
A l'exécution, j'ai l'erreur suivante :
Citation:
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
fadeninev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 12h12   #2
Candidat au titre de Membre du Club
 
Inscription : juillet 2006
Messages : 17
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 17
Points : 11
Points : 11
Bonjour,

le nom de la méthode est ok.

essaie avec un underscore, je pense que ca ira mieux

Code :
1
2
 
$view->addHelperPath(ROOT_URL.'application/views/helpers', 'Helper_');
_julz_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 12h15   #3
Membre du Club
 
Développeur Web
Inscription : décembre 2005
Messages : 110
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2005
Messages : 110
Points : 45
Points : 45
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 :
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.
fadeninev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 12h23   #4
Candidat au titre de Membre du Club
 
Inscription : juillet 2006
Messages : 17
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 17
Points : 11
Points : 11
mon code qui marche :
Dans le bootstrap:
Code :
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 :
1
2
 
echo $this->NomHelper();
Verifie bien ton chemin.

Sinon regarde les chemins des helpers stockées dans ta vue
Code :
1
2
 
var_dump($view->getHelperPaths());
_julz_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 13h42   #5
Membre du Club
 
Développeur Web
Inscription : décembre 2005
Messages : 110
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2005
Messages : 110
Points : 45
Points : 45
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 ?
fadeninev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 13h48   #6
Candidat au titre de Membre du Club
 
Inscription : juillet 2006
Messages : 17
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 17
Points : 11
Points : 11
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.
_julz_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 13h51   #7
Membre du Club
 
Développeur Web
Inscription : décembre 2005
Messages : 110
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2005
Messages : 110
Points : 45
Points : 45
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 :
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 ! )
fadeninev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 14h06   #8
Candidat au titre de Membre du Club
 
Inscription : juillet 2006
Messages : 17
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 17
Points : 11
Points : 11
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
_julz_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 14h10   #9
Membre du Club
 
Développeur Web
Inscription : décembre 2005
Messages : 110
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2005
Messages : 110
Points : 45
Points : 45
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

Citation:
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 :
$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...
fadeninev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 14h25   #10
Candidat au titre de Membre du Club
 
Inscription : juillet 2006
Messages : 17
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 17
Points : 11
Points : 11
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
_julz_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 15h46   #11
Membre du Club
 
Développeur Web
Inscription : décembre 2005
Messages : 110
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2005
Messages : 110
Points : 45
Points : 45
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 :
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 :
<?php echo $this->helper->getDebutWidget('test', $this->imgDir); ?>
Si quelqu'un a des suggestions, je prends !
Merci pour ton aide julz.
fadeninev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2007, 09h46   #12
Membre du Club
 
Développeur Web
Inscription : décembre 2005
Messages : 110
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2005
Messages : 110
Points : 45
Points : 45
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 :
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 :
1
2
3
4
class Zend_View_Helper_GetWidget 
{
...
}
Et enfin dans ma vue je peux appeler mon helper tout simplement :
Code :
<?php echo $this->getWidget(); ?>
fadeninev est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h30.


 
 
 
 
Partenaires

Hébergement Web