Załóżmy, że w bazie danych mamy tabelę users, a w niej pola: id, username, password. Plik kontrolera autoryzacji wygląda tak:
<?php
// application/controllers/AuthController.php
class AuthController extends Zend_Controller_Action {
public function loginAction() {
$this->view->title = 'Login';
if(Zend_Auth::getInstance()->hasIdentity()) { // jeśli jesteśmy zalogowani, to następuje przekierowanie do kontrolera index i akcji index
$this->_redirect('index/index');
}
$form = new Form_LoginForm(); // tworzymy nowy formularz
$request = $this->getRequest();
if($request->isPost()) { // jeśli wysłaliśmy formularz to:
if($form->isValid($request->getPost())) { //sprawdzamy, czy został on prawidłowy wypełniony
$authAdapter = $this->getAuthAdapter(); //ustawiamy silnik autoryzacji
$username = $form->getValue('username'); // pobieramy dane z formularza
$password = $form->getValue('password');
$authAdapter->setIdentity($username)
->setCredential($password); //przepisujemy dane do adaptera
$auth = Zend_Auth::getInstance(); //pobieramy instancję Zend_Auth
$result = $auth->authenticate($authAdapter); //i uwierzytelniamy
if($result->isValid()) { // jeśli uwierzytelnianie się powiedzie to:
$identity = $authAdapter->getResultRowObject(); //do $identity zapisujemy dane użytkownika
$this->view->identity = $identity; //które możemy przepisać do pliku widoku
$authStorage = $auth->getStorage();
$authStorage->write($identity); //dane zapisujemy w pamięci Zend_Auth
$this->_redirect('index/index'); // w tym przypadku następuje przekierowanie do kontrolera index i akcji index
} else {
$this->view->errorMessage = 'Username or password is wrong!';
}
}
}
$this->view->form = $form;
}
public function logoutAction() {
Zend_Auth::getInstance()->clearIdentity();
$this->_redirect('index/index');
}
private function getAuthAdapter() {
$authAdapter = new Zend_Auth_Adapter_DbTable(Zend_Db_Table::getDefaultAdapter());
$authAdapter->setTableName('users')
->setIdentityColumn('username')
->setCredentialColumn('password');
return $authAdapter;
}
}
W Bootstraperze tworzymy nową metodę _init:
<?php
// application/Bootstrap.php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {
...
protected function _initIdentity() {
if(Zend_Auth::getInstance()->hasIdentity()) {
Zend_Registry::set('username', Zend_Auth::getInstance()->getStorage()->read()->username);
} else {
Zend_Registry::set('username', 'guest');
}
}
...
}
Teraz w IndexController.php mamy dostęp do nazwy użytkownika poprzez Zend_Registry::get('username'). Oczywiście w metodzie _initIdentity() w Bootstraperze możemy zapisać w rejestrze również inne dane pochodzące z tabeli users.