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 ответ
Ресурс макета и вида использует Zend_Controller_Action_Helper_ViewRenderer()
, Ресурс макета обращается к помощнику, чтобы получить представление (только для чтения). Но ресурс представления обращается к помощнику и перезаписывает объект представления помощника.
Итак, в вашем случае макет загрузился, вы установили переменные. После этого ресурс представления загружается, что перезаписывает представление в помощнике.
Вы всегда должны загружать представление перед макетом, чтобы они оба использовали один и тот же объект представления.