4
public function loginAction() {

   $auth = Zend_Auth::getInstance();    

   $DB = Zend_Db_Table_Abstract::getDefaultAdapter();
   $request=$this->getRequest();        

   $authAdapter = new Zend_Auth_Adapter_DbTable($DB);
   $authAdapter->setTableName('user')
               ->setIdentityColumn('uname')
               ->setCredentialColumn('password');  

   $uname = $request->getParam('uname');
   $pass = $request->getParam('password');

   $authAdapter->setIdentity($uname);
   $authAdapter->setCredential($pass);

   $result = $authAdapter->authenticate($authAdapter);
   $this->view->assign('auth',$result);
   if($result->isValid()) {

       $data = $authAdapter->getResultRowObject(null,'pass');
       $auth->getStorage()->write($data);

       //$this->view->assign('dbdata',$data);

       $userInfo = new Zend_Session_Namespace('userInfo');
       $userInfo->userType = 'admin';

       //$this->_redirect('/admin/adminhome');
   } else {

       $this->_redirect('/admin/index?fail=true');
   }    

   $data = $authAdapter->getResultRowObject(null,'pass');

ここで、$dataは次のようなオブジェクトを返します。

stdClass Object ( [id] => 12 [uname] => user [password] => user [type] => user )

これを配列に変換したい。関数を試してみtoArray()ましたが無駄でした。私の要件は、次のようなユーザータイプを確認することです:

if($data['type']=='admin'){
do something
} else {
do something 
}

ありがとう

4

2 に答える 2

7

質問に答えるには、次を使用します。

$data = $authAdapter->getResultRowObject(null,'pass');
$anArray = (array) $data;

またはもっと簡単に:

$data = (array) $authAdapter->getResultRowObject(null,'pass');

ただし、配列に変換する必要はありません。オブジェクトを直接使用するだけです。

$data = $authAdapter->getResultRowObject(null,'pass');
if($data->type=='admin'){
do something
} else{
do something 
}
于 2012-07-19T04:48:50.677 に答える
0

使用できますget_object_vars()

$array = get_object_vars($data);

多次元配列の場合は、関数でラップする必要があります:

function toArray($data) {
  if (is_object($data)) {
    $data = get_object_vars($data);
  }
  if (is_array($data)) {
    return array_map(__FUNCTION__, $data);
  } else {
    return $d;
  }
}
于 2013-07-18T15:11:17.810 に答える