Вместо записи $identity
в $authStorage
вы можете сохранить пользовательский объект или модель.
Вот пример:
<?php
class Application_Model_UserSession
implements Zend_Acl_Role_Interface
{
public $userId;
public $username;
/** @var array */
protected $_data;
public function __construct($userId, $username)
{
$this->userId = $userId;
$this->username = $username;
}
public function __set($name, $value)
{
$this->_data[$name] = $value;
}
public function __get($name)
{
if (array_key_exists($name, $this->_data)) {
return $this->_data[$name];
} else {
return null;
}
}
public function updateStorage()
{
$auth = Zend_Auth::getInstance();
$auth->getStorage()->write($this);
}
public function getRoleId()
{
// TODO: implement
$role = 'guest';
return $role;
}
public function __isset($name)
{
return isset($this->_data[$name]);
}
public function __unset($name)
{
unset($this->_data[$name]);
}
}
Теперь в вашем контроллере входа выможет сделать:
if($result->isValid()){
$identity = new Application_Model_UserSession(0, $username); // 0 for userid
// You can also store other data in the session, e.g.:
$identity->account = new Account_Model($authAdapter->getResultRowObject());
$identity->updateStorage(); // update Zend_Auth identity with the UserSession object
Как правило, у меня есть объект учетной записи, который я также храню в объекте UserSession, и делаю легкий доступ к имени пользователя и идентификатору пользователя через общедоступные свойства.раз вы можете получить объект:
$identity = Zend_Auth::getInstance()->getIdentity(); // Application_Model_UserSession
Только не забудьте убедиться, что это Application_Model_UserSession.