Zend_Auth i Doctrine
O łączeniu frameworku Zenda z ORM Doctrine wiele w internecie napisano. Ale trzeba pamiętać że wiele bibliotek zawartych w frameworku również może wymagać połączenia z bazą danych, a domyślnie wymagają użycia Zend_Db_Table. Na szczęście taka sytuacja została przewidziana przez twórców którzy udostępnili odpowiedni zestaw interface’ów umożliwiając w ten sposób tworzenie własnych adapterów a tym samym dostosowanie komponentów wedle własnych zachcianek.
Jak połączyć Doctrine i Zend_Session napisał Zyx na swoim blogu(www.zyxist.com). W podobny sposób można podpiąć Zend_Auth, ale klasa już została napisana i można ją pobrać stąd Zend_Auth_Adapter_Doctrine_Table. Do tego miejsca wszystko jest jasne i proste, dziwi mnie za to trochę sposób używania tego w aplikacji.
Zakładając że mamy prostą tabele użytkowników opisaną następująco
WebsiteUser:
tableName: website_users
columns:
UserId: { type: integer(8), primary: true, autoincrement: true }
GroupId: { type: integer(8), notnull: true }
Username: { type: string(255), notnull: true }
Password: { type: string(255), notnull: true }
Email: { type: string(255), notnull: true }
indexes:
uniqueusername: { fields: [Username], type: unique }
uniqueemail: { fields: [Email], type: unique }
relations:
WebsiteGroup: { class: RuczajGroup, local: GroupId, foreign: GroupId }
options: { type: INNODB, collate: utf8_polish_ci, charset: utf8 }
to ustawienia nazwy tabeli i pól wygląda dość dziwnie, mianowicie nazwa tabeli nie jest faktyczną nazwą tabeli tylko czymś w rodzaju nazwy encji. Pola też należy pisać dokładnie takimi samymi literami(chodzi o wielkość) jak w pliku YAML, mimo że tworzone tabele składają się wyłącznie z małych liter. W sumie wydaje się to logiczne, ale trochę czasu mi zajęło dojście co oni tak naprawdę chcą a wyjątek typu
('The supplied parameters to Zend_Auth_Adapter_Doctrine_Record failed to produce a valid sql statement, please check table and column names for validity'); nie podpowiada zbyt wiele.
Poprawny kod autoryzacji wygląda zatem tak:
$dbConnection = Doctrine::getConnectionByTableName('website_users');
$authAdapter = new Zend_Auth_Adapter_Doctrine_Table($dbConnection);
$authAdapter->setTableName('WebsitejUser')
->setIdentityColumn('Username')
->setCredentialColumn('Password')
->setCredentialTreatment('md5(?)');
| Drukuj artykuł | Ten wpis został napisany przez pejotr na 18-04-2009 o 10:38, i jest w kategorii Programowanie. Podążaj za odpowiedziami do tego wpisu przez RSS 2.0. Możesz napisać komentarz, lub trackbacka z Twojej własnej strony. |