Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 29-10-2007 21:39:55

allfab
Membre
Date d'inscription: 02-10-2007
Messages: 40

[Zend_View][1.0.2] Envoi d'une valeur sur une vue avec plugin auth ?

Bonsoir à tous,

J'utilise le framework depuis sa RC1 et depuis je ne le quitte plus pour développer !!

Par j'ai un léger soucis pour envoyer une valeur sur une vue depuis mon plugin auth.php.

Voici le code de mon auth.php

Je n'arrive pas à voir comment envoyer mon menu sur la vue correspondante !!

Code:

<?php
class My_Plugin_Auth extends Zend_Controller_Plugin_Abstract
{
    private $_auth;
    private $_acl;
    private $_view;
    
    private $_noauth = array('module' => 'admin',
                             'controller' => 'auth',
                             'action' => 'login');
    
    private $_noacl = array('module' => 'default',
                            'controller' => 'index',
                            'action' => 'noagreement');
    
        public function __construct($auth, $acl)
        {
            $this->_auth = $auth;
            $this->_acl = $acl;
        }
    
        public function preDispatch(Zend_Controller_Request_Abstract $request)
        {
            Zend_Loader::loadClass('Menu');
            if ($this->_auth->hasIdentity()) 
            {
                $roleUser = $this->_auth->getIdentity()->role_user;
                $roleGroup = $this->_auth->getIdentity()->role_group;
                $menu = new Menu(true);
            } 
            else 
            {
                $roleUser = 'guest';
                $roleGroup = 'groupGuest';
                $menu = new Menu(false);
//********ICI COMMENT JE RENVOIE CETTE VALEUR SUR CHAQUE VUE PUISQUE CELLE CI N'EST PAS INSTANCIEE DANS CE PLUGIN*****************//
                $this->view->menu = $menu->getMenu();
            }
            
            $controller = $request->controller;
            $action = $request->action;
            $module = $request->module;
            //$resource = $module;
            $resource = $module.'_'.$controller;
            //Zend_Debug::dump($resource, $label='Variable $Resource', $echo=true);
            
            if (!$this->_acl->has($resource))
            {
                $resource = null;
            }
            
            if (!$this->_acl->isAllowed($roleUser, $resource, $action)) 
            {
                if (!$this->_auth->hasIdentity()) 
                {
                
                    $module = $this->_noauth['module'];
                    $controller = $this->_noauth['controller'];
                    $action = $this->_noauth['action'];
                } 
                else 
                {
                    $module = $this->_noacl['module'];
                    $controller = $this->_noacl['controller'];
                    $action = $this->_noacl['action'];
                }
            }
            
            $request->setModuleName($module);
            $request->setControllerName($controller);
            $request->setActionName($action);
        }
}
?>

De plus, je récupère mon menu comme ça dans mon header :

Code:

<?php echo $this->menu; ?>

Si quelqu'un a une petite réponse ???!!!
Merci bonne soirée

Allfab

Hors ligne

 

#2 30-10-2007 08:40:12

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [Zend_View][1.0.2] Envoi d'une valeur sur une vue avec plugin auth ?

Bonjour,

Le problème c'est que dans le preDispatch de ton plugin, ton controlleur n'est pas encore instancié. Si tu utilises la vue par défaut, elle n'est pas instanciée non plus (parce qu'elle est créée au moment de l'instanciation du controlleur). (... ok, je viens de voir que tu dis la même chose dans ton message...)

Tu peux :
- la passer avec $request->setParam("menu",$menu->getMenu()); et dans ton controlleur tu la récupères avec $this->_getParam(...); (ou dans un helper)
- la mettre dans la registry et la récupérer dans la régistry avec ton controlleur (ou un helper)
- tu peux instancier ta vue dans le bootstrap, l'envoyer à ta vue comme tu voulais le faire et dans un helper, associer ta vue au controlleur appelé

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#3 30-10-2007 10:45:12

allfab
Membre
Date d'inscription: 02-10-2007
Messages: 40

Re: [Zend_View][1.0.2] Envoi d'une valeur sur une vue avec plugin auth ?

Merci pour cette réponse !

Du coup, j'aimerais mieux faire l'affichage du menu en utilisant un autre plugin. En attendant une réponse à ma question, j'ai bidouillé mon code et me suis rendu compte que ça m'arrangeais que le test du menu se fasse dans chaque function init() de mes vues.

Du coup, dans chaque vue il me faut mettre ce code :

Code:

<?php
class IndexController extends Zend_Controller_Action {
    function init()
    {
        $this->initView();
                $this->view->baseUrl = $this->_request->getBaseUrl();
        $this->view->user = Zend_Auth::getInstance()->getIdentity();
        if($this->view->user->role_user == "admin")
        {
            $menu = new Menu(true);
        }
        else
        {
            $menu = new Menu(false);
        }
        $this->view->menu = $menu->getMenu();
    }
    function indexAction()
    {....
        la suite du code

J'en arrive a ma question....
J'ai créé un autre module (initialize.php)

Code:

<?php
class My_Plugin_Initialize extends Zend_Controller_Plugin_Abstract
{
    private $_auth;
    
        public function __construct($auth)
        {
            $this->_auth = $auth;
        }
    
        public function init()
        {
            $this->initView();
            $this->view->baseUrl = $this->_request->getBaseUrl();
            $this->view->user = $this->_auth->getIdentity();
            //$this->view->user = Zend_Auth::getInstance()->getIdentity();
            
                if ($this->_auth->hasIdentity()) 
                {
                    $roleUser = $this->_auth->getIdentity()->role_user;

                    if ($roleUser == "admin")
                    {
                        $menu = new Menu(true);
                    }
                    else 
                    {
                        $menu = new Menu(false);
                    }
                $this->view->menu = $menu->getMenu();
                }
        }
}
?>

Ce code ne marche pas, a priori, je dois me craquer quelque part mais je n'arrive pas à déterminer où !!

Merci

Allfab

Dernière modification par allfab (30-10-2007 10:46:06)

Hors ligne

 

#4 31-10-2007 14:17:36

allfab
Membre
Date d'inscription: 02-10-2007
Messages: 40

Re: [Zend_View][1.0.2] Envoi d'une valeur sur une vue avec plugin auth ?

Personne n'a réalisé un plugin d'initialisation !
Je tourne en rond depuis hier, si quelqu'un a une p'tite idée.

Merci
Bon aprèm

Hors ligne

 

#5 03-11-2007 20:35:03

Laurent
Membre
Date d'inscription: 23-04-2007
Messages: 15

Re: [Zend_View][1.0.2] Envoi d'une valeur sur une vue avec plugin auth ?

allfab a écrit:

Personne n'a réalisé un plugin d'initialisation !

Bonjour,

La vue est généralement instanciée dans le bootstrap avec quelque chose du genre:

Code:

$view = new Zend_View();
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
$viewRenderer->setView($view);

On peut alors après obtenir la vue de n'importe où (predispatch des plugins compris):

Code:

$view = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer')->view;

Voici un exemple avec un plugin:

Code:

class App_Plugin_Auth extends Zend_Controller_Plugin_Abstract
{
    public function preDispatch()
    {
        $view = Zend_Controller_Action_HelperBroker::getExistingHelper('ViewRenderer')->view;
                
        $auth = Zend_Auth::getInstance();

        $view->userIsAuthenticated = false;

        if ($auth->hasIdentity()) {
        
            $view->userIsAuthenticated = true;
            $view->userId = $auth->getIdentity()->id;
            $view->userEmail = $auth->getIdentity()->email;
            $view->userNickname = $auth->getIdentity()->nickname;
        }
    }
}

Dernière modification par Laurent (03-11-2007 21:45:37)

Hors ligne

 

#6 05-11-2007 09:53:08

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

Re: [Zend_View][1.0.2] Envoi d'une valeur sur une vue avec plugin auth ?

bonne idée ça le plugin d'init pour l'authentification
peut être pa à charger au démarrage car l'init n'est pas toujours nécessaire mais c'est une bonne idée.
de plus on peu en mettre plusieurs ce qui permet une certaine modulatirté
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