我在使用Zend_Auth时遇到了一些问题,并且在我的Acl中一直出现错误。
在我的登录控制器中,我设置了Zend_Auth存储,如下所示
$auth = Zend_Auth::getInstance();
$result = $auth->authenticate($adapter);
if ($result->isValid()) {
$userId = $adapter->getResultRowObject(array('user_id'), null)->user_id;
$user = new User_Model_User;
$users = new User_Model_UserMapper;
$users->find($userId, $user);
$auth->getStorage()->write(
$user
);
}
这似乎运行良好,我可以毫无问题地使用View Helpers中存储在Zend_Auth存储中的对象。我似乎遇到的问题是当我尝试在我的Acl中使用它时,下面是来自我的Acl的片段,一旦它到达if($auth->hasIdentity()) {
行,我就会得到进一步详细说明的异常。
$user->getUserLevel()
是用户模型中的一个方法,它允许我将存储在数据库中的user_level_id转换为含义全名。我假设自动加载程序看到这些方法并尝试加载所需的所有类。
当查看异常时,它似乎很难找到存储在模块中的类,我在application.ini中设置了Auto Loader Name Space。
有人可以帮忙解决这个问题吗?
class App_Controller_Plugin_Acl extends Zend_Controller_Plugin_Abstract
{
protected $_roleName;
public function __construct()
{
$auth = Zend_Auth::getInstance();
if($auth->hasIdentity()) {
$user = $auth->getIdentity();
$this->_roleName = strtolower($user->getUserLevel());
} else {
$this->_roleName = 'guest';
}
}
}
Fatal error: Uncaught exception 'Zend_Session_Exception' with message 'Zend_Session::start() -
\Web\library\Zend\Loader.php(Line:146): Error #2 include_once() [<a href='function.include'>function.include</a>]:
Failed opening 'Menu\Model\UserLevel.php' for inclusion
(include_path='\Web\application/../library;\Web\library;.;C:\php5\pear') Array' in \Web\library\Zend\Session.php:493
Stack trace:
#0 \Web\library\Zend\Session\Namespace.php(143): Zend_Session::start(true)
#1 \Web\library\Zend\Auth\Storage\Session.php(87): Zend_Session_Namespace->__construct('Zend_Auth')
#2 \Web\library\Zend\Auth.php(91): Zend_Auth_Storage_Session->__construct()
#3 \Web\library\Zend\A in \Web\library\Zend\Session.php on line 493
谢谢,
马丁
答案 0 :(得分:0)
问题与取消序列化对象有关。例外是告诉你什么是错的。 Zend_Loader无法找到您的UserLevel
类(我假设这是User_Model_User
的成员)。
构建ACL时,您的包含路径是否设置正确?
一个hacky解决方法是添加
require_once 'path/to/Menu/Model/UserLevel.php';
到您的ACL类文件。