2010-11-08 1 views
1

ОК,Zend_Auth теперь работает только частично

Это совершенно странная ситуация.

Когда пользователь входит в систему, я храню некоторые вещи, используя следующий код:

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

Затем я использую следующий код в моем загрузчике, чтобы получить доступ к переменным:

<?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(); 
    } 
} 

Okay , и теперь для странной части:

Когда я использую

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

В моем layout.phtml он отлично работает. Но когда я использую тот же код в файле index.phtml, который загружается в соответствии с контроллером, он не работает ?!

Незнакомая часть - это то, что она отлично работает и использует ее. T показывает разные варианты в зависимости от роли пользователя.

Где я могу найти ошибки в своем коде? Действительно потеряны на местах для проверки. Вероятно, что-то изменилось, но все остальное, похоже, работает нормально.

Любые советы или указания были бы замечательными!

+0

Можете ли вы предоставить полную функцию Bootstrap? Может быть какая-то проблема с загрузочной загрузкой (например, пока еще не загрузили?) – Fge

+0

Добавлен в мой первоначальный пост –

+1

Не уверен, но попробуйте $ this-> bootstrap ('view') перед загрузкой макета. – Fge

ответ

1

В макете и ресурсе просмотра оба используют Zend_Controller_Action_Helper_ViewRenderer(). Ресурс макета обращается к помощнику, чтобы получить представление (только для чтения). Но ресурс вида обращается к помощнику и перезаписывает объект вида помощника.
Итак, в вашем случае макет загрузился, вы установили переменные. Впоследствии ресурс представления загружается, что перезаписывает представление в помощнике.
Вы должны сначала подобрать вид до, чтобы обеспечить их использование одним и тем же объектом.

 Смежные вопросы

  • Нет связанных вопросов^_^