0

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));

selectステートメントに参加できないというエラーが発生したため、integrityCheckをfalseに設定する必要がありました。

$ usersTableを使用して、データベースから特定の列名を取得する簡単な方法が必要です。

4

1 に答える 1

0

通常は、DbTable モデルまたはマッパー クラスにメソッドを追加して、このデータを取得します。現在の質問については、これを試してください:

$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 は、同じクエリで同じテーブルにアクセスするために 2 つの異なる方法 ( tablename としてオブジェクトを渡し、 tablename として文字列を渡す) を使用したため、複数のテーブルにアクセスしようとしていると考えているようです。

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.
于 2012-08-10T11:48:04.390 に答える