Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 21-08-2008 18:42:20

Remy
Membre
Date d'inscription: 18-08-2008
Messages: 17

$this, objet magique ???

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

 

#2 21-08-2008 18:59:39

lethak
Membre
Lieu: France
Date d'inscription: 05-04-2008
Messages: 168

Re: $this, objet magique ???

Déja le layout est une vue.

ensuite depuis une vue tu peux faire:

Code:

<?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 wink

http://framework.zend.com/manual/en/

Dernière modification par lethak (21-08-2008 19:02:05)


IT Dev @Twitter

Hors ligne

 

#3 21-08-2008 22:38:43

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Re: $this, objet magique ???

C'est quand même mieux en francais smile
http://framework.zend.com/manual/fr/
Merci encore à ceux qui se sont donner la peine de traduire la doc
Desolé pour le HS


ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

#4 22-08-2008 08:02:13

grandlap
Membre
Date d'inscription: 22-07-2008
Messages: 50

Re: $this, objet magique ???

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 :


Code:

// 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"


Code:

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

 

#5 22-08-2008 18:19:49

Remy
Membre
Date d'inscription: 18-08-2008
Messages: 17

Re: $this, objet magique ???

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

 

#6 22-08-2008 18:46:18

quode
Membre
Date d'inscription: 22-03-2007
Messages: 20

Re: $this, objet magique ???

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


All software problems can be solved by introducing an extra level of indirection. Well, almost.

Hors ligne

 

#7 22-08-2008 18:56:01

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: $this, objet magique ???

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+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#8 22-08-2008 19:05:56

lethak
Membre
Lieu: France
Date d'inscription: 05-04-2008
Messages: 168

Re: $this, objet magique ???

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 wink 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 wink

bref RTFM wink


IT Dev @Twitter

Hors ligne

 

#9 23-08-2008 08:09:32

grandlap
Membre
Date d'inscription: 22-07-2008
Messages: 50

Re: $this, objet magique ???

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 wink

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 smile

Hors ligne

 

#10 25-08-2008 13:20:18

Remy
Membre
Date d'inscription: 18-08-2008
Messages: 17

Re: $this, objet magique ???

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

 

#11 25-08-2008 14:10:55

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: $this, objet magique ???

echo get_class($this);


----
Gruiiik !

Hors ligne

 

#12 25-08-2008 15:19:10

quode
Membre
Date d'inscription: 22-03-2007
Messages: 20

Re: $this, objet magique ???

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.


All software problems can be solved by introducing an extra level of indirection. Well, almost.

Hors ligne

 

#13 25-08-2008 15:22:04

3uclide
Membre
Date d'inscription: 09-08-2008
Messages: 194

Re: $this, objet magique ???

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

 

#14 25-08-2008 15:34:05

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: $this, objet magique ???

$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

 

#15 25-08-2008 19:02:22

lethak
Membre
Lieu: France
Date d'inscription: 05-04-2008
Messages: 168

Re: $this, objet magique ???

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 wink

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.


IT Dev @Twitter

Hors ligne

 

#16 27-08-2008 11:21:51

Remy
Membre
Date d'inscription: 18-08-2008
Messages: 17

Re: $this, objet magique ???

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

 

#17 27-08-2008 11:38:47

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: $this, objet magique ???

Moi aussi, j'ai une femme, 1 enfants, la télévision, 2 chiens et un ordinateurs smile
Que de boulot tout ca !


----
Gruiiik !

Hors ligne

 

#18 27-08-2008 17:55:56

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: $this, objet magique ???

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

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages