Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
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 :
<?php class Helper_GetWidget { public function getWidget() { return 'coucou'; } } ?>
Dans mon IndexController, fonction init(), j'ai écrit :
$view = new Zend_View(); $view->addHelperPath(ROOT_URL.'application/views/helpers', 'Helper');
Enfin, dans ma vue, j'ai écris :
<?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.
J'ai également appelé la méthode getHelperPaths pour vérification, tout est ok...
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
Dernière modification par Fadeninev (07-12-2007 14:04:17)
Hors ligne
Ton fichier est bien nommé : GetWidget.php
Hors ligne
Isilgawen a écrit:
Ton fichier est bien nommé : GetWidget.php
Oui, j'ai tout vérifié... Les noms, les chemins... Je ne comprends pas...
J'utilise la dernière release du ZF. Je vais essayer avec la version 1.0.2 pour voir, on ne sait jamais...
Dernière modification par Fadeninev (07-12-2007 14:41:39)
Hors ligne
$view = new Zend_View(); $view->addHelperPath(ROOT_URL.'application/views/helpers', 'Helper');
Si tu fais, ça, d'apprès moi ça ne marche pas si tu utilise le render automatique car une vue est déjà instancié automatiquement. Essaye ça dans ton init() :
$this->view->addHelperPath(ROOT_URL.'application/views/helpers', 'Helper');
Hors ligne
Merci Mr Moox. J'ai résolu le problème ce matin.
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 :
//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' :
class Zend_View_Helper_GetWidget { ... }
Et enfin dans ma vue je peux appeler mon helper tout simplement :
<?php echo $this->getWidget(); ?>
Dernière modification par Fadeninev (10-12-2007 16:00:34)
Hors ligne
Bonjour,
j'ai un problème similaire avec ZF 1.5 b1 sous linux. Car sous windows tout marche, mais quand je transfert sur le serveur, il n'arrive pas trouver mon helper. Sachant que c'est un serveur dédié, et les configurations du serveur et de mon poste de travail sont presque les memes.
dans mon index.php principale, j'ai la configuration suivante
$view = new Zend_View ( );
$view->addHelperPath("../application/helpers/view/","Helper_");
Zend_Controller_Action_HelperBroker::getStaticHelper ( 'viewRenderer' )->setView ( $view );
Zend_Debug::dump($view);
et un Helper que je veux utiliser dans mes views.
class Helper_LoginUrl {
public function loginUrl() {
$auth = Zend_Auth::getInstance ();
return ($auth->getStorage ()->read ()) ? "/auth/logout" : "/auth/login";
}
}
Et sur mon serveur linux j'ai l'erreur suivant :
object(Zend_View)#56 (12) {
["_path:private"] => array(3) {
["script"] => array(0) {
}
["helper"] => array(2) {
[0] => array(2) {
["prefix"] => string(7) "Helper_"
["dir"] => string(28) "../application/helpers/view/"
}
[1] => array(2) {
["prefix"] => string(17) "Zend_View_Helper_"
["dir"] => string(49) "/srv/Zend/ZendFramework/library/Zend/View/Helper/"
}
}
["filter"] => array(1) {
[0] => array(2) {
["prefix"] => string(17) "Zend_View_Filter_"
["dir"] => string(49) "/srv/Zend/ZendFramework/library/Zend/View/Filter/"
}
}
}
["_file:private"] => NULL
["_helper:private"] => array(0) {
}
["_helperLoaded:private"] => array(0) {
}
["_helperLoadedDir:private"] => array(0) {
}
["_filter:private"] => array(0) {
}
["_filterClass:private"] => array(0) {
}
["_filterLoaded:private"] => array(0) {
}
["_filterLoadedDir:private"] => array(0) {
}
["_escape:private"] => string(16) "htmlspecialchars"
["_encoding:private"] => string(10) "ISO-8859-1"
["_strictVars:private"] => bool(false)
}
Fatal error: Uncaught exception 'Zend_View_Exception' with message 'helper 'Login' not found in path' in /srv/Zend/ZendFramework/library/Zend/View/Abstract.php:1000 Stack trace: #0 /srv/Zend/ZendFramework/library/Zend/View/Abstract.php(493): Zend_View_Abstract->_loadClass('helper', 'Login') #1 /srv/Zend/ZendFramework/library/Zend/View/Abstract.php(294): Zend_View_Abstract->getHelper('login') #2 [internal function]: Zend_View_Abstract->__call('login', Array) #3 /srv/www/vhosts/dev.art-in-progress.com/application/modules/default/views/scripts/header.phtml(7): Zend_View->login() #4 /srv/Zend/ZendFramework/library/Zend/View.php(46): include('/srv/www/vhosts...') #5 /srv/Zend/ZendFramework/library/Zend/View/Abstract.php(765): Zend_View->_run('../application/...') #6 /srv/Zend/ZendFramework/library/Zend/View/Helper/Partial.php(103): Zend_View_Abstract->render('header.phtml') #7 /srv/Zend/ZendFramework/library/Zend/View/Abstract.php(300): Zend_View_Helper_Partial->partial('header.phtml') #8 [internal function]: Zend_View_Abstrac in /srv/Zend/ZendFramework/library/Zend/View/Abstract.php on line 1000
Hors ligne
Pages: 1