Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 21-04-2008 21:10:22

Candy
Nouveau membre
Date d'inscription: 21-04-2008
Messages: 9

[Résolu][Zend_Layout][1.5] et ActionStack

Bonjour,

Je rencontre un problème en essayant de construire un gabarit.
J'effectue sur mes pages un contrôle d'authentification (Zend_Auth). Je veux donc pouvoir rediriger les visiteurs vers l'action 'login' du controlleur AuthController pour que ces derniers s'identifient. Seulement je veux inclure l'écran de connexion dans mon gabarit (template). Je voulais ainsi exlure les actions 'gauche', 'droite', 'header' et 'footer' du contrôle, pour que tout s'affiche correctement. Cependant, cela ne fonctionne pas du tout. J'ai une petite idée sur la question, en effet, j'ai l'impression que les actions appellées par l'actionStack conservent la même valeur pour la variable $this->_request->getParam('action'). Du coup je n'arrive pas à exclure ces actions du comportement par défaut, elles ne sont donc jamais rendues.

Le coupable : l'action 'preDispatch' du indexController

function preDispatch()
    {
        $auth = Zend_Auth::getInstance();
        if (!$auth->hasIdentity() && $this->_request->getParam('action')!='header' && $this->request->getParam('action')!='footer' && $this->_request->getParam('action')!='gauche' && $this->_request->getParam('action')!='droite') {
                            $this->_redirect('auth/login?error='.$this->_request->getParam('action'));
                        }
             }

Si je met :
echo($this->_request->getParam('action'));

J'obtiens : "loginloginloginlogin"

Mon url d'appel :

http://localhost/tuto/index/modifier/id/2

Mon actionStack :

$actionStack = Zend_Controller_Action_HelperBroker::getStaticHelper('actionStack');
$actionStack->actionToStack('footer','index');
$actionStack->actionToStack('header','index');
$actionStack->actionToStack('gauche','index');
$actionStack->actionToStack('droite','index');

Est-ce un comportement normal ? Je suis bloqué.

Merci d'avance pour votre aide smile.

Dernière modification par Candy (22-04-2008 17:05:30)

Hors ligne

 

#2 22-04-2008 10:19:39

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

Re: [Résolu][Zend_Layout][1.5] et ActionStack

Est-ce que c'est la bonne approche ??

Perso, je n'utilise pas action stack mais le layout et un plugin Auth

Le plugin vérifie si l'utilisateur est connecté ou non ($auth->hasIdentity()) si non, il change la requete demandé en fesant pointé vers le controlleur d'identification.

Les header, footer, .... sont donc gérer dans le layout et "s'auto-gère". Selon les cas, ce sont des partials, des actions...


----
Gruiiik !

Hors ligne

 

#3 22-04-2008 10:33:07

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [Résolu][Zend_Layout][1.5] et ActionStack

Je sais pas si ça va t'aider, mais pour _redirect() il me semble qu'il faut commencé par un / pour l'uri...

Hors ligne

 

#4 22-04-2008 11:31:04

Candy
Nouveau membre
Date d'inscription: 21-04-2008
Messages: 9

Re: [Résolu][Zend_Layout][1.5] et ActionStack

nORKy a écrit:

Est-ce que c'est la bonne approche ??

Perso, je n'utilise pas action stack mais le layout et un plugin Auth

Le plugin vérifie si l'utilisateur est connecté ou non ($auth->hasIdentity()) si non, il change la requete demandé en fesant pointé vers le controlleur d'identification.

Les header, footer, .... sont donc gérer dans le layout et "s'auto-gère". Selon les cas, ce sont des partials, des actions...

Je suis d'accord avec toi pour dire que ce n'est pas la meilleure façon de faire. Ceci est uniquement pour l'exemple, je suis en train d'apprendre à manipuler le framework. Cependant, je ne vois pas comment tu fais pour contruire ton gabarit sans l'aide de l'actionStack ou même de helper 'action' ... Sinon je suis d'accord sur le principe du plugin, c'est beaucoup plus propre et DRY. Mais désolé pour mon retard mental,  je ne vois pas comment tu gère les header, footer ... dans le layout sans que ceux-ci ne passe par la règle de gestion d'authentification. Peux-tu m'éclairer s'il te plait ?

@Mr.MoOx : la redirection fonctionne bien sans ça, mais je vais essayer ce soir et je te tiens au courant smile.

Merci à vous deux.

Hors ligne

 

#5 22-04-2008 12:12:23

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

Re: [Résolu][Zend_Layout][1.5] et ActionStack

Tu peux générer les vues de plusieurs facon avec le layout grace aux helper
notamment :
'partials' : rien de spécial, elles seront toujours rendues (si tu veux un header partout par exemple)
'action' : tu executes une action précise ;  cette action peut alors décider de ne rien rendre si tu le veux (par exemple, une action nav/sidebar.php qui test hasIdentidy et decide ou non de faire un rendu en fonction du résultat)

mon layout ressemble à ca :

Code:

<?php $this->headLink()->prependStylesheet('/style/default.css') ?>

<?php echo $this->doctype('XHTML1_STRICT') ?>

<html>
<head>

<?php echo $this->headTitle() ?>
<?php echo $this->headLink() ?>
<?php echo $this->headScript() ?>
<?php echo $this->headStyle() ?>

</head>

<body id="<?php echo $this->moduleName; ?>">


  <?php echo $this->partial('header.phtml') ?>

  <?php echo $this->action('menu','index', 'nav'); ?>

  <div id="containerCols">
      <div id="left">

      <?php echo $this->action('status','index', 'nav'); ?>

      <?php echo $this->action('sidebar','index', 'nav'); ?>
      
      </div>
    <div id="content">
    <?php echo $this->layout()->content; ?>
    </div>

  <div class="clear">&nbsp;</div>
  </div>
</div>

<?php echo $this->partial('footer.phtml') ?>

</body>
</html>

Dernière modification par nORKy (22-04-2008 12:12:58)


----
Gruiiik !

Hors ligne

 

#6 22-04-2008 13:36:01

Candy
Nouveau membre
Date d'inscription: 21-04-2008
Messages: 9

Re: [Résolu][Zend_Layout][1.5] et ActionStack

Merci pour la réponse nORKy, cependant je ne comprend pas :
- si tu as un plugin pour l'authentification et que tu n'es pas logué, ton plugin te redirige vers le contrôleur d'identification, comment fais-tu pour "accéder" à tes différentes actions nécessaires à l'affichage de ton template ?

Hors ligne

 

#7 22-04-2008 14:16:53

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

Re: [Résolu][Zend_Layout][1.5] et ActionStack

Mon plugin, dit juste
"si tu n'es pas identitié, utiliser le module auth, controller index, action login plutot que celui demandé"
Il ne fait rien de plus mon plugin. L'accès des actions dans le layout est automatique.

voici le cheminement :
- Passage dans le plugin (cas ou je ne suis pas identifié

- auth/index/login lui, génère son formulaire, etc... Il ne fait que son boulot d'identification.
Automatiquement, le rendu est fait par le viewrenderer et est stocké dans le layout()->content
- si c'est un post et que tout va bien, il fait une redirection vers la page "par défaut" pour laisser l'utilisateur travaillé

- le rendu de layout se lance (automatiquement) dans layout.html, il rencontre des $this->action('menu','index', 'nav')
-- les $this->action() son traité automatiquement comme n'importe qu'elle action et leur rendu est placé à l'endroit appelé dans le layout. Le framework sait ou trouvé la fonction Nav_IndexController->menu();


-----

Lorsque tu es logué, le plugin ne modifie rien dans la requète et donc c'est l'action demandé qui est exécuté et les action dans le layout sont toujours exécuter.

-----

Dans mon menu, je test $auth->getIdentity() ($auth est dans un registry) et si il n'est pas logué, je fait un $this->_helper->viewRenderer->setNoRender(); et la, rien ne sera affiché, donc, pas de menu.


----
Gruiiik !

Hors ligne

 

#8 22-04-2008 14:57:10

Candy
Nouveau membre
Date d'inscription: 21-04-2008
Messages: 9

Re: [Résolu][Zend_Layout][1.5] et ActionStack

Ok je vois, mais c'est dommage de faire plusieurs fois la même chose non ?
Ici tu vérifie deux fois si l'utilisateur est identifié ou non ... ?

Hors ligne

 

#9 22-04-2008 16:37:35

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

Re: [Résolu][Zend_Layout][1.5] et ActionStack

plusieurs la meme chose ?
je ne fais pas plusieurs fois la même chose.

J'ai une tache qui gère l'identification, une tache qui gère un menu, une tache qui gere autre chose, etc...

Tu devrais regardé ce tuto :
http://julien-pauli.developpez.com/tuto … nd-layout/


----
Gruiiik !

Hors ligne

 

#10 22-04-2008 16:50:54

Candy
Nouveau membre
Date d'inscription: 21-04-2008
Messages: 9

Re: [Résolu][Zend_Layout][1.5] et ActionStack

J'ai suivi ce tutoriel. C'est d'ailleurs pour cela que je suis ici smile. J'ai simplement essayé de le coupler avec l'authentification. Lorsque je dis que tu fais plusieurs fois la même chose je parle :

1 - ton plugin vérifie l'identité et propose de se loguer
2 - lors du rendu de ton layout, dans l'action menu tu vas encore vérifier l'identité

C'est cela que j'entendais par là. Mais je te prie de m'excuser, je ne suis pas encore familiarisé avec le framework ...

Hors ligne

 

#11 22-04-2008 16:53:16

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

Re: [Résolu][Zend_Layout][1.5] et ActionStack

beh oui, car, j'ai pas envi que mon menu s'affiche si personne n'est identifié, c'est tout


----
Gruiiik !

Hors ligne

 

#12 22-04-2008 17:04:31

Candy
Nouveau membre
Date d'inscription: 21-04-2008
Messages: 9

Re: [Résolu][Zend_Layout][1.5] et ActionStack

Excuse moi hmm. En tout cas je te remercie pour toute ton aide smile, j'apprécie beaucoup.

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