2010-11-08 5 views
1

OK,Zend_Auth ne fonctionne maintenant que partiellement

Ceci est complètement une situation étrange.

Lorsqu'un utilisateur se connecte, je stocke des choses en utilisant le code suivant:

$auth->getStorage()->write($authAdapter->getResultRowObject(array(
         'username', 
         'avatar', 
         'status', 
         'role', 
         'id', 
         'email' 
        ))); 

Puis-je utiliser le code suivant dans mon bootstrap pour obtenir l'accès aux variables:

<?php 

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 

    protected function preDispatch() 
    { 
     $this->frontController = Zend_Controller_Front::getInstance(); 
    } 

    protected function _initBuildBase() 
    { 
     $this->bootstrap('layout');  
     $layout = $this->getResource('layout'); 
     $this->view = $layout->getView(); 
     // Set doctype 
     $this->view->doctype("XHTML1_TRANSITIONAL"); 
     $this->view->headMeta()->appendHttpEquiv('Content-Type', 'text/html;charset=utf-8'); 
    } 

    protected function _initLoader() 
    { 
     $adminLoader = new Zend_Application_Module_Autoloader(array(
      'namespace' => 'Admin', 
      'basePath' => APPLICATION_PATH)); 

     $autoLoader = Zend_Loader_Autoloader::getInstance(); 
     $autoLoader->registerNamespace('MyApp_'); 
     $resourceLoader = new Zend_Loader_Autoloader_Resource(array(
      'basePath' => APPLICATION_PATH, 
      'namespace' => '', 
      'resourceTypes' => array(
       'model' => array(
        'path' => 'models/', 
        'namespace' => 'Models_' 
       ), 
       'service' => array(
        'path' => 'services/', 
        'namespace' => 'Services_' 
       ), 
       'form' => array(
        'path' => 'forms/', 
        'namespace' => 'Forms_' 
       ), 
      ), 
     )); 
     return $autoLoader; 
     return $adminLoader; 
    } 

    protected function _initControllerPlugins() 
    { 
     $this->frontController->registerPlugin(new MyApp_Controller_Plugin_ApplicationSettings); 
     $this->frontController->registerPlugin(new MyApp_Controller_Plugin_LayoutLoader); 
     $this->frontController->registerPlugin(new MyApp_Controller_Plugin_LanguageSelector); 
     $this->frontController->registerPlugin(new MyApp_Controller_Plugin_Acl); 
     $this->frontController->registerPlugin(new MyApp_Controller_Plugin_Uploadify); 
    } 

    protected function _initActionHelpers() 
    { 
     Zend_Controller_Action_HelperBroker::addPath(APPLICATION_PATH .'/views/helpers'); 
    } 

    protected function _initRoutes() 
    { 
     $router = $this->frontController->getRouter(); 
     $router->addRoute(
      'crud', 
      new Zend_Controller_Router_Route('/:module/:controller/:action/:id', array('module' => 'admin', 'controller' => ':controller', 'action' => ':action', 'id' => ':id')) 
     ); 
     $router->addRoute(
      'pagination', 
      new Zend_Controller_Router_Route('/:module/:controller/index/:page', array('module' => 'admin', 'controller' => ':controller', 'action' => 'index', 'page' => ':page')) 
     ); 
     $router->addRoute(
      'pageUrl', 
      new Zend_Controller_Router_Route('/:page/:subpage', array('module' => 'default', 'controller' => 'index', 'action' => 'index', 'page' => ':page', 'subpage' => ':subpage')) 
     ); 
    } 

    protected function _initLogin() 
    { 
     $this->auth = Zend_Auth::getInstance(); 
     $this->view->user = $this->auth->getIdentity(); 
    } 
} 

Ok et maintenant la partie bizarre:

Quand j'utilise

if($this->user->role == 'Administrator') 
{ 

Dans mon layout.phtml ça marche très bien. Mais quand j'utilise le même code dans un fichier index.phtml qui est chargé selon le contrôleur, ça ne marche pas ?!

La partie la plus étrange est qu'elle fonctionnait parfaitement et qu'elle utilisait différentes options selon le rôle de l'utilisateur.

Où puis-je rechercher des erreurs dans mon code? Vraiment perdu sur les lieux à vérifier. Probablement changé quelque chose quelque part, mais tout le reste semble bien fonctionner.

Tous les conseils ou les directions seraient géniaux!

+0

Pouvez-vous s'il vous plaît fournir la fonction Bootstrap complète? Peut-être un problème de dépendance d'amorçage (comme la vue n'est pas encore amorcée?) – Fge

+0

Ajouté à mon message original –

+1

Vous n'êtes pas sûr de cela, mais essayez un $ this-> bootstrap ('view') avant d'amorcer la mise en page. – Fge

Répondre

1

La ressource de mise en page et de vue utilise les Zend_Controller_Action_Helper_ViewRenderer(). La ressource de mise en page accède à l'assistant pour obtenir la vue (en lecture seule). Mais la ressource de vue accède à l'assistant et écrase l'objet de vue de l'assistant.
Donc, dans votre cas, la mise en page a été bootstraptée, vous avez défini les variables. Ensuite, la ressource de vue est bootstrapted qui écrase la vue dans l'assistant.
Vous devez toujours amorcer la vue avant la mise en page pour vous assurer qu'ils utilisent tous les deux le même objet de vue.

Questions connexes