Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
bonjour à tous,
on met ce $this partout, et finalement, il ne correspond pas toujours au même objet.
ma première question est donc : y-a-il un moyen de savoir à quel objet il fait référence ?
ma deuxième question et mon problème du moment : je voulais savoir dans le layout quels sont le contrôleur et l'action en cours.
au sein d'un contrôleur, $this->getRequest()->getActionName fonctionne très bien.
mais dans le layout, le fameux objet $this ne connait pas getRequest().
qu'à cela ne tienne, j'ai essayé :
$controller->getRequest()->getActionName : pas mieux
puis j'ai essayé un déclarant l'instance explicitement :
$controller = Zend_Controller_Front::getInstance();
et encore
$controller = new Zend_Controller_Front;
toujours pas bon !!!
du coup, je commence à sécher du coté des solutions.
des idées, quelqu'un ?
merci d'avance
Hors ligne
Déja le layout est une vue.
ensuite depuis une vue tu peux faire:
<?php $request = Zend_Controller_Front::getInstance()->getRequest(); $disp .= "<br/><h1>Curently viewing:</h1>"; $disp .= "<h2>Module:</h2> ".$request->getModuleName()."<br/>"; $disp .= "<h2>Controller:</h2> ".$request->getControllerName()."<br/>"; $disp .= "<h2>Action:</h2> ".$request->getActionName()."<br/>"; echo $disp; ?>
je ne peux que fortement te conseiller de lire et relire la doc officielle dans tous les sens avant d'aller plus loin
http://framework.zend.com/manual/en/
Dernière modification par lethak (21-08-2008 19:02:05)
Hors ligne
C'est quand même mieux en francais
http://framework.zend.com/manual/fr/
Merci encore à ceux qui se sont donner la peine de traduire la doc
Desolé pour le HS
Hors ligne
Salut,
un petit rappel de base au cas où (on ne sait jamais, ne te fâche pas si tu connais déjà tout ça sur le bout des doigts ^^)
$this correspond à l'occurrence de la classe dans laquelle ton code est exécuté. Lorsque tu utilises des classes en php ça se passe comme ça :
// dans ta page $toto = new myToto(); // tu peux utiliser l'occurrence de myToto $toto->pouet();
mais dans la classe myToto, les méthodes peuvent avoir à s'appeler "entre elles"
class myToto { public function pouet () { return $this->_pouet(); } protected function _pouet () { return "pouet"; } }
$this change donc de signification en fonction du contexte, si tu l'utilises dans un script de vue, ou si tu l'utilises dans une action il correspondra à l'occurrence de Zend_View ou de Zend_Controller_Action
Hors ligne
Alors merci à Grandlap pour la réponse sur $this, même si je ne sais toujours pas déterminer la classe de $this (même selon les contextes usuels, depuis un controlleur, une vue, un modèle, etc.).
Merci à lethaK pour le code qui marche. Par contre, pour le "RTFM", la formulation me déconcerte un peu.
"lire et relire" : alors, 2 fois seulement ?
"avant d'aller plus loin" : je n'écris plus de code d'avoir tout lu 2 fois ?
Certes, j'aurais sûrement fait un grand pas en avant dès que j'aurais eu le temps de digérer toute la doc de Zend, mais en attendant, la question "pourquoi" me taraude : est-ce que ce genre d'idée relève d'une conception globale catastrophique ?
Hors ligne
Remy, il faudrait probablement que tu (re)lises le manuel concernant les classes et objets de php5:
http://fr2.php.net/manual/en/language.oop5.php
Je suis d'accord qu'il y a un cas où l'utilisation de $this dans le ZF est, comment dire, non conventionnelle. Cela concerne les scripts de vues. Dans ces fichiers, $this est une référence sur un objet qui implémente Zend_View_Interface. Généralement, le type de l'objet (sa classe) est Zend_View.
"la question "pourquoi" me taraude : est-ce que ce genre d'idée relève d'une conception globale catastrophique"
Tu veux parler de "$this" tel qu'il est employé dans ZF ? C'est un paradigme très répandu en POO qui va bien au delà de php
Hors ligne
Hello,
Je conçois aisément la difficulté de lire la doc complète pour un débutant (fichier PDF d'environ 900 pages !).
Cependant il faut savoir que la majeure partie des questions posées sur ce forum trouvent leur réponse dans la doc.
A+
Hors ligne
mikaelkael a écrit:
Hello,
Je conçois aisément la difficulté de lire la doc complète pour un débutant (fichier PDF d'environ 900 pages !).
Cependant il faut savoir que la majeure partie des questions posées sur ce forum trouvent leur réponse dans la doc.
A+
amen ! je l'ai lue presque 4 fois avant de me lancer dans un developpement sérieux et là encore j'y reviens sans arrêt, déjà car elle évolue vite, et ensuite car c'est en lisant/relisant que je mémorise et assimile les infos.
si je n'ai pas compris un point au moins de A à X alors je ne me lance pas dans le code, tout juste des tests pratique pour tester et comprendre.
au début j'ai du misérer et m'accrocher pour saisir les concepts et la philosophie du ZF, et maintenant que c'est aquis, je me dit oula ! que de chemin parcourus depuis le début finalement
bref RTFM
Hors ligne
Salut,
quelle chance tu as lethak d'avoir le temps de lire la doc avant de te lancer dans le développement !
Personnellement, et après avoir passé quelques journée à faire le tour des tutos pour voir si zf pouvait répondre à mes besoins et voir si je pouvais réussir à me débrouiller, je me suis lancé. Certes la démarche est délicate, car il faut répondre aux impératifs de temps d'exécution du projet tout en essayant au mieux de rentrer et de comprendre la logique du framework, cependant, c'est pour moi le meilleur moyen d'apprendre, vu que je n'ai pas le choix. Et un forum comme celui là est une mine d'information pour un apprenti (un p'tit merci en passant).
Cependant, je ne me serais pas lancé dans mon développement avec zf si je n'avais pas eu de sérieuses bases de POO.
Quant à la question de "où c'est que j'me trouve ?", merci kitpages pour son graph de séquence globale http://www.kitpages.fr/cms/site/tutoria … lobale.jpg
En somme, zf propose et permet un approche objet de la création d'un projet, il faut donc, Remy, si tu veux utiliser zf pour ton projet, savoir ce que signifie programmation orientée objet. Si ce n'est pas le cas, il faut que tu te documentes. Un des gros avantages de zf, c'est aussi que tu peux utiliser ses classes pour un développement non objet. Dans tous les cas, c'est super important de lire la doc, ou de lire les tutos. Perso, je commence toujours par les tutos avant de me lancer dans la doc, j'ai besoin de comprendre avec des exemples
Hors ligne
quode a écrit:
"la question "pourquoi" me taraude : est-ce que ce genre d'idée relève d'une conception globale catastrophique"
Tu veux parler de "$this" tel qu'il est employé dans ZF ? C'est un paradigme très répandu en POO qui va bien au delà de php
Eh non, je veux parler de ma conception d'appli, et du fait que je suis peut-être en train d'utiliser quelque chose à mauvais escient.
Merci à Granlap pour le schéma.
Et effectivement, Lethak, je suis comme Granlap : pas le temps de me taper les 900 pages de doc 4 fois.
Heureusement, ce genre de forum permet d'avancer malgré tout.
La tentation est de ne plus chercher du tout et de poster tout de suite sur le forum. Je ne le fais pas.
Maintenant, je rappelle ma première question :
"y-a-il un moyen de savoir à quel objet il fait référence ?"
Quode dit "généralement, c'est ..."
Granlap dit "pour les vues, c'est ..., pour les controlleurs ..."
mais j'aimerais avoir un "vrai" moyen, qui marche à chaque coup.
Je repose ma question différemment :
sous Eclipse, dans un controlleur, si je mets la souris sur "$this", il me dit "Extends Zend_Controller_Action"
Et là, je sais la classe (cool !).
Mais dans un layout ou une vue, il ne me dit rien.
La question est donc (même si je connais maintenant la réponse pour les vues, merci) :
Comment aurais-je pu faire pour récupérer la classe de $this dans la vue (autrement qu'en scannant la doc ou en l'apprenant par coeur) ?
Et dissipons un malentendu : je fais de la POO depuis 25 ans. Je ne crois pas être totalement débutant en la matière (et je ne me prêtant pas expert non d'ailleurs).
Mais c'est la première fois que je vois un système qui donne partout le même nom à un objet principal alors que sa classe change suivant les contextes.
Dans mon expérience, le développeur qui utilisait dans toute l'appli le même nom de variable à des fins différentes se voyait rapidement attribuer des noms d'oiseaux... bref, passons.
Hors ligne
echo get_class($this);
Hors ligne
Remy a écrit:
Comment aurais-je pu faire pour récupérer la classe de $this dans la vue (autrement qu'en scannant la doc ou en l'apprenant par coeur) ?
Pour la vue ou le layout tu n'as pas le choix, il faut "savoir" que $this est du type Zend_View, soit en lisant la doc ou en scannant les sources ou en le découvrant soi même (Cf. nORKy). Les scripts de vue et de layout sont injectés dans des méthodes de Zend_View donc $this se retrouve être un objet Zend_View. La variable "$this" permet d'avoir accès à toutes les méthodes de Zend_View au sein du script. Si la variable avait été nommée autrement, ça n'aurait pas été possible, du moins sans compliquer les choses.
Hors ligne
Tu peux même faire un print_r($this), t'aura toutes les informations concernant l'objet courant ($this). Tu devrais simplement faire quelques recherches sur la POO, ça t'aiderais peut-être plus à comprend ce que veut dire ($this).
Hors ligne
$this est toujours l'objet sur le quel la méthode à été invoqué.
dans les phtml de ZF il n'y a pas d'ambiguïté le script phtml est inclus par la classe View
this est donc la vue
A+JYT
Hors ligne
nORKy a écrit:
echo get_class($this);
+1
en ce qui concerne le temps pour lire la doc avant de foncer dans le tas, il m'est apparus indispensable de le faire plutôt que de perdre du temps a revenir sans arrêts sur des questionnements structurels liés au ZF.
Le soir, au lieu de mater l'île de machin ou secret-bidule (et me faire chier donc...) , j'ai trouvé que la lecture de la ZFDoc pouvait être autrement plus productive
sans compter les nombreuses heures a arpenter les forums comme celui ci ( encore merci a toute la communauté )
pour moi en ce qui concerne le célèbre "RTFM", l'excuse du temps n'est qu'un moyen de se voiler la face : manque de motivation ?
effort/sacrifice a fournir trop grand comparé a ce que l'on en retire ensuite ?
tout dépend de l'objectif de chacun.
ne voir la aucune offense, juste une déduction de mes errances personnelles.
Hors ligne
Merci à tous.
au final, je me dis que ma question vient de ma jeunesse vis-à-vis de PHP/POO (quand même un peu particulier) et ZF.
et pour le coup, je le sais : au début, il faut bouffer de la doc !
CQFD (n'est-ce pas, lethak !)
ceci dit, le temps est effectivement un problème. je n'ai pas la télévision, mais une femme et des enfants. Et de fait, le PHP passe après eux (question d'age ?).
un tel forum est donc très précieux
merci encore à tous
Hors ligne
Moi aussi, j'ai une femme, 1 enfants, la télévision, 2 chiens et un ordinateurs
Que de boulot tout ca !
Hors ligne
Remy a écrit:
Merci à tous.
...
quand même un peu particulier...
non ça n'a rien de particulier c'est pareil dans tous les langages à objets
A+JYT
Hors ligne