Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour, j'ai divisé plusieurs scripts dans des views helpers.
J'aimerais savoir si c'est possible d'appeler des views helpers dans un helper pour ne pas répéter mon code. Certains vont dire mais pourquoi tu fais cela. Et bien j'ai différent niveau de complexité de helpers qui créé des liens avec ma base de donnés et c'est vraiment une question pour réduire le code.
Bref, ce qui est sur c'est qu'on ne peut faire ceci:
$this->myHelper()
Évidament puisque le $this n'est pas la vue en question...quelqu'un a une idée ?
Hors ligne
Hum.
Je sais pas comment est structuré ton application, mais tu ne peux pas utiliser l'héritage et faire après des appels des appels de méthodes dans chaque helper que tu developpes ?
Hors ligne
salut ,
moi je fait comme ça :
class Zend_View_Helper_Logout { public $view; public function setView(Zend_View_Interface $view) { $this->view = $view; } function logout($action = null) { $auth = Zend_Auth::getInstance()->getIdentity(); $string = 'vous êtes connecté en tant que : ' . $auth->LOGIN_UTL . ' '; $string = $string . "<a href=" . $this->view->url(array('controller' => 'index' , 'action' => 'logout')) . ">" . "Déconnexion</a> " ; if ($action == null) { $string = $string . " <a href=" . ' ' . $this->view->url( array('controller' => 'utilisateurs' ,'action' => 'index')) . ">" . "Retour" . "</a>" ; } return $string; } }
setView est appelé implicitement pour avoir l'objet view(appelant le helper en cours d'execution) dans votre herper,en ayant ce dernier vous pouvez appelé n'importe quel view helper ,comme dans le code si dessus : $this->view->url
en fait j'ai trouvé ce truc quelque part sur un blog et je l'ai interpreter et utiliser a ma façon ,j'espere que ce raisonnement est correct , merci de commenter si ce n'est pas le cas
Dernière modification par oswalidos (06-08-2009 18:46:18)
Hors ligne
Oh wow, c'est pas si mal comme solution, bon il faut répéter setView un peu partout mais c'est toujours moins de code qu'une fonction complète ! Merci !
Hors ligne
Ton script fonctionne bien sauf un problème, lorsque je fais appel à $this->view->MonHelper dans un autre helper, le code fonctionne bien sauf que cette ligne :
$this->view->connexionBd()
Elle génère un espèce de saut de ligne non désiré. J'ai remarqué que si j'inclus la fonctionne appeler directement dans le même helper (donc ici la fonctionne connexionBd() dans le helper où je programme) l'espace vide n'est plus là.
C'est comme si $this->view retournais un champs vide en créant un saut de ligne. Après vérification dans firebug. Le code html est généré avec un espace vide:
<div> Texte provenant de la bd. </div>
Donc, dans firebug, tout suite apres l'ouverture de la division, il y a cette espace vide. As-tu eu ce problème ?
Hors ligne
oswalidos a écrit:
setView est appelé implicitement pour avoir l'objet view(appelant le helper en cours d'execution) dans votre herper,en ayant ce dernier vous pouvez appelé n'importe quel view helper ,comme dans le code si dessus : $this->view->url
Comment ça il est appelé "implicitement" ? Je ne vois à quel moment la méthode est appelée
Hors ligne
En fait je me suis posé la question et testé son code et en effet, d'une certaine façon, cette fonction est appeler par un autre moyen.
Hors ligne
C'est le framework qui l'appelle automatiquement
CF http://framework.zend.com/manual/fr/zen … ers.custom en bas
Hors ligne
Ok merci
Hors ligne
hello,
on peut aussi faire dériver son helper de Zend_View_Helper_Abstract, du coup la method setView n'a plus besoin d'etre redéclarée
Hors ligne
bonjour,
je sais pas si c'est hors sujet mais comment on fait pour récupérer views helpers dans un validate (Zend_Validate).
j'ai essayé :
public function setView(Zend_View_Interface $view) { $this->view = $view; }
Mais ça n'a pas l'air de fonctionner.
Merci
Dernière modification par GueloSuperStar (21-08-2009 15:41:50)
Hors ligne
Dans un fichier validate ? Est-ce que tu me nous montrer à quoi ressemble ce fichier ?
Sinon, oublie pas le public $view dans ton code.
public $view; public function setView(Zend_View_Interface $view) { $this->view = $view; }
Hors ligne
Le fichier se trouve dans library/App/Validate/
class App_Validate_CheckMail extends Zend_Validate_Abstract{ const CHECKEMAIL = 'checkemail'; public $_view; public function setView(Zend_View_Interface $view){ $this->_view = $view; } protected $_messageTemplates = array( self::CHECKEMAIL => "'%value' is not a valid email" ); public function isValid($value) { ......... } }
J'ai l'impression que je ne rentre pas dans la fonction setView()
Merci
Dernière modification par GueloSuperStar (24-08-2009 08:56:57)
Hors ligne
GueloSuperStar, le fichier se trouve dans library/app/Validate ?
C'est donc un fichier que tu as ajouté toi-même à la librairie de Zend, je crois que c'est peut-être parce que ton fichier ne se trouve pas dans les helpers qu'il ne reconnait pas la vue. Mais faut dire que je n'ai pas vraiment travailler avec les validate. Un autre point, tu signales que le setView ne semble pas fonctionner mais on ne vois pas dans ton code où est-ce que tu utilise le "$this->view->monHelper()"
Hors ligne
probitaille mon fichier se trouve bien à library/App/Validate/
On ne voit pas "$this->view->monHelper()" car il est dans ma fonction isValid.
Je n'ai toujours pas trouver de solution simple et toi ?
Hors ligne
Perso je comprends pas trop, Zend_Validate n'est pas une aide de vue, et n'implémente pas Zend_View_Helper_Abstract (si ?), auquel cas il est probablement normal qu'il n'ait pas de lien avec la vue en cours.
Hors ligne
Je le répète, je n'ai pas travaillé précisément avec les validate mais il me semble qu'ils doivent être associé avec des formulaires non ?
Et puis ce qui pourrait aider, c'est de comprendre dans quel context tu aimerais utiliser un validate, peut-être qu'il y a plus simple même ? Et on n'est pas sensé ajouter des fichiers à l'intérieur de la library, tout doit ce faire dans application normalement ce qui peut troublé les chemins pour relier avec les views helpers.
Hors ligne
Les validate sont pas forcement associé à des formulaires nécessairement, tu peux les utiliser un peu ou tu veux je crois.....
Ba ce que je veux faire c'est de créer un validate pour mon formulaire d'authentification afin de vérifier si le mail utilisateur est est bien en base.
Pour les fichiers je pensais que les filtres, validate et plugin ce mettaient dans librairie/Namespace moi nan?
Hors ligne
Hello,
J'utilise des validateurs pour vérifier l'existence d'un login ou d'un mail en base. Sinon il existe le validateur standard Zend_Validate_Db_RecordExist ou qqch comme ça.
A+
Hors ligne
Oui je l'ai vu celui la mais pas encore pratiqué.
Moi le petit problème que j'ai est que les mail de mes client sont situé sur un BASE de donnée en ensuite par rapport à leurs informations dans cette base je doit me connecté à une autre et donc chaque utilisateur à sa propre base de donnée et je rencontre quelque difficulté pour switcher de base en base....
Donc c'est pour ça que je fait un validate pour voir si dans la base il s'y trouve et après j'enchaine avec l'identification (auth).
Si quelqu'un aurait une idée pour faire un traitement propre, je suis preneur .
Merci
Hors ligne
Pour revenir au sujet, ce n'est pas forcément la panacée de mettre la vue dans le helper, on peut plus simplement faire un appel tel que :
Zend_Controller_Action_HelperBroker::getStaticHelper('FlashMessenger')->addMessage('mon message');
Par exemple
Hors ligne