Zend_Auth现在只能部分工作

时间:2010-11-08 15:13:45

标签: zend-framework storage 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();
    }
}

好的,现在是奇怪的部分:

当我使用

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

在我的layout.phtml中它很棒。但是当我在index.phtml文件中使用相同的代码时,它根据控制器加载它不起作用?!

陌生人的一部分是它曾经完美地工作并使用它根据用户的角色显示不同的选项。

我在哪里可以查找代码中的错误?真的失去了检查的地方。可能在某个地方改变了某些东西,但其他一切似乎都运转正常。

任何提示或指示都会很棒!

1 个答案:

答案 0 :(得分:1)

布局和视图资源都使用Zend_Controller_Action_Helper_ViewRenderer()。布局资源访问帮助程序以获取视图(只读)。但是视图资源访问帮助程序并覆盖帮助程序的视图对象 所以在你的情况下,布局被引导,你确实设置了变量。之后视图资源被引导,它会覆盖帮助程序中的视图 您始终应该在布局之前引导视图,以确保它们都使用相同的视图对象。