我正在编写一个函数来填充来自db的用户详细信息的会话。我需要排除密码和盐列,以便全局会话不会被填充。
使用以下方法可以轻松完成此操作:
$zendAuth->getResultRowObject(null, array("password", "salt"));
但是我需要在不使用$ zendAuth的情况下在其他地方执行此操作。
我有以下内容:
$usersTable = new Application_Model_DbTable_Users();
$zendSession = new Zend_Session_Namespace();
$zendSession->userData = $usersTable->fetchRow(
$usersTable->select()
->from("users", array('id', 'first_name', 'last_name', 'email', 'status'))
->where("id = ?", $userInsertQuery)->setIntegrityCheck(false));
我必须将integrityCheck设置为false,因为我遇到了无法加入select语句的错误。
必须有一种更简单的方法可以使用$ usersTable
从数据库中获取某些列名答案 0 :(得分:0)
通常,您只需在DbTable模型或mapper类中添加一个方法即可为您获取此数据。对于您当前的问题,请尝试:
$usersTable = new Application_Model_DbTable_Users();
$zendSession = new Zend_Session_Namespace();
$select = $usersTable->select();
$select->from($usersTable,array('id', 'first_name', 'last_name', 'email', 'status'))
->where("id = ?", $userInsertQuery);
$zendSession->userData = $usersTable->fetchRow($select);
Zend_Db_Select似乎认为你试图访问多个表,因为你使用了两种不同的方法(将一个对象作为tablename传递,一个字符串作为tablename )来访问同一个查询中的同一个表。 / p>
DbTable中的方法可能如下所示:
public function getUserData($id)
{
$select = $this->select();
$select->from($this, array('id', 'first_name', 'last_name', 'email', 'status'));
$select->where('id = ?', $id);
$result = $this->fetchRow($select);
return $result;
}
然后在你的控制器中:
$usersTable = new Application_Model_DbTable_Users();
$user = $usersTable->getUserData($userInsertQuery);
$zendSession->userData = $user;
在所有这些之后,您可以使用Zend_Auth_Storage_Session存储您想要的信息,如下所示:
if ($result->isValid()) {
//store the username, first and last names of the user
$auth = Zend_Auth::getInstance();
$storage = $auth->getStorage();
$storage->write($authAdapter->getResultRowObject(array(
'username', 'first_name', 'last_name'
)));
//or to save all except
$storage->write($authAdapter->getResultRowObject(null, array('password', 'salt'));
}
之后您可以通过调用以下方式调用该信息:
$auth = Zend_Auth::getInstance();
$storage = $auth->getStorage();
$strorage->read();
或者您可以使用Zend_Auth命名空间直接从Zend_Session_Namespace访问相同的信息:
$session = new Zend_Session_Namespace('Zend_Auth');
$member = $session->storage; //'storage' is the default. However the namespace and key can be changed.