2011-01-31 2 views
0

У меня возникла проблема с Zend_Auth и продолжайте получать ошибку в моем Acl.Ошибка Zend_Auth/Zend_Session и сохранение объектов в хранилище Auth

В моей установке Войти Контроллер I моего 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 
    ); 
} 

Это, кажется, работает хорошо, и я могу использовать объект, хранящийся в памяти Zend_Auth в Помощники без каких-либо проблем. Проблема, с которой я, похоже, сталкиваюсь, заключается в том, что когда я пытаюсь использовать это в своем Acl, ниже приведен фрагмент моего Acl, как только он попадает в строку if($auth->hasIdentity()) {, я получаю исключение, подробно описанное ниже.

$user->getUserLevel() - это метод в пользовательской модели, который позволяет мне преобразовать user_level_id, который хранится в базе данных, в полное имя. Я предполагаю, что автозагрузчик видит эти методы и пытается загрузить все классы, которые потребуются.

При изучении исключения, похоже, он пытается найти класс, поскольку он хранится в модуле, у меня есть установка автозагрузки имени автозагрузки в моем приложении application.ini.

Может ли кто-нибудь помочь в разрешении этого вопроса?

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 

Спасибо,

Martin

+0

Вы загрузили свой модуль? – Ashley

+0

Привет, Эшли, как вы относитесь к начальной загрузке, в моей конфигурации у меня есть следующие строки, мне нужно что-то еще ... Autoloadernamespace [] = "Menu_", resources.modules [] = "" – Martin

ответ

0

Проблема связана с ООН-сериализации объекта. Исключение говорит вам, что не так. Zend_Loader не может найти ваш класс UserLevel (я предполагаю, что это член User_Model_User).

Правильно ли указан ваш путь включения в то время, когда сконфигурирован ваш ACL?

Hacky обходные бы добавить

require_once 'path/to/Menu/Model/UserLevel.php'; 

в файл класса ACL.

+0

Привет, Фил, я добавил каталог модуля на путь включения без везения. Включение каждого файла будет работать, но, к сожалению, я бы включил почти все мои модели, поскольку все они каскадируются друг от друга. Я могу вернуться к своему старому способу и сохранить идентификатор пользователя вместо модели пользователя и загрузить модель при необходимости. Спасибо за вашу помощь. – Martin

Смежные вопросы