Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
je rencontre actuellement un problème avec les helpers que je n'arrive pas à saisir.
Le contexte :
J'ai mes helpers personnalisés dans application/view/helpers/
Je les déclare dans le bootstrap.
Jusque là tout va bien.
J'y fais appel dans mes scripts de view avec la syntaxe suivante : $this->view->monHelper($param1, $param2, etc.)
Mais si je les utilise de cette façon :
$inst = new Zend_View_Helper_MonHelper();
L'autoload de Zend me renvoie une erreur. Warning: Zend_Loader::include_once(Zend\View\Helper\MonHelper.php)
Et comme j'ai besoin de certains helpers dans d'autres helpers, dans ces derniers je les déclare de cette façon. Mais la plupart du temps, Zend me renvoie une erreur, car il va les chercher uniquement dans Zend/View/helper/ Il n'y en a qu'un qui marche, c'est le fameux BaseUrl qui est aussi dans application/views/helpers/.
Dans mon Bootstrap, j'ai ceci :
$view->addHelperPath('./application/views/helpers');
Quelqu'un a-t-il une idée ?
Merci,
Hors ligne
Hello,
Les helpers commençant par Zend sont les officiels. Normalement tu devrais faire :
$view->addHelperPath('./application/views/helpers','Mes_Aides'); // puis $inst = new Mes_Aides_MonHelper(); // ou $this->view->monHelper($param1, $param2, etc.);
Mais je pense que ce n'est pas ton problème . En fait, je pense que l'instance $view que tu paramètres dans ton bootstrap n'est pas celle utilisée ensuite dans $this->view. Si tu utilises le viewRenderer, tu dois affecter ta $view dans ton bootstrap :
$view = new Zend_View(); $view->addHelperPath('./application/views/helpers','Mes_Aides'); $view->doctype('XHTML1_TRANSITIONAL'); Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer')->setView($view);
A+
Dernière modification par mikaelkael (26-10-2008 13:21:21)
Hors ligne
Tu peux pas faire un "new Ma_Classe_Daide_De_Vue()", car Zend_Loader n'est pas au courant de tes scriptsPaths.
Par contre ta vue peut (si t'as déclaré tes chemins avec addScriptPath() ) te pondre un helper (getHelper()), car elle utilise Zend_Loader_PluginLoader pour trouver la classe.
Attention aussi aux instances de vues comme l'a dit Mickael plus haut.
Hors ligne
Merci pour vos réponses,
j'ai repris tes lignes pour les adapter à mon code. Renommer mes helpers en Custom_Helper. Bon ça marche toujours quand je fais $this->view->pouet. Cela dit, je ne comprends pas concrètement comment faire fonctionner un helper dans un autre helper. Je veux bien rajouter addScriptPath dans le init() du controller, etc. mais cela ne change rien.
Merci
Hors ligne
Et aussi, je ne comprends pas pourquo quand je fais "new Custom_Helper_BaseUrl();" dans un autre helper, celui-ci marche très bien et pas les autres. Alors que la syntaxe est identique.
Hors ligne
Hello,
Pour appeler un helper dans un autre helper :
class Monhelper extends Zend_View_Helper_Abstract { public function monhelper() { $autrehelper = $this->view->url(array('action'=>'toto')); // par exemple } }
A+
Hors ligne
Salut,
merci, effectivement j'oubliais de le les faire hériter de Zend_View_Helper_Abstract
Hors ligne