Форма экземпляра Zend_Db_Table_Row Zend_Auth

Я использую Zend_Auth и Zend_Auth_Adapter_DbTable в своем проекте. Я хочу получить экземпляр Zend_Db_Table_Row от адаптера Zend_Auth (Zend_Auth_Adapter_DbTable). Я не нашел хорошего решения. Мне нужен экземпляр Zend_Db_Table_Row, потому что я использую собственный класс строк, в котором у меня есть метод для получения данных из зависимой таблицы.

Я знаю, что могу получить эти данные еще раз, но это не имеет смысла, потому что эти данные уже были получены из базы данных Zend_Auth_Adapter_DbTable.


person Kacper Kołodziej    schedule 10.03.2012    source источник


Ответы (2)


Хитрость заключается в том, чтобы поместить строку в контейнер Zend_Auth_Storage. Переопределив Zend_Auth_Adapter_Interface::authenticate(), вы сможете сделать именно это.

/**
 * Authenticate
 *
 * Overriding to provide more information about the authenticated user
 *
 * @return Zend_Auth_Result
 */
public function authenticate()
{
    $result = parent::authenticate();

    //  Store row on success
    if ($result->getCode() == Zend_Auth_Result::SUCCESS) {
        return new Zend_Auth_Result(
            $result->getCode(),
            $this->getResultRowObject(null, array('*')),
            $result->getMessages()
        );
    } else {
        return $result;
    }
}
person Community    schedule 11.04.2012

Zend_Auth_Adapter_DbTable выбирает только те поля, которые хранятся в таблице пользователей (getResultRowObject()). Я думаю, что более целесообразно создавать экземпляр вашего класса Row (или класса User) с данными, предоставленными Zend_Auth_Adapter_DbTable

Посмотрите здесь аналогичный вопрос: Могу ли я в Zend_Auth получить объект User модели домена вместо stdClass?

person mantigatos    schedule 10.03.2012