#zend-framework #zend-auth #zend-acl
#zend-framework #zend-auth #zend-acl
Вопрос:
Я получаю следующую ошибку при каждом просмотре, доступном для «гостевого» пользователя:
Примечание: Попытка получить свойство не-объекта в /home/fiodorovich/public_html/gisele/library/Federico/Plugin/Acl.php в строке 35
строка, на которую он ссылается, ‘$role = $this->_auth->getStorage()->read()-> role;’ в:
public function preDispatch (Zend_Controller_Request_Abstract $request)
{
$role = $this->_auth->getStorage()->read()->role;
if($role === null) {
$role = self::DEFAULT_ROLE;
}
$action = $request->getActionName();
$controller = $request->getControllerName();
if($this->_acl->has($controller)) {
if(!$this->_acl->isAllowed($role, $controller, $action)) {
$request->setActionName('error');
$request->setControllerName('error');
}
}
}
Я знаю, что это всего лишь уведомление, и что оно не будет отображаться в рабочей среде, так как ошибки будут отключены… однако это отчасти не дает мне покоя. Итак, как я мог бы решить эту проблему?
Ответ №1:
Используйте $this->_auth->hasIdentity()
перед запросом данных из хранилища.
if ($this->_auth->hasIdentity()) {
// user is logged in and we can get role
$role = $this->_auth->getStorage()->read()->role;
} else {
// guest
$role = self::DEFAULT_ROLE;
}