zend framework od podstaw. - pdf.helion.pl · wykorzystaj gotowe rozwiązania php do tworzenia...

24

Upload: duongthuy

Post on 28-Feb-2019

224 views

Category:

Documents


0 download

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