Zend получить иностранный идентификатор из таблицы входа - PullRequest
0 голосов
/ 10 октября 2011

Я использую Zend и Doctrine для входа в систему, используя таблицу, содержащую также сторонний идентификатор для другой таблицы. Мне нужно получить этот идентификатор, чтобы использовать его в запросе Doctrine (через контроллер) к базе данных, например:

$q = Doctrine_Query::create()
        ->from('Lost_Model_Item i')
        ->where('i.StatID = ?', 'I need the ID here') 
        $result = $q->fetchArray();

Я пытался получить это так:

Zend_Auth::getInstance()->getIdentity()->ID

Но, похоже, не работает. Я новичок в Zend и немного потерян здесь. Не могли бы вы помочь?

Поскольку я работаю с доктриной, я создал адаптер следующим образом:

public function authenticate()
   {
    $q = Doctrine_Query::create()
         ->from('Lost_Model_Station u')
      ->where('u.username = ? AND u.password = MD5(?)',
                array($this->username, $this->password)
      );
$result = $q->fetchArray();
if (count($result) == 1) {
  $this->_resultArray = $result[0];
  return new Zend_Auth_Result(
    Zend_Auth_Result::SUCCESS, $this->username, array());
} else {
  return new Zend_Auth_Result(
    Zend_Auth_Result::FAILURE, null, 
      array('Authentication unsuccessful')
  );      
}
  }

Ответы [ 2 ]

1 голос
/ 11 октября 2011

Как насчет использования getIdentity, чтобы получить имя пользователя, а затем использовать SQL-соединение на Lost_Model_Item и Lost_Model_Station

$q = Doctrine_Query::create()
    ->from('Lost_Model_Item i')
    ->leftJoin('i.Lost_Model_Station u')
    ->where('u.username = ?', Zend_Auth::getInstance()->getIdentity()) 
$result = $q->fetchArray();

Это предполагает, что существует доктрина "hasOne", определенная для Lost_Model_Station (в базовом классе):

public function setUp()
{
    parent::setUp();
    $this->hasOne('Lost_Model_Item', array(
         'local' => 'StatID',
         'foreign' => 'whatever_id_StatID_relates_to'));
}
0 голосов
/ 11 октября 2011
Zend_Auth::getInstance()->getIdentity()->ID

хорошо, вы получили то, что храните в Identity. Вам нужно разместить код, где вы просите пользователя войти в систему. Потому что там вы не храните идентификатор внутри хранилища сеансов, которое использует Zend_Auth В основном это делается там

 $row  = $this->_adapter->getResultRowObject();
 Zend_Auth::getInstance()->getStorage()->write($row);

где $ this -> _ адаптер равен

$this->_adapter = new Zend_Auth_Adapter_DbTable();
        $this->_adapter->setTableName('users')
                       ->setIdentityColumn('email')
                       ->setCredentialColumn('password');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...