1

好的,

这完全是一个奇怪的情况。

当用户登录时,我使用以下代码存储一些东西:

$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 文件中使用相同的代码时,它不起作用?!

奇怪的部分是它曾经完美地工作并且使用它不会根据用户的角色显示不同的选项。

我在哪里可以查找代码中的错误?真的迷失了要检查的地方。可能在某处改变了一些东西,但其他一切似乎都很好。

任何提示或方向都会很棒!

4

1 回答 1

1

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

于 2010-11-08T16:50:39.027 回答