zend framework od podstaw. - pdf.helion.pl · wykorzystaj gotowe rozwiązania php do tworzenia...
TRANSCRIPT
Idź do
• Spis treści• Przykładowy rozdział• Skorowidz
• Katalog online
• Dodaj do koszyka
• Zamów cennik
• Zamów informacjeo nowościach
• Fragmenty książekonline
Helion SAul. Kościuszki 1c44-100 Gliwicetel. 32 230 98 63e-mail: [email protected]© Helion 1991–2011
Katalog książek
Twój koszyk
Cennik i informacje
Czytelnia
Kontakt
• Zamów drukowanykatalog
Zend Framework od podstaw.Wykorzystaj gotowe rozwiązaniaPHP do tworzenia zaawansowanychaplikacji internetowychAutor: Włodzimierz Gajda
ISBN: 978-83-246-3052-3
Format: 158×235, stron: 536
Elastyczne PHP – twórz nowe strony z wykorzystaniem Zend Framework!• Tworzenie stron WWW w Zend Framework – zacznij od „Hello, World”
• Bazy danych i formularze – opanuj wszystkie elementy
• Zabezpieczanie dostępu do aplikacji – nie daj się zaskoczyć
Zend Framework to nowoczesna biblioteka ułatwiająca tworzenie stron WWW w języku PHP.
Ten wygodny system pozwala projektantowi stron internetowych znacznie ograniczyć bądź
nawet wyeliminować konieczność żmudnego wpisywania kodu na rzecz posługiwania się
gotowymi elementami, niezależnie od tego, czy chce zaimplementować podstawowe mechanizmy
aplikacji, czy też wzbogacić ją o konkretne funkcjonalności. Wsparcie ze strony twórców języka PHP,
stabilna wersja, gotowa do pomocy społeczność programistów-entuzjastów oraz ogromna elastyczność
to główne atuty tego rozwiązania, sprawiające, że jego popularność rośnie w dużym tempie.
Niniejsza publikacja ma za zadanie przybliżyć Ci Zend Framework, począwszy od absolutnych
podstaw, aż po kwestie związane z pieczołowitym zabezpieczaniem dostępu do aplikacji.
Znajdziesz tu jasne i czytelne przykłady zastosowania frameworka w różnych sytuacjach oraz
propozycje gotowych rozwiązań konkretnych problemów programistycznych. Nauczysz się
tworzyć zarówno proste strony WWW, jak i zaawansowane aplikacje, wymieniać szablony oraz
implementować wtyczki. Poznasz sposoby tworzenia i wykorzystywania klas, współpracy z bazą
danych, publikowania aplikacji w Internecie oraz używania formularzy. Krótko mówiąc, masz
w ręku kompletny przewodnik po jednym z najlepszych frameworków PHP!
• Pierwszy projekt w Zend Framework i praca w środowisku NetBeans
• Tworzenie i usuwanie kontrolerów oraz akcji
• Wymiana szablonu HTML/CSS i dołączanie zewnętrznych zasobów
• Zasoby i implementacja inicjalizującej je wtyczki
• Bazy danych, tabele i relacje
• Identyfikacja rekordów na podstawie wartości slug
• Menu generowane na podstawie zawartości tabeli bazy danych
• Publikowanie aplikacji wykorzystującej bazę danych na serwerze hostingowym
• Przetwarzanie formularza, czyli implementacja interfejsu CRUD i dostosowywanie kodu HTML
• Walidatory oraz filtry i przesyłanie plików na serwer
• Zabezpieczanie haseł funkcjami skrótu
• Rejestracja i ograniczanie uprawnień użytkowników
• Modularyzacja aplikacji
Programuj swobodnie, wykorzystując uniwersalne biblioteki PHP!
Spis tre�ci
Cz��� I Tworzenie stron WWW w Zend Framework ...................... 9
Rozdzia� 1. Pierwszy projekt w Zend Framework ............................................... 11Podsumowanie ................................................................................................................ 17Uruchomienie gotowego przyk�adu ................................................................................ 18
Rozdzia� 2. Praca w �rodowisku NetBeans ........................................................ 19
Rozdzia� 3. Tworzenie i usuwanie kontrolerów oraz akcji ................................... 27Praca w �rodowisku deweloperskim ......................................................................... 33
Rozdzia� 4. Wymiana szablonu HTML/CSS ........................................................ 35Adresy strony z wierszem ........................................................................................ 41
Rozdzia� 5. Do��czanie zewn�trznych zasobów .................................................. 43Analiza kodu HTML generowanego przez aplikacj� ...................................................... 47
Rozdzia� 6. Hiper��cza ...................................................................................... 49Zalety mapowania adresów wewn�trznych/zewn�trznych ............................................. 51
Regu�y domy�lne i funkcja pomocnicza url() ........................................................... 60
Rozdzia� 7. Strona b��du 404 ........................................................................... 63Analiza odpowiedzi HTTP ............................................................................................. 71
Rozdzia� 8. Publikowanie projektu na serwerze hostingowym ............................ 75Zestawienie plików tworz�cych projekt 8.1 ............................................................. 80
Rozdzia� 9. Podsumowanie ............................................................................... 89Pliki �ród�owe aplikacji .................................................................................................. 90Przebieg wykonania aplikacji ......................................................................................... 90Konwencje nazewnicze klas i plików ............................................................................. 95
Cz��� II Procedura inicjalizacji aplikacji ..................................... 97
Rozdzia� 10. Zasoby .......................................................................................... 99Zasoby i ich opcje konfiguracyjne ................................................................................ 102
Zasób db ................................................................................................................. 102Zasób frontController ............................................................................................. 103Zasób layout ........................................................................................................... 103Zasób router ........................................................................................................... 104Zasób view ............................................................................................................. 105
4 Zend Framework od podstaw
Kiedy automatyczna konfiguracja zawodzi? ................................................................ 107Metody _init() klasy Bootstrap ..................................................................................... 108Inicjalizacja wybranych zasobów ................................................................................. 109Dost�p do zainicjalizowanych zasobów ....................................................................... 110Dost�p do zainicjalizowanych zasobów wewn�trz akcji .............................................. 111Kiedy nie implementowa� w�asnej metody _init()? ...................................................... 111
Rozdzia� 11. Implementacja wtyczki inicjalizuj�cej zasoby ................................. 123Klasa wtyczki i klasa zasobu ........................................................................................ 123W��czanie przetwarzania wtyczki ................................................................................ 126
Rozdzia� 12. Podsumowanie ............................................................................. 133
Cz��� III Zend_DB — klasy zapewniaj�ce dost�p do baz danych ... 135
Rozdzia� 13. Pierwszy projekt ZF wykorzystuj�cy baz� danych .......................... 137Uruchomienie gotowego projektu .......................................................................... 154
Rozdzia� 14. Klasa Zend_Db_Adapter_Abstract i klasy pochodne ...................... 157Klasa Zend_Db ............................................................................................................. 158Klasa Zend_Db_Adapter_Abstract i jej klasy pochodne .............................................. 160
Metoda Zend_Db_Adapter_Abstract::fetchRow() ................................................. 163Metoda Zend_Db_Adapter_Abstract::fetchAll() .................................................... 165Metoda Zend_Db_Adapter_Abstract::fetchCol() ................................................... 166Metoda Zend_Db_Adapter_Abstract::fetchOne() .................................................. 167Metoda Zend_Db_Adapter_Abstract::fetchAssoc() ............................................... 167Metoda Zend_Db_Adapter_Abstract::fetchPairs() ................................................. 167Metoda Zend_Db_Adapter_Abstract::setFetchMode() .......................................... 168Metoda Zend_Db_Adapter_Abstract::insert() ........................................................ 169Metoda Zend_Db_Adapter_Abstract::lastInsertId() ............................................... 169Metoda Zend_Db_Adapter_Abstract::delete() ....................................................... 170Metoda Zend_Db_Adapter_Abstract::update() ...................................................... 171Metoda Zend_Db_Adapter_Abstract::query() ........................................................ 172Metoda Zend_Db_Adapter_Abstract::quote() ........................................................ 172Metoda Zend_Db_Adapter_Abstract::quoteInto() .................................................. 173Metody do obs�ugi transakcji ................................................................................. 173U�ycie wyra�e SQL ............................................................................................. 174
Rozdzia� 15. Klasa Zend_Db_Table i klasy z ni� zwi�zane .................................. 181Klasa Zend_Db_Select ........................................................................................... 181
Klasa Zend_Db_Table .................................................................................................. 185Konstruktor klasy Zend_Db_Table ........................................................................ 186Metoda Zend_Db_Table::insert() ........................................................................... 187Metoda Zend_Db_Table::delete() .......................................................................... 188Metoda Zend_Db_Table::update() ......................................................................... 189Metoda Zend_Db_Table::find() ............................................................................. 189Metoda Zend_Db_Table::select() ........................................................................... 190Metoda Zend_Db_Table::fetchAll() ....................................................................... 190Metoda Zend_Db_Table::fetchRow() .................................................................... 191Metoda Zend_Db_Table::createRow() ................................................................... 191
Klasa Zend_Db_Table_Row ........................................................................................ 193Klasa Zend_Db_Table_Rowset .................................................................................... 194
Spis tre�ci 5
Rozdzia� 16. Dostosowywanie klas dost�pu do bazy danych .............................. 201Modyfikacja porz�dku kolekcji rekordów zwracanych przez metod�
Zend_Db_Table::fetchAll() ........................................................................................ 202Definiowanie w�asnej metody __toString()
w klasach dziedzicz�cych po Zend_Db_Table_Row ........................................... 203
Rozdzia� 17. Relacje 1:n (jeden do wielu) ......................................................... 211Klucze g�ówne .............................................................................................................. 211Relacja jeden do wielu .................................................................................................. 211Relacje 1:n w programie MySQL Workbench ............................................................. 213Klucze obce o warto�ci NULL ..................................................................................... 215Akcje referencyjne ........................................................................................................ 216U�ycie relacji 1:n w Zend Framework .......................................................................... 217Operowanie rekordami powi�zanymi relacj� ............................................................... 219
Tworzenie rekordów .............................................................................................. 219Rekordy zale�ne ..................................................................................................... 220Rekord nadrz�dny .................................................................................................. 222Implementacja w�asnych metod dost�pu do rekordów powi�zanych ..................... 223
Rozdzia� 18. Relacje n:m (wiele do wielu) ......................................................... 229Relacja wiele do wielu .................................................................................................. 229Relacje n:m w programie MySQL Workbench ............................................................ 230U�ycie relacji n:m w Zend Framework ........................................................................ 230Operowanie rekordami powi�zanymi relacj� ............................................................... 233
Tworzenie rekordów .............................................................................................. 233Rekordy zale�ne ..................................................................................................... 234Implementacja w�asnych metod dost�pu do rekordów powi�zanych ..................... 235
Rozdzia� 19. Podsumowanie ............................................................................. 243
Cz��� IV Szczegó�owe dane rekordu .......................................... 247
Rozdzia� 20. Akcja show — wy�wietlanie szczegó�owych danych rekordu .......... 249Metoda identyfikacji i wyszukiwania rekordów w bazie danych ................................. 249Akcja show i jej adres ................................................................................................... 250Przetwarzanie w akcji show .......................................................................................... 250Generowanie adresów stron akcji show ........................................................................ 251Konfiguracja przyjaznych adresów akcji show ............................................................. 258
Rozdzia� 21. Identyfikacja rekordów na podstawie warto�ci slug ....................... 263Klasa konwertuj�ca polskie znaki ................................................................................. 264Funkcje string2slug() oraz html2slug() ......................................................................... 266Automatyczne generowanie warto�ci slug podczas zapisywania rekordu w bazie danych .. 284
Rozdzia� 22. Widoki cz��ciowe ......................................................................... 289
Rozdzia� 23. Menu generowane na podstawie zawarto�ci tabeli bazy danych ..... 303
Rozdzia� 24. Zapisywanie w bazie danych plików binarnych .............................. 309Nag�ówek Content-Type ............................................................................................... 309Konwersja rozszerzenia w typ mime ............................................................................ 310Wy��czenie przetwarzania widoków .phtml ................................................................. 311Modyfikacja odpowiedzi w akcji .................................................................................. 312
6 Zend Framework od podstaw
Rozdzia� 25. Publikowanie aplikacji wykorzystuj�cejbaz� danych na serwerze hostingowym ......................................... 321
Rozdzia� 26. Podsumowanie ............................................................................. 339
Cz��� V Formularze .................................................................... 341
Rozdzia� 27. Formularz i kontrolki .................................................................... 343Tworzenie formularzy poleceniem zf create form ........................................................ 343Tworzenie kontrolek formularza .................................................................................. 344Umieszczanie formularza na stronach WWW .............................................................. 346Rodzaje kontrolek ......................................................................................................... 348
Klasa Zend_Form_Element_Button ....................................................................... 350Klasa Zend_Form_Element_Captcha ..................................................................... 350Klasa Zend_Form_Element_Checkbox .................................................................. 351Klasa Zend_Form_Element_File ............................................................................ 351Klasa Zend_Form_Element_Hash .......................................................................... 352Klasa Zend_Form_Element_Hidden ...................................................................... 352Klasa Zend_Form_Element_Image ........................................................................ 352Klasa Zend_Form_Element_Multi ......................................................................... 353Klasa Zend_Form_Element_MultiCheckbox ......................................................... 353Klasa Zend_Form_Element_Multiselect ................................................................ 354Klasa Zend_Form_Element_Password ................................................................... 354Klasa Zend_Form_Element_Radio ........................................................................ 354Klasa Zend_Form_Element_Reset ......................................................................... 355Klasa Zend_Form_Element_Select ........................................................................ 355Klasa Zend_Form_Element_Text ........................................................................... 356Klasa Zend_Form_Element_Textarea .................................................................... 356Klasa Zend_Form_Element_Submit ...................................................................... 356
Rozdzia� 28. Przetwarzanie formularza, czyli implementacja interfejsu CRUD ..... 359Formularz Application_Form_Imie .............................................................................. 360Operacje dwuetapowe ................................................................................................... 361
Tworzenie nowego rekordu .................................................................................... 361Edycja rekordu ....................................................................................................... 362
Akcje interfejsu CRUD ................................................................................................ 362Adresy URL akcji CRUD ............................................................................................. 363Akcja index ................................................................................................................... 363Akcja createform .......................................................................................................... 365Akcja create .................................................................................................................. 366Akcja delete .................................................................................................................. 368Akcja edit ..................................................................................................................... 369Akcja update ................................................................................................................. 370Akcja show ................................................................................................................... 372Parametryzacja kontrolera CRUD ................................................................................ 375Implementacja klasy My_Crud_Controller .................................................................. 378
Rozdzia� 29. Dostosowywanie kodu HTML formularzy ........................................ 383Domy�lny kod HTML formularza klasy Zend_Form ................................................... 383Funkcje pomocnicze formularzy .................................................................................. 384Obiekty dekoruj�ce i przebieg dekoracji ...................................................................... 386Domy�lne dekoratory klasy Zend_Form ...................................................................... 388Domy�lne dekoratory klasy Zend_Form_Element ....................................................... 389Proces generowania kodu HTML formularza ............................................................... 390
Spis tre�ci 7
Modyfikacja elementów form oraz dl ........................................................................... 391Modyfikacja kodu HTML kontrolek formularza .......................................................... 392Modyfikacja identyfikatora znacznika form ................................................................. 395Definiowanie szablonu formularza ............................................................................... 396
Rozdzia� 30. Walidatory i filtry .......................................................................... 399Filtrowanie i walidacja kontrolek formularza ............................................................... 400Interfejs Zend_Filter_Interface ..................................................................................... 400Klasa Zend_Validate_Abstract i jej pochodne .............................................................. 402Filtry i walidatory kontrolek ......................................................................................... 404
Tytu� ksi��ki ........................................................................................................... 404Rok wydania ........................................................................................................... 405Badanie numeru miesi�ca ....................................................................................... 406Badanie zale�no�ci pomi�dzy kilkoma kontrolkami .............................................. 407Sprawdzanie liczb rzymskich od I do X ................................................................. 409Walidacja kontrolek checkbox ............................................................................... 410Sprawdzanie numeru ISBN .................................................................................... 411Sprawdzanie poprawno�ci liczby typu float ........................................................... 411Walidacja przy u�yciu wyra�e regularnych .......................................................... 411Walidator kontrolki CAPTCHA ............................................................................. 412
Rozdzia� 31. Przesy�anie plików na serwer ........................................................ 417
Rozdzia� 32. Edycja zale�no�ci relacyjnych ....................................................... 427Klucze obce NOT NULL ............................................................................................. 427Klucze obce NULL ....................................................................................................... 437
Rozdzia� 33. Podsumowanie ............................................................................ 445
Cz��� VI Zabezpieczanie dost�pu do aplikacji ........................... 447
Rozdzia� 34. Pierwsza aplikacja zawieraj�ca formularz do logowania ................. 449Umieszczanie kont u�ytkowników w bazie danych ...................................................... 450Dodawanie konta .......................................................................................................... 450Formularz do logowania ............................................................................................... 452Kontroler autoryzacyjny ............................................................................................... 454Czy u�ytkownik jest zalogowany? ............................................................................... 457Zabezpieczanie dost�pu do danych tylko dla zalogowanych u�ytkowników ............... 457
Rozdzia� 35. Zabezpieczanie hase� funkcjami skrótu ......................................... 461Funkcja md5() ........................................................................................................ 461Funkcja sha1() ........................................................................................................ 462
Skróty hase� .................................................................................................................. 462Zmodyfikowana tabela user .......................................................................................... 463Dodawanie konta .......................................................................................................... 464Kontroler autoryzacyjny ............................................................................................... 465
Rozdzia� 36. Wysy�anie poczty ......................................................................... 471Wysy�anie poczty przy u�yciu Zend_Mail ................................................................... 471Obiektowa implementacja wysy�ania listów z has�ami ................................................. 474
Rozdzia� 37. Rejestracja u�ytkowników ............................................................ 477Rejestracja u�ytkownika w systemie ............................................................................ 478Resetowanie zapomnianego has�a ................................................................................ 482Zmiana has�a ................................................................................................................. 487
8 Zend Framework od podstaw
Rozdzia� 38. Ograniczanie uprawnie� u�ytkowników ......................................... 493Przyk�adowe uprawnienia ............................................................................................. 494Czy u�ytkownik ma uprawnienia do wykonania akcji? ................................................ 494Implementacja klasy My_Crud_Auth_Controller ......................................................... 496Modyfikacja kontrolera AuthController ....................................................................... 498Polecenia nadaj�ce uprawnienia ................................................................................... 499Ustalanie uprawnie poleceniami ................................................................................. 502
Polecenia allow-action-access i disallow-action-access ......................................... 502Polecenia grant i revoke ......................................................................................... 502Polecenia set-readable i set-unreadable .................................................................. 502Polecenia grant-editor-rules i revoke-editor-rules .................................................. 502Polecenia grant-reader-rules i revoke-reader-rules ................................................. 503Polecenie clear ....................................................................................................... 503
Rozdzia� 39. Modularyzacja aplikacji ................................................................ 507Nazewnictwo klas zawartych w modu�ach ................................................................... 508Adresy URL akcji w module ........................................................................................ 509
Rozdzia� 40. Podsumowanie ............................................................................. 517
Cz��� VII Dodatki ...................................................................... 519
Dodatek A U�ycie Doctrine w aplikacji Zend Framework ................................ 521Instalacja zf-doctrine .................................................................................................... 521
Skorowidz .................................................................................... 527
Rozdzia� 4. � Wymiana szablonu HTML/CSS 35
Rozdzia� 4.
Wymiana szablonuHTML/CSS
Teraz zajmiemy si� udekorowaniem aplikacji gotowym szablonem HTML/CSS. Naj-pierw podzielimy widoki na dwa fragmenty: uk�ad oraz tre��. Wyodr�bniony uk�adb�dzie zapisany w jednym pliku layout.phtml, widoki akcji b�d� za� generowa�y wy-��cznie tre�� zawart� na stronie. W ten sposób upro�cimy nadanie spójnego wygl�duwszystkim stronom aplikacji.
Dekoracj� aplikacji pisanej w ZF szablonem HTML/CSS rozpoczynamy od wydaniapolecenia:
zf enable layout
W wyniku wydania powy�szej komendy w folderze aplikacji pojawi si� plik:application/layouts/scripts/layout.phtml
za� w pliku configs/application.ini pojawi si� wpis:resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"
Powy�sza regu�a modyfikuje przebieg wykonania aplikacji: generowanie strony WWWwysy�anej do przegl�darki b�dzie odbywa�o si� przy u�yciu pliku layout.phtml1.
W pliku layout.phtml umieszczamy szablon strony WWW, czyli m.in. znaczniki html,head i body oraz elementy ustalaj�ce podzia� na nag�ówek, menu, tre�� czy panele (np.div). Tre�� zawarta na stronie WWW jest generowana przez widoki akcji, które tymrazem nie zawieraj� ju� elementów html, head czy body.
1 Je�li instrukcj� zawart� w pliku application.ini zakomentujesz, poprzedzaj�c j� �rednikiem:
;resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"
wówczas plik layout.phtml nie b�dzie wykorzystywany. Generowanie stron WWW b�dzie przebiega�oidentycznie jak w pierwszych trzech rozdzia�ach. Kod HTML wysy�any do przegl�darki b�dzie w ca�o�cipochodzi� z widoku akcji.
36 Cz��� I � Tworzenie stron WWW w Zend Framework
Przeanalizujmy stron� WWW, która by�a generowana w przyk�adzie trzecim jakowynik przetwarzania akcji wierszyk/pokaz (listing 3.3). W widoku akcji zawarty by�kompletny kod HTML strony wysy�anej do przegl�darki.
Wprowadzaj�c podzia� na szablon i tre��, plik z listingu 3.3 dzielimy na dwa oddzielnepliki: szablon layout.phtml widoczny na listingu 4.1 oraz widok przedstawiony na li-stingu 4.2.
Listing 4.1. Szablon layout.phtml dla strony z listingu 3.3
<!DOCTYPE...><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl"> <head> <title>Wyliczanka</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head><body><?php echo $this->layout()->content ?></body></html>
Listing 4.2. Tre�� wyodr�bniona ze strony 4.1
<h1>Ene, due</h1><p>Ene, due, rike, fake<br />Torbe, borbe, ósme, smake<br />Eus, deus, kosmateus<br />I morele baks.</p>
Zwró� uwag�, �e szablon aplikacji widoczny na listingu 4.1 zawiera specjaln� in-strukcj�:
<?php echo $this->layout()->content ?>
Powoduje ona umieszczenie w szablonie wyniku przetwarzania akcji. W ten sposóbpodczas wykonywania aplikacji dwa oddzielne pliki z listingów 4.1 oraz 4.2 s� ��czo-ne w jeden dokument z listingu 3.3, który jest nast�pnie wysy�any do przegl�darki.
Przyk�ad 4. Wierszyk pt. Dwa kabele
Przygotuj stron� WWW, która b�dzie prezentowa�a tre�� wiersza pt. Dwa kabele. Zadaniewykonaj tak, by wierszyk by� prezentowany na stronie akcji index/index. W rozwi�-zaniu utwórz szablon layout.phtml. Uk�ad strony WWW zapisz w pliku layout.phtml,tre�� wiersza za� — w widoku akcji index/index (tj. w pliku index.phtml).
Wykorzystaj szablon zawarty w folderze html-css-template/. Tre�� wiersza oraz folderhtml-css-template/ s� zawarte w pliku 04-start.zip, który znajdziesz pod adresemftp://ftp.helion.pl/przyklady/zendfr.zip. Wykonana strona powinna wygl�da� tak jak narysunku 4.1.
Rozdzia� 4. � Wymiana szablonu HTML/CSS 37
Rysunek 4.1. Strona z wierszem pt. Dwa kabele
ROZWIZANIE
Krok 1. Utwórz nowy projekt ZF
Utwórz nowy projekt PHP, który wykorzystuje ZF. Projekt nazwij dwa-kabele. Utwo-rzenie nowego projektu b�dzie równowa�ne wykonaniu komendy:
zf create project . dwa-kabele
Nast�pnie w pliku public/.htaccess dodaj regu�y:SetEnv APPLICATION_ENV developmentDirectoryIndex index.php
W zale�no�ci od swoich preferencji wszystkie projekty omówione w ksi��ce mo-�esz wykona� w wierszu polece� lub w �rodowisku NetBeans.
Krok 2. W��cz przetwarzanie szablonu layout.phtml
Wydaj komend�:zf enable layout
38 Cz��� I � Tworzenie stron WWW w Zend Framework
W folderze aplikacji pojawi si� plik application/layouts/scripts/layout.phtml. Jego za-warto�� jest przedstawiona na listingu 4.3.
Listing 4.3. Domy�lna zawarto�� pliku layout.phtml
<?php echo $this->layout()->content ?>
Krok 3. Dostosuj widok akcji index/index
W widoku akcji index/index wprowad� tre�� wierszyka. Zarys pliku application/views/scripts/index/index.phtml jest przedstawiony na listingu 4.4.
Listing 4.4. Fragment widoku index.phtml
<h2>W�odzimierz Gajda</h2><h3>Dwa kabele</h3><p>Czasem tak sie dziwnie sk�ada,<br />�e gdy nic nie zapowiada<br />�adnych nieszcz��� czy frustracji,<br />Jaki� smyk wkroczy do akcji<br />I, by� mo�e, bez z�ych ch�ci,<br />Sielank� ojcu zam�ci.<br /><br />...
Krok 4. Zmie� szablon HTML/CSS
W pliku layout.phtml dodaj znaczniki HTML ustalaj�ce wygl�d generowanej stronyWWW. Zadanie mamy rozwi�za�, wykorzystuj�c szablon zapisany w folderze 03-start/html-css-template/. Plik 04-start/html-css-template/index.html jest przedstawiony nalistingu 4.5.
Listing 4.5. Szablon index.html, którego chcemy u�y� w projekcie dwa-kabele
<!DOCTYPE...><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl"> <head> <title>template</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link rel="stylesheet" type="text/css" href="css/style.css" media="screen" /> <link rel="stylesheet" type="text/css" href="css/print.css" media="print" /> </head><body>
<div id="pojemnik"> <h1 id="naglowek">Wiersze i wierszyki...</h1> <div id="tekst"> <p> Lorem ipsum... </p> </div>
Rozdzia� 4. � Wymiana szablonu HTML/CSS 39
<div id="dol"></div></div>
</body></html>
Znaczniki z listingu 4.3 nale�y umie�ci� w pliku layout.phtml, tak jak pokazano na li-stingu 4.6.
Listing 4.6. Szablon layout.phtml, który spowoduje, �e strona z wierszem b�dzie wygl�da�a tak jak narysunku 4.1
<!DOCTYPE...><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl"> <head> <title>Wierszyk</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link rel="stylesheet" type="text/css" href="css/style.css" /> <link rel="stylesheet" type="text/css" href="css/print.css" media="print" /> </head><body>
<div id="pojemnik"> <h1 id="naglowek">Wiersze i wierszyki...</h1> <div id="tekst"> <?php echo $this->layout()->content; ?> </div> <div id="dol"></div></div>
</body></html>
Kod HTML generowanej strony WWW nale�y sformatowa� stylami CSS zawartymiw plikach html-css-template/css/style.css oraz html-css-template/css/print.css. Stylez pliku style.css s� przeznaczone dla monitorów, a style z pliku print.css — dla urz�dzedrukarek. Pliki style.css oraz print.css kopiujemy z folderu html-css-template/css/ dofolderu public/css/2. Modyfikowanie szablonu aplikacji koczymy, kopiuj�c pliki gra-ficzne z folderu html-css-template/images/ do folderu public/images/.
W celu sprawdzenia wygl�du aplikacji odwied� za pomoc� przegl�darki adres:http://localhost/dwa-kabele/public/
Powiniene� ujrze� stron� tak� jak na rysunku 4.1. Je�li chcesz pozna� funkcj� stylówprint.css, wykonaj w przegl�darce operacj� Plik/Podgl�d wydruku. Ujrzysz tak� stron�jak na rysunku 4.2.
2 Foldery public/css/ oraz public/images/ nale�y utworzy� samodzielnie.
40 Cz��� I � Tworzenie stron WWW w Zend Framework
Rysunek 4.2. Podgl�d wydruku strony z rysunku 4.1
Dzi�ki zastosowaniu w pliku print.css w�a�ciwo�ci:display: none
elementy dekoracyjne zosta�y usuni�te i nie pojawi� si� na wydruku.
Pliki graficzne tworz�ce szablon HTML/CSS z rysunku 4.1 nazywaj� si� gora.png,naglowek.png, pojemnik.png i stopka.png. Pliki te nie wyst�puj� w kodzie HTML,a wy��cznie w kodzie CSS. W projekcie nie korzystamy ze znacznika img:
<img src="" alt="" />
Pliki PNG stanowi� t�o wybranych elementów HTML i s� do��czane do strony przyu�yciu w�a�ciwo�ci background, np.:
body { background: #e8edef url('../images/gora.png') repeat-x; margin: 0; font-family: Georgia, serif;}
cie�ki do plików graficznych s� wzgl�dne. Prowadz� z pliku style.css do folderuimages/.
Rozdzia� 4. � Wymiana szablonu HTML/CSS 41
Adresy strony z wierszem
W wykonanej aplikacji strona akcji index/index jest dost�pna pod sze�cioma ad-resami URL:
http://localhost/dwa-kabele/public/http://localhost/dwa-kabele/public/index.phphttp://localhost/dwa-kabele/public/index.php/http://localhost/dwa-kabele/public/index.php/indexhttp://localhost/dwa-kabele/public/index.php/index/indexhttp://localhost/dwa-kabele/public/index.php/index/index/
Tylko dwa pierwsze adresy b�d� powodowa�y wy�wietlenie strony WWW ozdobionejstylami CSS. Cztery dolne adresy, czyli:
http://localhost/dwa-kabele/public/index.php/http://localhost/dwa-kabele/public/index.php/indexhttp://localhost/dwa-kabele/public/index.php/index/indexhttp://localhost/dwa-kabele/public/index.php/index/index/
b�d� wy�wietla�y stron� WWW pozbawion� stylów CSS. Dzieje si� tak dlatego, �e�cie�ka prowadz�ca do stylów CSS jest zapisana w pliku layout.phtml jako wzgl�dna:
<link rel="stylesheet" type="text/css" href="css/style.css" />
Style zostan� wi�c odnalezione wy��cznie wtedy, gdy znajduj� si� w stosunku bie��-cego adresu URL w podfolderze css/.
Skorowidz#, 57$_belongsTo, 343$_decorators, 387$_element, 387$_name, 148$_page, 129$bind, 163, 171, 172, 173$cfg, 120$defaultsArray, 119$fetchMode, 163$form, 417$router, 110$sql, 163, 172, 244$table, 171$where, 171, 173.htaccess, 13, 14, 25, 63, 83__construct(), 185__toString(), 183, 201, 203, 339_initAdresy(), 111_insert(), 339_update(), 339404 (b��d), 63
Aabbr(), 266action helpers, 303addDecorator(), 387, 393addElement(), 344, 346admin, 503adres
domenowy, 81konwersja, 50wewn�trzny, 49, 51zewn�trzny, 49, 51
akcja, 17show, 249, 250, 289, 309
akcje referencyjne, 216allow-action-access, 499, 502
Alnum, 401, 403Alpha, 401, 403analiza odpowiedzi HTTP, 71animacja, 44API, 243appendBody(), 312appendContent(), 452application, 12application.ini, 90, 99, 101, 105, 107, 113, 123,
133APPLICATION_ENV, 92Application_Form_Imie, 360APPLICATION_PATH, 91atak typu
brute-force, 468SQL Injection, 165
Auth, 457AuthController, 454, 465AUTO INCREMENT, 142automatyczne generowanie warto�ci slug, 339
BBaseName, 401basePath, 105baseUrl(), 46, 48, 56, 67baza danych (projekt), 139beginTransaction(), 162Between, 403biblioteki Dojo, 101bind(), 182blokowanie dost�pu do plików, 84b��d 404, 63b��dny adres URL, 63Boolean, 401Bootstrap, 108, 109bootstrap(), 109Bootstrap.php, 12, 94, 95, 133brute-force, 468
528 Zend Framework od podstaw
Ccachemanager, 101CamelCaseToUnderscore, 402CASCADE, 216charset, 105checkbox, 410clear, 499, 503clearDecorators(), 387clearElements(), 346collate, 146columns(), 182commit(), 163Compress, 401configs, 12contentType, 105Controller, 13controllers, 12count(), 194create, 361, 366CREATE
SCHEMA IF NOT EXISTS, 146TABLE, 146
createform, 361, 365createRow(), 191Cross Site
Request Forgery, 399Scripting, 399
CRUD, 359, 427, 445current(), 194
DDaneProvider, 318Database/Forward Engineer, 144, 175Date, 403db, 101, 102DbTable, 148Deccription, 389Decompress, 401Decrypt, 401default Action, 33defaultAttachOrder, 117defaultControllerName, 33define(), 91delete, 368delete(), 162, 170, 173, 186, 188, 193dependent table, 212Description, 391destination table, 212Digits, 401, 403Dir, 401DirectoryIndex, 25
dirname(), 92disallow-action-access, 499, 502display: none, 40distinct(), 182d�ugie nazwy metod, 223docs, 13Doctrine (biblioteka), 521doctype, 105Dojo, 101domena, 81, 86domy�lna
akcja, 59strona, 15, 16
dost�p doakcji (zabezpieczenie), 493aplikacji, 517bazy danych, 101, 176, 243plików, 83
DROP SCHEMA IF EXISTS, 146
Eedit, 362, 369edycja rekordu, 362elementy dekoracyjne, 40EmailAddress, 403encje (konwersja), 266Encrypt, 401error, 12, 13, 63Errors, 389, 391
FF6, 22factory(), 158fetchAll(), 149, 161, 165, 173, 178, 186, 190,
201, 339fetchAssoc(), 161, 167fetchCol(), 161, 166, 173fetchOne(), 161, 167, 173fetchPairs(), 162, 167, 173fetchRow(), 161, 164, 173, 191, 249filtrowanie, 399find(), 186, 189, 249findOneBySlug(), 339Float, 403fluent interface, 184flush privileges, 146foreign key, 211form, 383Form, 391, 395formatowanie stylami CSS, 39formButton(), 384
Skorowidz 529
formCheckbox(), 384FormElements, 391formTextarea(), 384formularz
do logowania, 452edycyjny, 427na stronie WWW, 346rejestracyjny, 478
forUpdate(), 182from(), 182frontController, 101frontController (opcje konfiguracyjne ), 103funkcja
pomocnicza, 303skrótu, 461, 517
GGenerate DROP SCHEMA, 144get(), 125getAdapter(), 185getConnection(), 159getDecorator(), 387getDecorators(), 387getElement(), 346getElements(), 346getInvokeArg(), 111getMimetypeOnExt, 310getPage(), 129getResource(), 110, 111getResponse(), 312getRow(), 194getTableOfContents(), 273getValues(), 361, 400Gmail, 472grant, 499, 502grant all, 146grant-editor-rules, 499, 502grant-reader-rule, 499grant-reader-rules, 503GreaterThan, 403group(), 182
Hhash table, 229has�o konta root, 147headLink(), 106, 108headMeta(), 107headScript(), 106, 108headStyle(), 106headTitle(), 106, 108, 117heaving(), 182
Hello, world!, 11helpers, 12Hex, 403hiper��cze, 57Hostname, 403href, 57html2slug(), 266HtmlEntities, 401htmlGetFirstMatch(), 275HtmlTag, 389, 391HTTP/1.1 404 Not Found, 72
Iidentyfikacja aplikacji, 101implementacja w�asnej wtyczki, 123, 133importowanie bazy danych, 333InArray, 403index, 12, 13, 363, 454index.php, 13, 14, 95index.phtml, 12indexAction(), 13, 177IndexController.php, 95inicjalizacja zasobów, 133init(), 125, 129inlineScript(), 106insert(), 149, 162, 169, 173, 186, 187insertIfNotExists(), 339Int, 401, 403interfejs
API, 243do rejestracji u�ytkowników, 477dost�pu do baz danych, 243obiektowy, 245tablicowy, 244, 245
Ip, 403Isbn, 403iso2utf8(), 264ISO-8859-2, 264isPost(), 361isValid(), 361, 400
Jjoin(), 183joinCross(), 183joinFull(), 183joinFullUsing(), 183joinInner(), 183joinLeft(), 183joinLeftUsing(), 183joinNatural(), 183joinRight(), 183
530 Zend Framework od podstaw
joinRightUsing(), 183joinUsing(), 183jQuery LightBox, 417
Kklasa, 13klucz
g�ówny, 142, 211, 360obcy, 211, 215, 427, 437
kodbiblioteki Dojo, 101SQL zaprojektowanej bazy danych, 144
kodowanie, 140kolekcja kontrolek, 343komunikat
diagnostyczny, 452o b��dach, 33
konfiguracjamodu�ów aplikacji, 101poczty elektronicznej, 101sesji, 101zasobów aplikacji (r�czna), 108
konto, 450kontroler, 17
aplikacji, 13usuwanie, 30
kontrolki formularza, 344konwencje nazewnicze, 95konwersja
adresu, 50, 51obiektu w napis, 339
korzystanie w jednej aplikacji z kilku po��cze zbazami danych, 101
LLabel, 389, 391lastInsertId(), 162, 169layout, 99, 101, 103, 107layout.phtml, 101, 114, 121LessThan, 403library, 13limit(), 183limitPage(), 183litery du�e na ma�e, 266LiveHTTPHeaders, 71, 310loadDefaultDecorators(), 387locale, 101log, 101login, 454, 455logout, 454
Mmail, 101mailNewPassword(), 474mapa witryny, 101mapowanie adresów URL, 66md5(), 461, 462mechanizm przywracania dost�pu, 471menu, 303
g�ówne, 339nawigacyjne, 101
merge(), 120metoda uruchamiania projektu, 21mime, 310mod_rewrite, 14models, 12modules, 101modu�, 507
adresy akcji, 509nazwa klasy, 508
multidb, 101, 243My_Crud_Auth_Controller, 496My_Crud_Controller, 378, 496My_Mail, 474My_Mail_Gmail, 474My_Mail_Netart, 474My_Mime, 310My_Page, 126My_Validate_User, 485MySQL Workbench, 139, 213, 230
Nnag�ówek HTTP, 71nale�y do, 343named parameters, 165navigation, 101nazwa
akcji, 14bazy danych (dywiz), 175domy�lnego kontrolera, 33domy�lnej akcji, 33konta, 480metody, 14pliku .php, 14projektu, 20widoku, 14
NetBeans, 19NO ACTION, 216notacja wielb��dzich garbów, 28NotEmpty, 403nowe konto, 464Null, 401NULL, 215
Skorowidz 531
Oobiekt nadrz�dny, 343obs�uga
b��dnych ��da HTTP, 15b��du 404, 65transakcji, 173
odpowiedzi wysy�ane przez serwer WWW, 71odwo�ania, 43
b��dne, 60odzyskiwanie has�a, 517opcje konfiguracyjne, 102operacja
C, 361U, 362
order(), 183orHeaving(), 183orWhere(), 183owner, 343
Ppage, 126page.extension = "php", 121page.title.content, 117page.title.separator, 117pami�� podr�czna, 101parent table, 212parseArticle(), 274partial view, 289partial(), 289pdo_mysql, 158placeholders, 165poczta elektroniczna, 471pojemniki (w kodzie SQL), 165pokazAction(), 31polskie znaki diakrytyczne, 266po��czenie
w trybie leniwym, 159z kilkoma bazami, 243z serwerem bazodanowym (instrukcje), 243
populate(), 361porz�dek rekordów (modyfikacja), 339positional parameters, 165PostCode, 403powi�zania relacyjne, 339
n:m, 232preDispatch(), 457, 517PregReplace, 401primary key, 211projekt (utworzenie nowego), 11przetwarzanie szablonu, 37
layout.phtml, 89
przyjazne adresy, 339public, 13, 25
function 173publikacja witryny w Internecie, 75Put NetBeans metadata into a separate directory, 23
Qquery(), 162, 172quote(), 162, 172quoteInto(), 162, 173
RrandomPassword(), 482reader, 503RealPath, 401realpath(), 92referential actions, 216Regex, 411RegEx, 403regu�a, 58
konfiguracyjna, 49konfiguruj�ca wirtualny serwer stron WWW, 81translacji, 61, 77, 258
rekord nadrz�dny, 222rekordy
powi�zane relacj�, 219zale�ne, 220, 234, 339
relacje, 2451:n, 211, 213, 215n:m, 229, 230
removeDecorator(), 387render(), 386, 387reset(), 183resetowanie has�a, 471, 482resources, 99RESTRICT, 216revoke, 499, 502revoke-editor-rules, 499, 502revoke-reader-rules, 499, 503r�czna konfiguracja zasobów aplikacji, 108robot internetowy, 101rollBack(), 163root, 147, 503router, 95, 99, 101, 104, 108routing, 51rozszerzenia, 309Run Project, 22
532 Zend Framework od podstaw
Ssalt, 463save(), 193scripts, 12seek(), 194select(), 163, 186, 190send(), 474session, 101SET
DEFAULT, 217NULL, 216
setAction(), 361setDecorators(), 387setDefaultAdapter(), 185setDefaultAttachOrder(), 106setElements(), 346setFetchMode(), 162, 168setFromArray(), 193setHeader(), 312setMethod(), 361set-readable, 499, 502setSeparator(), 106setSlug(), 286, 339set-unreadable, 499, 502sha1(), 461, 462show, 249, 250, 289, 309, 372showAction(), 339simplexml_load_file(), 151skrócenie generowanego napisu do zadanej
d�ugo�ci, 266skrypt wype�niaj�cy baz� danych, 207slug, 284, 339source table, 212spis tre�ci, 276sposób uruchamiania projektu, 21SQL, 174
injection, 399string2slug(), 266StringLength, 403StringToLower, 401StringToUpper, 401StringTrim, 401StripNewlines, 401StripTags, 401strona b��du 404, 69SyntaxHighlighter, 270system uprawnie, 493, 517szablon
HTML/CSS, 35layout.phtml, 114strony WWW, 35
�cie�ki dost�pu, 85�rodowisko NetBeans, 19
Ttabela
docelowa, 212haszuj�ca relacji, 229skrzy�owa, 229�ród�owa relacji, 212
tablica asocjacyjna, 153napisów, 244
tests, 13t�umaczenie na inne j�zyki, 101toArray(), 193, 194translacja adresów, 57, 101, 298translate, 101tryb leniwy, 272try-catch, 159tworzenie
akcji, 89kontrolera, 89nowego
konta, 464projektu, 20, 89rekordu, 361
typdanych, 309mime, 310
tytu� strony, 78
Uudost�pnianie zasobów (na stronie WWW), 309unauthorizedAction(), 498UnderscoreToCamelCase, 402unikalny tytu� strony, 79union(), 183update, 362, 370update(), 162, 171, 173, 186, 189uprawnienia, 493,
do wykonania akcji, 494uproszczone napisy, 339useragent, 101userHasAccess(), 494Usu, 30usuwanie
akcji, 89kontrolera, 30, 89
utf8, 146
Skorowidz 533
UTF-8, 264utf8_polish_ci, 140, 146utworzenie nowego projektu, 11
Vview, 101, 105, 123
helper, 303ViewHelper, 389, 391views, 12
Wwalidacja, 399where(), 183widok
akcji, 38aplikacji, 101cz��ciowy, 289, 339
wieloj�zyczne wersje aplikacji, 101WINDOWS-1250, 264w�asne
implementacje metod, 223metody, 111, 133wtyczki, 123
w�a�ciciel, 343wstawianie rekordu do
bazy danych, 339tabeli, 149
wype�nianie bazy danych rekordami, 152wyra�enia SQL, 174wysy�anie poczty elektronicznej, 471wyszukiwanie rekordów
na podstawie warto�ci slug, 339o zadanej warto�ci klucza g�ównego, 249
wy�wietlenie komunikatu: Brak dost�pu, 498
Zzabezpieczanie dost�pu do
aplikacji, 449danych, 457
zapisywanie informacji diagnostycznych, 101zasoby zewn�trzne, 43zawarto�� tabeli bazy danych, 149zdj�cie, 44Zend_ Form_Element_File, 417Zend_Application, 94, 95Zend_Application_Bootstrap_Bootstrap, 95Zend_Application_Resource_View, 123Zend_Controller_Action, 95Zend_Controller_Response_Http, 312Zend_Db, 157, 158, 243, 521
Zend_Db::FETCH_ASSOC, 168Zend_Db::FETCH_BOTH, 168Zend_Db::FETCH_NUM, 168Zend_Db::FETCH_OBJ, 168Zend_Db_Adapter_Abstract, 157, 160, 244Zend_Db_Adapter_Db2, 158Zend_Db_Adapter_Mysqli, 158Zend_Db_Adapter_Oracle, 158Zend_Db_Adapter_Pdo_Ibm, 157Zend_Db_Adapter_Pdo_Mssql, 157Zend_Db_Adapter_Pdo_Mysql, 157Zend_Db_Adapter_Pdo_Oci, 157Zend_Db_Adapter_Pdo_Pgsql, 157Zend_Db_Adapter_Pdo_Sqlite, 157Zend_Db_Adapter_Sqlsrv, 158Zend_Db_Expr, 157Zend_DB_Expr, 174Zend_Db_Select, 157, 181, 182Zend_Db_Statement_Exception, 187Zend_Db_Table, 157, 185, 186, 243Zend_Db_Table_Relationships, 157Zend_Db_Table_Row, 157, 193, 243Zend_Db_Table_Rowset, 157, 194, 243Zend_Filter_Interface, 400Zend_Form_Element, 348, 400, 445Zend_Form_Element_ Text, 348Zend_Form_Element_Button, 350Zend_Form_Element_Captcha, 350Zend_Form_Element_Checkbox, 351Zend_Form_Element_File, 351Zend_Form_Element_Hash, 352Zend_Form_Element_Hidden, 352Zend_Form_Element_Image, 352Zend_Form_Element_MultiCheckbox, 353Zend_Form_Element_Multiselect, 354Zend_Form_Element_Password, 354Zend_Form_Element_Radio, 354Zend_Form_Element_Reset, 355Zend_Form_Element_Select, 355Zend_Form_Element_Submit, 348, 356Zend_Form_Element_Text, 356Zend_Form_Element_Textarea, 356Zend_Mail, 471Zend_Validate_Abstract, 402Zend_Validate_Db_NoRecordExists, 403Zend_Validate_File_Exists, 403Zend_Validate_File_NotExists, 403zf create action, 89zf create controller, 89zf create form, 445zf create project, 12, 89zf enable layout, 56, 89, 114zf-doctrine, 521zfproject.xml, 13
534 Zend Framework od podstaw
z�o�liwy kod, 399zmiana has�a, 487znaczniki HTML (usuwanie), 266znaki ró�ne od liter i cyfr (zast�powanie
separatorem), 266