Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00373 005105 12616676 na godz. na dobę w sumie
Symfony w przykładach - książka
Symfony w przykładach - książka
Autor: Liczba stron: 384
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-246-2788-2 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> webmasterstwo >> php - programowanie
Porównaj ceny (książka, ebook, audiobook).

Naucz się korzystać z pełni możliwości biblioteki MVC!

Symfony, framework stworzony w języku PHP i mający na celu uproszczenie oraz przyspieszenie tworzenia aplikacji internetowych, znajduje zastosowanie w coraz większej liczbie projektów. Jego wykorzystanie wiąże się ze znacznie efektywniejszym programowaniem, a także pozwala uniknąć wielu błędów i powtarzających się, nużących czynności. Symfony opiera się na modelu MVC i posiada wiele wbudowanych funkcji - między innymi ochronę przed atakami CSRF oraz XSS. Ten framework nie ogranicza się do wykorzystania własnej biblioteki, lecz zapewnia także możliwość integracji z innymi. Jeśli chcesz nauczyć się, jak to działa w praktyce, trzymasz w rękach właściwą pozycję!

Książka 'Symfony w przykładach' jest możliwie najbardziej skondensowaną instrukcją obsługi Symfony. Żeby ją zrozumieć, nie musisz dysponować oszałamiającą wiedzą - wystarczą podstawy PHP i XHTML/CSS. Jej autor poprowadzi Cię od najprostszych projektów ('Hello world'), przez nieco bardziej zaawansowane zagadnienia, dotyczące zewnętrznych zasobów, połączenia projektu z bazą danych, publikacji projektu na serwerze hostingowym, aż po tworzenie różnego typu paneli administracyjnych. Krótko mówiąc, na samych konkretnych przykładach przejdziesz drogę do stworzenia własnej, niezawodnie działającej aplikacji internetowej.

I Ty możesz ułatwić sobie tworzenie doskonałych aplikacji internetowych!

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Idź do Symfony w przykładach • Spis treści • Przykładowy rozdział Autor: Włodzimierz Gajda ISBN: 978-83-246-2788-2 Format: 158×235, stron: 384 Katalog książek • Katalog online • Zamów drukowany katalog Twój koszyk • Dodaj do koszyka Cennik i informacje • Zamów informacje o nowościach • Zamów cennik Czytelnia • Fragmenty książek online Kontakt Helion SA ul. Kościuszki 1c 44-100 Gliwice tel. 32 230 98 63 e-mail: helion@helion.pl © Helion 1991–2011 Naucz się korzystać z pełni możliwości biblioteki MVC! • Co to jest model MVC i dlaczego warto z niego korzystać? • Jak programować z użyciem biblioteki MVC? • Jak stworzyć aplikację internetową lub stronę WWW dzięki Symfony? Symfony, framework stworzony w języku PHP i mający na celu uproszczenie oraz przyspieszenie tworzenia aplikacji internetowych, znajduje zastosowanie w coraz większej liczbie projektów. Jego wykorzystanie wiąże się ze znacznie efektywniejszym programowaniem, a także pozwala uniknąć wielu błędów i powtarzających się, nużących czynności. Symfony opiera się na modelu MVC i posiada wiele wbudowanych funkcji – między innymi ochronę przed atakami CSRF oraz XSS. Ten framework nie ogranicza się do wykorzystania własnej biblioteki, lecz zapewnia także możliwość integracji z innymi. Jeśli chcesz nauczyć się, jak to działa w praktyce, trzymasz w rękach właściwą pozycję! Książka „Symfony w przykładach” jest możliwie najbardziej skondensowaną instrukcją obsługi Symfony. Żeby ją zrozumieć, nie musisz dysponować oszałamiającą wiedzą – wystarczą podstawy PHP i XHTML/CSS. Jej autor poprowadzi Cię od najprostszych projektów ( Hello world ), przez nieco bardziej zaawansowane zagadnienia, dotyczące zewnętrznych zasobów, połączenia projektu z bazą danych, publikacji projektu na serwerze hostingowym, aż po tworzenie różnego typu paneli administracyjnych. Krótko mówiąc, na samych konkretnych przykładach przejdziesz drogę do stworzenia własnej, niezawodnie działającej aplikacji internetowej. • Pierwszy projekt w Symfony i praca w środowisku NetBeans • Wymiana szablonu XHTML/CSS i dołączanie zewnętrznych zasobów • Hiperłącza i strona błędu 404 • Publikowanie projektu na serwerze hostingowym • Dostosowywanie klas generowanych przez Propel • Wyświetlanie danych rekordu i identyfikacja rekordów na podstawie wartości slug • Artykuły na temat HTML/CSS • Umieszczanie w bazie danych plików binarnych • Pliki do pobrania i komponent menu • Relacje 1:n oraz n:m i widoki częściowe • Panele administracyjne i tłumaczenie interfejsu witryny • Zbiór zadań C++ • Administracja kontami użytkowników i generowanie paneli administracyjnych • Zabezpieczanie paneli administracyjnych protokołem HTTPS I Ty możesz ułatwić sobie tworzenie doskonałych aplikacji internetowych! Spis treĈci 5 Spis treĈci Podziökowania ............................................................................... 13 Wstöp ............................................................................................ 15 Tworzenie stron WWW w Symfony ................................ 17 CzöĈè I Rozdziaä 1. Pierwszy projekt w Symfony ........................................................... 19 Przykáad 1. Hello, World! ............................................................................................... 19 ROZWIĄZANIE ............................................................................................................ 19 Krok 1. Utwórz nowy projekt Symfony ................................................................... 19 Krok 2. Utwórz aplikacjĊ frontend ........................................................................... 20 Krok 3. Utwórz moduá o nazwie glowny .................................................................. 22 Krok 4. Utwórz akcjĊ glowny/powitanie .................................................................. 23 Krok 5. OdwiedĨ akcjĊ glowny/powitanie ............................................................... 24 Zestawienie poznanych poleceĔ ..................................................................................... 24 Struktura aplikacji tworzonej w Symfony ...................................................................... 25 ĝrodowiska ..................................................................................................................... 28 Pasek narzĊdzi Debug toolbar ........................................................................................ 30 Uruchomienie gotowego projektu .................................................................................. 32 Rozdziaä 2. Praca w Ĉrodowisku NetBeans ........................................................ 33 Przykáad 2. Witaj w NetBeans! ...................................................................................... 33 ROZWIĄZANIE ............................................................................................................ 33 Krok 1. Utwórz nowy projekt Symfony w NetBeans ............................................... 33 Krok 2. Utwórz moduá glowny w aplikacji frontend ................................................ 38 Krok 3. UsuĔ akcjĊ glowny/index ............................................................................ 40 Krok 4. Utwórz akcjĊ glowny/powitanie .................................................................. 40 Krok 5. ZmieĔ tytuá strony glowny/powitanie .......................................................... 41 Krok 6. ZmieĔ adres URL strony gáównej ............................................................... 42 Krok 7. WyczyĞü pamiĊü podrĊczną aplikacji .......................................................... 43 Rozdziaä 3. Wymiana szablonu XHTML/CSS ...................................................... 45 Przykáad 3. Wierszyk pt. Dwa kabele ............................................................................. 45 ROZWIĄZANIE ............................................................................................................ 45 Krok 1. Utwórz nowy projekt Symfony w NetBeans ............................................... 45 Krok 2. Utwórz moduá wierszyk w aplikacji frontend .............................................. 46 Krok 3. UsuĔ akcjĊ glowny/index ............................................................................ 46 Krok 4. Utwórz akcjĊ wierszyk/pokaz ...................................................................... 46 6 Symfony w przykäadach Krok 5. ZmieĔ tytuá strony wierszyk/pokaz ............................................................. 47 Krok 6. ZmieĔ adres URL strony gáównej ............................................................... 47 Krok 7. ZmieĔ szablon XHTML/CSS ...................................................................... 48 Przebieg wykonania aplikacji ......................................................................................... 52 Rozdziaä 4. Doäñczanie zewnötrznych zasobów .................................................. 55 Przykáad 4. ĩmija ........................................................................................................... 56 ROZWIĄZANIE ............................................................................................................ 57 Krok 1. Utwórz nowy projekt ................................................................................... 57 Krok 2. Utwórz moduá animal .................................................................................. 57 Krok 3. UsuĔ akcjĊ animal/index ............................................................................. 57 Krok 4. Utwórz akcjĊ animal/show .......................................................................... 57 Krok 5. ZmieĔ tytuá strony ....................................................................................... 58 Krok 6. ZmieĔ adres URL strony gáównej ............................................................... 58 Krok 7. ZmieĔ szablon XHTML/CSS ...................................................................... 58 Krok 8. W widoku akcji animal/show wstaw zdjĊcie Īmii ....................................... 60 Analiza kodu XHTML generowanego przez aplikacjĊ ................................................... 61 Rozdziaä 5. Hiperäñcza ...................................................................................... 63 Przykáad 5. Fraszki ......................................................................................................... 63 ROZWIĄZANIE ............................................................................................................ 64 Krok 1. Utwórz projekt, aplikacjĊ i moduá ............................................................... 64 Krok 2. UsuĔ akcjĊ wiersz/index .............................................................................. 64 Krok 3. Utwórz akcjĊ wiersz/dogoscia ..................................................................... 65 Krok 4. Utwórz akcjĊ wiersz/naswojeksiegi ............................................................. 66 Krok 5. Utwórz akcjĊ wiersz/ozywocieludzkim ....................................................... 67 Krok 6. ZmieĔ szablon XHTML/CSS ...................................................................... 67 Krok 7. Zmodyfikuj hiperáącza zawarte w menu ...................................................... 69 Krok 8. ZmieĔ adresy URL fraszek .......................................................................... 70 Krok 9. ZmieĔ tytuáy stron serwisu .......................................................................... 73 Rozdziaä 6. Strona bäödu 404 ........................................................................... 75 Przykáad 6. Gady ............................................................................................................ 75 ROZWIĄZANIE ............................................................................................................ 77 Krok 1. Utwórz nowy projekt, aplikacjĊ i moduá ..................................................... 77 Krok 2. ZmieĔ akcje moduáu strony ......................................................................... 77 Krok 3. ZmieĔ szablon XHTML/CSS ...................................................................... 78 Krok 4. WymieĔ adresy URL w pliku routing.yml .................................................. 79 Krok 5. ZmieĔ tytuáy stron serwisu .......................................................................... 80 Krok 6. OdwiedĨ domyĞlną stronĊ báĊdu 404 ........................................................... 81 Krok 7. Utwórz akcjĊ strony/blad404 ....................................................................... 82 Krok 8. Zdefiniuj stronĊ báĊdu 404 aplikacji frontend .............................................. 83 Analiza odpowiedzi HTTP ............................................................................................. 85 Rozdziaä 7. Publikowanie projektu na serwerze hostingowym ............................ 87 Przykáad 7.1. Zabytki Lublina ........................................................................................ 87 ROZWIĄZANIE ............................................................................................................ 88 Etap 1. Wykonaj aplikacjĊ na komputerze lokalnym ............................................... 88 Etap 2. Opublikuj witrynĊ na serwerze hostingowym .............................................. 91 Przykáad 7.2. Gady (publikowanie na serwerze NetArt) ................................................ 96 ROZWIĄZANIE ............................................................................................................ 96 Krok 1. Przekopiuj bibliotekĊ Symfony na serwer ................................................... 96 Krok 2. WyczyĞü pamiĊü podrĊczną i usuĔ kontrolery deweloperskie ..................... 96 Krok 3. Zmodyfikuj ĞcieĪkĊ do biblioteki Symfony ................................................ 96 Krok 4. Przekopiuj projekt na serwer ....................................................................... 97 Spis treĈci 7 Krok 5. Zablokuj dostĊp do plików .......................................................................... 97 Krok 6. ZmieĔ domenĊ projektu na gady.twojadomena.nazwa.pl ............................ 97 Rozdziaä 8. Czego dowiedziaäeĈ siö w pierwszej czöĈci? .................................... 99 CzöĈè II Warstwy M oraz V ...................................................... 101 Rozdziaä 9. Pierwszy projekt Symfony wykorzystujñcy bazy danych .................. 103 Przykáad 9. NajdáuĪsze rzeki Ğwiata ............................................................................. 103 ROZWIĄZANIE .......................................................................................................... 104 Etap 1. Przygotuj pustą bazĊ danych ...................................................................... 104 Etap 2. Zaprojektuj strukturĊ bazy danych ............................................................. 105 Etap 3. Utwórz szkielet aplikacji ............................................................................ 109 Etap 4. WymieĔ szablon XHTML/CSS .................................................................. 117 Etap 5. Dostosuj wygląd akcji rzeka/index ............................................................. 117 Zestawienie plików ....................................................................................................... 119 Klasy dostĊpu do bazy danych ............................................................................... 120 Przebieg wykonania aplikacji ................................................................................. 123 Uruchomienie gotowego projektu .......................................................................... 124 Rozdziaä 10. Dostosowywanie klas generowanych przez Propel ......................... 125 Przykáad 10. Tatry ........................................................................................................ 125 ROZWIĄZANIE .......................................................................................................... 125 Krok 1. Utwórz pustą bazĊ danych ......................................................................... 125 Krok 2. Zaprojektuj bazĊ danych ........................................................................... 126 Krok 3. Utwórz projekt z aplikacją frontend .......................................................... 127 Krok 4. Skonfiguruj dostĊp do bazy danych ........................................................... 127 Krok 5. Wypeánij bazĊ danych rekordami .............................................................. 127 Krok 6. Wygeneruj panel administracyjny CRUD ................................................. 129 Krok 7. Dostosuj klasy wygenerowane przez Propel ............................................. 130 Krok 8. Dostosuj moduá szczyt .............................................................................. 133 Krok 9. Dostosuj wygląd witryny ........................................................................... 134 Testowanie poprawnoĞci generowanego kodu XHTML .............................................. 135 Rozdziaä 11. Akcja show — wyĈwietlanie szczegóäowych danych rekordu .......... 137 Przykáad 11. Piosenki wojskowe .................................................................................. 138 ROZWIĄZANIE .......................................................................................................... 138 Krok 1. Utwórz pustą bazĊ danych ......................................................................... 138 Krok 2. Zaprojektuj bazĊ danych ........................................................................... 139 Krok 3. Utwórz projekt z aplikacją frontend .......................................................... 140 Krok 4. Skonfiguruj dostĊp do bazy danych ........................................................... 140 Krok 5. Dostosuj klasy wygenerowane przez Propel ............................................. 140 Krok 6. Napisz dynamiczny skrypt YAML odpowiedzialny za wypeánianie bazy .................................................................. 141 Krok 7. Wygeneruj panel CRUD z akcjami show .................................................. 144 Krok 8. Dostosuj moduá piosenka .......................................................................... 144 Krok 9. Dostosuj wygląd witryny ........................................................................... 148 Krok 10. ZmieĔ tytuáy stron ................................................................................... 148 Krok 11. Zmodyfikuj adresy URL stron z piosenkami ........................................... 150 Rozdziaä 12. Identyfikacja rekordów na podstawie wartoĈci slug ....................... 151 Przykáad 12. Artykuáy na temat HTML/CSS ................................................................ 152 ROZWIĄZANIE .......................................................................................................... 153 Krok 1. Przeanalizuj pliki XHTML z treĞcią artykuáów ......................................... 153 Krok 2. Przygotuj funkcje pomocnicze .................................................................. 153 8 Symfony w przykäadach Krok 3. Utwórz pustą bazĊ danych artykuly ........................................................... 162 Krok 4. Zaprojektuj bazĊ danych ........................................................................... 162 Krok 5. Utwórz projekt z aplikacją frontend .......................................................... 163 Krok 6. Skonfiguruj dostĊp do bazy danych ........................................................... 163 Krok 7. Dostosuj klasy wygenerowane przez Propel ............................................. 164 Krok 8. Przygotuj skrypt, który wypeáni bazĊ danych ............................................ 166 Krok 9. Wypeánij bazĊ danych rekordami .............................................................. 168 Krok 10. Wygeneruj panel CRUD z akcjami show ................................................ 168 Krok 11. UsuĔ zbĊdne akcje moduáu artykul ......................................................... 169 Krok 12. ZmieĔ metodĊ identyfikowania rekordów ............................................... 169 Krok 13. Wyáącz cytowanie kodu XHTML ........................................................... 170 Krok 14. Dostosuj wygląd witryny ......................................................................... 172 Krok 15. ZmieĔ tytuáy stron ................................................................................... 173 Krok 16. Zmodyfikuj adresy URL stron z artykuáami ............................................ 173 Krok 17. Zminimalizuj liczbĊ bajtów pobieraną w akcji artykul/index .................. 173 Rozdziaä 13. Komponent menu ......................................................................... 177 Przykáad 13. Treny ....................................................................................................... 177 ROZWIĄZANIE .......................................................................................................... 178 Krok 1. Utwórz pustą bazĊ danych ......................................................................... 178 Krok 2. Zaprojektuj bazĊ danych ........................................................................... 179 Krok 3. Utwórz projekt z aplikacją frontend .......................................................... 179 Krok 4. Wykonaj moduá glowny z akcjami powitanie oraz blad404 ...................... 179 Krok 5. Skonfiguruj dostĊp do bazy danych ........................................................... 180 Krok 6. Dostosuj klasy wygenerowane przez Propel ............................................. 180 Krok 7. Przygotuj zadanie propel:import-danych ................................................... 181 Krok 8. Wypeánij bazĊ danych rekordami .............................................................. 182 Krok 9. Wygeneruj panel CRUD z akcjami show .................................................. 183 Krok 10. UsuĔ zbĊdne akcje moduáu artykul ......................................................... 183 Krok 11. ZmieĔ metodĊ identyfikowania rekordów ............................................... 183 Krok 12. ZmieĔ adresy URL .................................................................................. 183 Krok 13. Przygotuj komponent menu ..................................................................... 184 Krok 14. Dostosuj wygląd witryny ......................................................................... 185 Krok 15. ZmieĔ tytuáy stron ................................................................................... 185 Krok 16. Wykonaj zrzut bazy danych .................................................................... 185 Rozdziaä 14. Umieszczanie plików binarnych w bazie danych ............................. 189 Przykáad 14. Pliki do pobrania ...................................................................................... 189 ROZWIĄZANIE .......................................................................................................... 189 Krok 1. Utwórz pustą bazĊ danych ......................................................................... 189 Krok 2. Zaprojektuj bazĊ danych ........................................................................... 190 Krok 3. Utwórz projekt z aplikacją frontend .......................................................... 191 Krok 4. Wykonaj moduá glowny z akcją blad404 .................................................. 191 Krok 5. Skonfiguruj dostĊp do bazy danych ........................................................... 191 Krok 6. Dostosuj klasy wygenerowane przez Propel ............................................. 191 Krok 7. Przygotuj zadanie propel:import-danych ................................................... 192 Krok 8. Wypeánij bazĊ danych rekordami .............................................................. 193 Krok 9. Wygeneruj panel CRUD ........................................................................... 194 Krok 10. UsuĔ zbĊdne akcje moduáu artykul ......................................................... 194 Krok 11. Zmodyfikuj funkcjĊ executeShow() ........................................................ 194 Krok 12. Zmodyfikuj widok akcji plik/show .......................................................... 195 Krok 13. Dostosuj widok akcji plik/index .............................................................. 196 Krok 14. ZmieĔ adresy URL .................................................................................. 197 Krok 15. Dostosuj wygląd witryny ......................................................................... 198 Spis treĈci 9 Rozdziaä 15. Relacje 1:n .................................................................................. 199 Przykáad 15. Kontynenty/paĔstwa ................................................................................ 203 ROZWIĄZANIE .......................................................................................................... 204 Krok 1. Przeanalizuj szablon XHTML ................................................................... 204 Krok 2. Utwórz pustą bazĊ danych ......................................................................... 205 Krok 3. Zaprojektuj bazĊ danych ........................................................................... 205 Krok 4. Utwórz projekt z aplikacją frontend .......................................................... 205 Krok 5. Wykonaj moduá glowny ............................................................................ 205 Krok 6. Skonfiguruj dostĊp do bazy danych ........................................................... 206 Krok 7. Dostosuj klasy wygenerowane przez Propel ............................................. 206 Krok 8. Przygotuj zadanie propel:import-danych ................................................... 207 Krok 9. Wypeánij bazĊ danych rekordami .............................................................. 209 Krok 10. Wygeneruj panele CRUD dla tabel kontynent oraz panstwo ................... 209 Krok 11. UsuĔ zbĊdne akcje moduáów kontynent oraz panstwo ............................ 209 Krok 12. Zmodyfikuj funkcje executeShow() ........................................................ 209 Krok 13. Dostosuj widoki akcji kontynent/index oraz panstwo/index ................... 210 Krok 14. Zmodyfikuj widok akcji kontynent/show ................................................ 210 Krok 15. Zmodyfikuj widok akcji panstwo/show ................................................... 211 Krok 16. ZmieĔ adresy URL .................................................................................. 211 Krok 17. Dostosuj wygląd witryny ......................................................................... 212 Krok 18. Ustal tytuáy stron ..................................................................................... 213 Rozdziaä 16. Relacje n:m ................................................................................. 215 Przykáad 16. Filmy/Aktorzy ......................................................................................... 217 ROZWIĄZANIE .......................................................................................................... 218 Krok 1. Utwórz pustą bazĊ danych ......................................................................... 218 Krok 2. Zaprojektuj bazĊ danych ........................................................................... 219 Krok 3. Utwórz projekt z aplikacją frontend .......................................................... 219 Krok 4. Wykonaj moduá glowny ............................................................................ 219 Krok 5. Skonfiguruj dostĊp do bazy danych ........................................................... 219 Krok 6. Dostosuj klasy wygenerowane przez Propel ............................................. 220 Krok 7. Przygotuj zadanie propel:import-danych ................................................... 221 Krok 8. Wypeánij bazĊ danych rekordami .............................................................. 223 Krok 9. Wygeneruj panele CRUD .......................................................................... 223 Krok 10. UsuĔ zbĊdne akcje moduáów film oraz aktor ............................................... 223 Krok 11. Zmodyfikuj funkcje executeShow() ........................................................ 224 Krok 12. Dostosuj widoki akcji film/index oraz aktor/index .................................. 224 Krok 13. Zmodyfikuj widok akcji film/show ......................................................... 224 Krok 14. Zmodyfikuj widok akcji aktor/show ........................................................ 224 Krok 15. ZmieĔ adresy URL .................................................................................. 225 Krok 16. Dostosuj wygląd witryny ......................................................................... 225 Krok 17. Ustal tytuáy stron ..................................................................................... 226 Rozdziaä 17. Widoki czöĈciowe ......................................................................... 227 Przykáad 17. Czcionki projektów CSS Zen Garden ...................................................... 228 ROZWIĄZANIE .......................................................................................................... 230 Krok 1. Przeanalizuj dane ...................................................................................... 230 Krok 2. Utwórz pustą bazĊ danych ......................................................................... 231 Krok 3. Zaprojektuj bazĊ danych ........................................................................... 231 Krok 4. Utwórz projekt z aplikacją frontend .......................................................... 232 Krok 5. Skonfiguruj dostĊp do bazy danych ........................................................... 232 Krok 6. Przygotuj zadanie propel:import-danych ................................................... 233 Krok 7. Wypeánij bazĊ danych rekordami .............................................................. 235 Krok 8. Dodaj metody zliczające powiązane rekordy ............................................ 235 10 Symfony w przykäadach Krok 9. Przygotuj zadanie propel:przelicz ............................................................. 238 Krok 10. Przelicz rekordy ...................................................................................... 238 Krok 11. Wykonaj moduá glowny .......................................................................... 238 Krok 12. Dostosuj klasy wygenerowane przez Propel ........................................... 239 Krok 13. Dodaj metody uáatwiające dostĊp do obiektów poáączonych relacją n:m ................................................................. 239 Krok 14. Wygeneruj panele CRUD ........................................................................ 240 Krok 15. UsuĔ zbĊdne akcje ................................................................................... 240 Krok 16. Zmodyfikuj funkcje executeShow() ........................................................ 240 Krok 17. Przygotuj widok czĊĞciowy projekt/lista ................................................. 240 Krok 18. Dostosuj widok akcji projekt/index ......................................................... 241 Krok 19. Dostosuj widok akcji czcionka/show ...................................................... 242 Krok 20. Przygotuj widok czĊĞciowy czcionka/lista .............................................. 244 Krok 21. Dostosuj widok akcji czcionka/index ...................................................... 245 Krok 22. Dostosuj widok akcji projekt/show ......................................................... 245 Krok 23. Dostosuj widok akcji moduáu rodzina ..................................................... 245 Krok 24. ZmieĔ adresy URL .................................................................................. 246 Krok 25. Dostosuj wygląd witryny ......................................................................... 247 Krok 26. Ustal tytuáy stron ..................................................................................... 247 Rozdziaä 18. Publikowanie aplikacji, która wykorzystuje bazö danych, na serwerze hostingowym ............................................................. 249 Przykáad 18.1. NotH — edytor kodu XHTML/CSS ..................................................... 249 ROZWIĄZANIE .......................................................................................................... 250 Krok 1. Przeanalizuj dane ...................................................................................... 250 Krok 2. Utwórz pustą bazĊ danych ......................................................................... 252 Krok 3. Zaprojektuj bazĊ danych ........................................................................... 252 Krok 4. Utwórz projekt z aplikacją frontend .......................................................... 252 Krok 5. Skonfiguruj dostĊp do bazy danych ........................................................... 253 Krok 6. Dostosuj klasy wygenerowane przez Propel ............................................. 253 Krok 7. Przygotuj zadanie propel:import-danych ................................................... 253 Krok 8. Wypeánij bazĊ danych rekordami .............................................................. 256 Krok 9. Wykonaj moduá glowny ............................................................................ 256 Krok 10. Wygeneruj panele CRUD ........................................................................ 256 Krok 11. UsuĔ zbĊdne akcje ................................................................................... 257 Krok 12. Zmodyfikuj funkcje executeShow() ........................................................ 257 Krok 13. Dostosuj widok akcji menu/show ............................................................ 257 Krok 14. Dostosuj widok akcji img/show .............................................................. 257 Krok 15. Dostosuj widok akcji plik/show .............................................................. 258 Krok 16. Dostosuj akcje moduáu podrecznik .......................................................... 258 Krok 17. Dostosuj akcje moduáu skroty ................................................................. 258 Krok 18. Wykonaj komponent menu/menu ............................................................ 259 Krok 19. Wykonaj komponent menu/menupionowe .............................................. 260 Krok 20. Dostosuj wygląd witryny ......................................................................... 261 Krok 21. ZmieĔ adresy URL .................................................................................. 261 Krok 22. Ustal tytuáy stron ..................................................................................... 263 Przykáad 18.2. NotH — publikacja na serwerze ........................................................... 263 ROZWIĄZANIE .......................................................................................................... 264 Krok 1. Zrzut bazy danych ..................................................................................... 264 Krok 2. Utwórz pustą bazĊ danych na serwerze ..................................................... 264 Krok 3. Wykonaj import zawartoĞci bazy danych .................................................. 264 Krok 4. Przekopiuj na serwer bibliotekĊ Symfony 1.4 ........................................... 266 Krok 5. Utwórz folder przeznaczony na projekt ..................................................... 266 Krok 6. Zablokuj dostĊp do plików projektu .......................................................... 268 Spis treĈci 11 Krok 7. Przekopiuj projekt na serwer ..................................................................... 268 Krok 8. Przekieruj domenĊ na folder noth/web/ ..................................................... 268 Krok 9. Zmodyfikuj plik noth/web/.htaccess .......................................................... 268 Krok 10. Zmodyfikuj plik noth/config/databases.yml ............................................ 269 Krok 11. Zmodyfikuj ĞcieĪkĊ do biblioteki Symfony ............................................ 270 Rozdziaä 19. Czego dowiedziaäeĈ siö w drugiej czöĈci? ...................................... 271 CzöĈè III Panele administracyjne .............................................. 273 Rozdziaä 20. Täumaczenie interfejsu witryny ...................................................... 275 Przykáad 20. DzieĔ dobry ............................................................................................. 275 ROZWIĄZANIE .......................................................................................................... 276 Krok 1. Utwórz nowy projekt, aplikacjĊ i moduá ................................................... 276 Krok 2. Ustal adres strony gáównej ........................................................................ 276 Krok 3. Dostosuj akcjĊ glowny/index .................................................................... 276 Krok 4. Dostosuj widok akcji glowny/index .......................................................... 276 Krok 5. Ustal domyĞlny jĊzyk aplikacji ................................................................. 277 Krok 6. Zdefiniuj táumaczenia komunikatu Good morning .................................... 277 Krok 7. Ustal tytuá witryny oraz oznacz jĊzyk dokumentu XHTML ...................... 278 Krok 8. Przetestuj witrynĊ ...................................................................................... 279 Rozdziaä 21. Pierwszy panel administracyjny ..................................................... 283 Przykáad 21. Piosenki wojskowe (panel administracyjny) ............................................ 283 ROZWIĄZANIE .......................................................................................................... 284 Krok 1. Przeanalizuj przykáad 11. .......................................................................... 284 Krok 2. Uruchom przykáad 11. ............................................................................... 284 Krok 3. Utwórz aplikacjĊ backend i moduá piosenka ............................................. 284 Krok 4. Dostosuj wygląd aplikacji backend ........................................................... 285 Krok 5. Zabezpiecz dostĊp do aplikacji backend .................................................... 288 Krok 6. Zainstaluj wtyczkĊ sfGuardAuth ............................................................... 288 Krok 7. Utwórz konto admin .................................................................................. 288 Krok 8. Uruchom stronĊ logowania ....................................................................... 289 Krok 9. Logowanie do aplikacji backend z aplikacji frontend ............................... 290 Krok 10. Wylogowanie z aplikacji backend ........................................................... 290 Krok 11. Dostosuj formularz logowania ................................................................ 291 Krok 12. Dostosuj panel CRUD ............................................................................. 293 Krok 13. W aplikacji backend dodaj filtr „zapamiĊtaj mnie” ................................. 294 Rozdziaä 22. Kontekstowe hiperäñcza do edycji i usuwania rekordów ................. 295 Przykáad 22. Zbiór zadaĔ C++ ...................................................................................... 296 ROZWIĄZANIE .......................................................................................................... 296 Etap 1. Utwórz nowy projekt i wykonaj aplikacjĊ frontend ................................... 296 Etap 2. Wykonaj aplikacjĊ backend ....................................................................... 307 Etap 3. Poáącz aplikacje frontend i backend ........................................................... 310 Etap 4. KontekstowoĞü usuwania rekordów ........................................................... 313 Etap 5. Uáatwienia w wypeánianiu formularzy ....................................................... 313 Rozdziaä 23. Administracja kontami uĔytkowników ........................................... 317 Przykáad 23. AngaĪe ..................................................................................................... 318 ROZWIĄZANIE .......................................................................................................... 319 Etap 1. Wykonaj aplikacjĊ frontend ....................................................................... 319 Etap 2. Zabezpieczanie dostĊpu do aplikacji frontend ............................................ 336 Etap 3. Ustal poziomy dostĊpu do aplikacji: .......................................................... 339 12 Symfony w przykäadach Rozdziaä 24. Generowanie paneli administracyjnych .......................................... 347 Przykáad 24. Turniej czterech skoczni .......................................................................... 347 ROZWIĄZANIE .......................................................................................................... 347 Etap 1. Utwórz nowy projekt i wykonaj aplikacjĊ frontend ................................... 347 Etap 2. Wykonaj aplikacjĊ backend ....................................................................... 352 Etap 3. Refaktoryzacja ........................................................................................... 356 Rozdziaä 25. Zabezpieczanie paneli administracyjnych przy uĔyciu protokoäu HTTPS ......................................................... 361 Przykáad 25. Turniej Czterech Skoczni (HTTPS) ......................................................... 362 ROZWIĄZANIE .......................................................................................................... 362 Krok 1. Zrzut bazy danych ..................................................................................... 362 Krok 2. Utwórz pustą bazĊ danych na serwerze ..................................................... 362 Krok 3. Wykonaj import zawartoĞci bazy danych .................................................. 362 Krok 4. Przekopiuj na serwer bibliotekĊ Symfony 1.4 ........................................... 363 Krok 5. Utwórz folder przeznaczony na projekt ..................................................... 363 Krok 6. Zablokuj dostĊp do plików projektu .......................................................... 363 Krok 7. Przekopiuj projekt na serwer ..................................................................... 363 Krok 8. Przekieruj domeny .................................................................................... 364 Krok 9. Zmodyfikuj pliki.htaccess ......................................................................... 364 Krok 10. Zmodyfikuj plik tcs/config/databases.yml ............................................... 365 Krok 11. Zmodyfikuj ĞcieĪkĊ do biblioteki Symfony ............................................ 365 Rozdziaä 26. Czego dowiedziaäeĈ siö w trzeciej czöĈci? ..................................... 367 Literatura ..................................................................................... 369 Skorowidz .................................................................................... 371 Rozdziaä 22. Kontekstowe hiperäñcza do edycji i usuwania rekordów Projekt omawiany w tym rozdziale zademonstruje metodĊ poáączenia aplikacji frontend oraz backend w taki sposób, by zalogowany administrator mógá przechodziü pomiĊdzy trybami odczytu i edycji rekordu. W aplikacji frontend umieĞcimy hiperáącza przeno- szące uĪytkownika do trybu edycji rekordów (czyli do aplikacji backend). W aplikacji backend dodamy hiperáącza przenoszące do trybu odczytu (czyli do aplikacji frontend). Te hiperáącza bĊdą dostĊpne tylko dla zalogowanego administratora; przedstawimy je w postaci ikon. Takie rozwiązanie sprawi, Īe korzystanie z panelu administracyjnego bĊdzie znacznie wygodniejsze. Dodatkowymi uáatwieniami bĊdą: automatyczne podpowiadanie domyĞlnych wartoĞci wybranych pól oraz kontekstowe dziaáanie usuwania rekordów. W poniĪej omawianym przykáadzie wystąpią dwie tabele rozdzial oraz zadanie poáą- czone relacją 1:n. Automatyczne podpowiadanie wartoĞci bĊdzie dotyczyáo tworzenia nowych rekordów. W przypadku dodawania do bazy danych rekordu do tabeli rozdzial automatycznie wypeánimy pole numer, nadając mu nastĊpną dostĊpną wartoĞü. Gdy zostanie dodane nowe zadanie, generowanymi wartoĞciami bĊdą numer zadania oraz — w niektórych sytuacjach — numer rozdziaáu. Ponadto zarówno w wypadku rozdziaáów, jak i zadaĔ, automatycznie wygenerujemy wartoĞci kolumn slug. KontekstowoĞü dziaáania przycisku do usuwania rekordów z tabeli zadanie bĊdzie pole- gaáa na tym, Īe po usuniĊciu rekordu wyĞwietlimy stronĊ, na której naciĞniĊto przycisk usuĔ. Przycisk do usuwania zadania znajdziemy na trzech róĪnych stronach. BĊdą to:  lista wszystkich zadaĔ (przycisk A),  lista zadaĔ z wybranego rozdziaáu (przycisk B),  szczegóáowe dane zadania (przycisk C). 296 CzöĈè III i Panele administracyjne JeĞli naciĞniĊto przycisk A, to ma nastąpiü powrót do listy wszystkich zadaĔ. JeĞli naci- ĞniĊto przycisk B lub C, to ma nastąpiü powrót do listy zadaĔ z wybranego rozdziaáu. KontekstowoĞü usuwania zaimplementujemy, zapisując odwiedzane adresy URL w sesji uĪytkownika oraz wykorzystując funkcjĊ redirect(), która wykonuje przekie- rowania HTTP. Przykäad 22. Zbiór zadaþ C++ Wykonaj aplikacjĊ internetową prezentującą w postaci witryny WWW zbiór zadaĔ z programowania w jĊzyku C++. Zbiór zadaĔ jest podzielony na rozdziaáy. KaĪdy z rozdziaáów moĪe zawieraü dowolną liczbĊ zadaĔ. Projekt powinien skáadaü siĊ z dwóch aplikacji: frontend oraz backend. Aplikacja frontend ma udostĊpniaü caáą treĞü zbioru zadaĔ w trybie do odczytu wszystkim odwiedzającym. Aplikacja backend ma umoĪliwiaü edycjĊ caáego zbioru zadaĔ. DostĊp do aplikacji backend zabezpiecz wtyczką sfGuardAuth. Aplikacje frontend oraz backend wzbogaü o ikony uáatwiające przechodzenie pomiĊdzy trybami edycji i odczytu wszystkich rekordów. W caáym projekcie przy kaĪdym wyĞwie- tlanym rekordzie — zarówno w akcji index, jak i show — umieĞü:  w aplikacji frontend ikonĊ przechodzącą do edycji rekordu,  w aplikacji backend ikony: edycja, odczyt, usuwanie. OperacjĊ usuwania zaimplementuj w taki sposób, by po usuniĊciu rekordu nastĊpowaá powrót do strony, na której naciĞniĊto przycisk usuĔ. Ikony mają byü widoczne tylko po zalogowaniu na konto administracyjne. ROZWIðZANIE Etap 1. Utwórz nowy projekt i wykonaj aplikacjö frontend Krok 1. Utwórz pustñ bazö danych Przygotuj skrypty tworzenie-pustej-bazy-danych.sql i tworzenie-pustej-bazy-danych.bat, które utworzą pustą bazĊ danych cpp oraz konto redaktor. PoprawnoĞü tworzenia bazy sprawdĨ przy uĪyciu programu phpMyAdmin. Krok 2. Zaprojektuj bazö danych Zaprojektuj przedstawioną na rysunku 22.1 bazĊ danych cpp. Ta baza ma zawieraü tabele rozdzial oraz zadanie poáączone relacją 1:n. Rozdziaä 22. i Kontekstowe hiperäñcza do edycji i usuwania rekordów 297 Rysunek 22.1. Baza danych cpp Krok 3. Utwórz projekt z aplikacjñ frontend W folderze cpp/ utwórz nowy projekt zawierający aplikacjĊ frontend: symfony generate:project cpp --orm=Propel symfony generate:app frontend Krok 4. Skonfiguruj dostöp do bazy danych Wydaj polecenie: symfony configure:database mysql:host=localhost;dbname=cpp redaktor tajnehaslo po czym w pliku config/schema.yml umieĞü strukturĊ bazy danych z rysunku 22.1. WáaĞciwoĞü primaryString dodaj:  w tabeli rozdzial dla kolumny tytul,  w tabeli zadanie dla kolumny slug. NastĊpnie przy uĪyciu polecenia: symfony propel:build --all --no-confirmation wygeneruj klasy dostĊpu i utwórz tabele w bazie danych. Po wydaniu tego polecenia za pomocą programu phpMyAdmin sprawdĨ, czy na serwerze MySQL w bazie danych cpp pojawiáy siĊ dwie tabele. Krok 5. Rozszerz wygenerowane klasy dostöpu do bazy danych W klasach wygenerowanych przez Propel dodaj nastĊpujące metody:  w klasie Rozdzial metody setSlug(), getMaxNumerZadania(),  w klasie RozdzialPeer metody retrieveBySlug(), retrieveByNumer(), pierwszyRozdzial(), insert(), getMaxNumerRozdzialu(), 298 CzöĈè III i Panele administracyjne  w klasie Zadanie metodĊ setSlug(),  w klasie ZadaniePeer metody retrieveBySlug(), insert(), doSelect(). Metody retrieveBySlug(), insert(), doSelect() przygotuj tak, jak to wielokrotnie omawialiĞmy w poprzedniej czĊĞci. Metoda retrieveByNumer() klasy RozdzialPeer jest bardzo zbliĪona do metody retrieveBySlug(): róĪni siĊ tylko tym, Īe wyszukiwanie rekordu przeprowadzamy na podstawie kolumny numer, a nie slug. Metoda setSlug() w klasach Rozdzial oraz Zadanie ma automatycznie ustalaü wartoĞü kolumny slug. Metody getMaxNumerZadania() oraz getMaxNumerRozdzialu() bĊdą sáu- Īyáy do automatycznego wypeániania pól numer rozdziaáu i numer zadania przy two- rzeniu nowych rekordów. Metoda getMaxNumerZadania() zwraca najwiĊkszy z numerów zadaĔ wybranego rozdziaáu, a metoda getMaxNumerRozdzialu() zwraca najwiĊkszy numer rozdziaáu zawarty w bazie danych. Ostatnia z nowych metod, metoda pierwszy ´Rozdzial(), zwraca pierwszy rekord z tabeli rozdzial. Wykorzystamy ją w akcji rozdzial/show do przechodzenia na pierwszą stronĊ zbioru zadaĔ. Metoda setSlug() klasy Rozdzial jest przedstawiona na listingu 22.1. Listing 22.1. Metoda setSlug() klasy Rozdzial public function setSlug($slug) { $slug = trim($slug); if ($slug == ) { $slug = myString::string2slug($this- getTytul()); } else { $slug = myString::string2slug($slug); } $next_slug = $slug; $c = new Criteria(); $c- add(RozdzialPeer::SLUG, $next_slug); $c- add(RozdzialPeer::ROZDZIAL_ID, $this- getRozdzialId(), ´Criteria::NOT_EQUAL); $ile = RozdzialPeer::doCount($c); $unikatowy = ($ile == 0); $min = 2; $max = 1000; while (!$unikatowy) { $next_slug = $slug . __ . $min; $min++; if ($min $max + 1) { die( ****** ERROR RozdzialPeer::setSlug({$next_slug}) ); }; $c- clear(); $c- add(RozdzialPeer::SLUG, $next_slug); Rozdziaä 22. i Kontekstowe hiperäñcza do edycji i usuwania rekordów 299 $c- add(RozdzialPeer::ROZDZIAL_ID, $this- getRozdzialId(), ´Criteria::NOT_EQUAL); $ile = RozdzialPeer::doCount($c); $unikatowy = ($ile == 0); } parent::setSlug($next_slug); } Jest to metoda wirtualna, nadpisująca metodĊ setSlug() wygenerowaną przez Propel. Najpierw przy uĪyciu funkcji trim() usuwamy zbĊdne biaáe znaki, po czym spraw- dzamy, czy otrzymany parametr jest pusty. JeĞli tak, to w zmiennej $slug umieszczamy tytuá rozdziaáu przeksztaácony przy uĪyciu funkcji string2slug(). DziĊki takiej pro- cedurze bĊdziemy mieli peány wpáyw na kolumnĊ slug, a jednoczeĞnie bĊdziemy mogli korzystaü z automatycznego generatora. JeĞli w wypeánionym formularzu pozostawimy puste pole slug, wówczas wartoĞü dla tej kolumny zostanie automatycznie wygenero- wana na podstawie tytuáu rozdziaáu. JeĞli zechcemy nadaü konkretną wartoĞü kolumnie slug, naleĪy ją wprowadziü w formularzu. Spowoduje to wyáączenie automatycznego generowania wartoĞci kolumny slug. Gdy wartoĞü slug zostaáa wstĊpnie ustalona, sprawdzamy, czy nie wystĊpuje ona w bazie danych. OperacjĊ taką powtarzamy w pĊtli aĪ do znalezienia wartoĞci, która nie wystą- piáa w bazie danych. W kolejnych obrotach pĊtli na koĔcu zmiennej $slug doáączamy kolejne liczby caákowite: lorem_ipsum lorem_ipsum2 lorem_ipsum3 lorem_ipsum4 ... i badamy, czy otrzymany napis nie wystĊpuje w kolumnie slug tabeli rozdzial. IteracjĊ koĔczymy, gdy znajdziemy wartoĞü unikalną lub gdy pĊtla sprawdzająca unikalnoĞü obróci siĊ zbyt wiele razy (np. wiĊcej niĪ 1000). Znaleziona unikalna wartoĞü slug jest przekazywana jako parametr do metody setSlug() w klasie bazowej. Metoda setSlug() klasy Zadanie jest niemal identyczna. Metoda getMaxNumerZadania() klasy Rozdzial jest przedstawiona na listingu 22.2. Listing 22.2. Metoda getMaxNumerZadania() klasy Rozdzial public function getMaxNumerZadania() { $c = new Criteria(); $c- addDescendingOrderByColumn(ZadaniePeer::NUMER); $c- add(ZadaniePeer::ROZDZIAL_ID, $this- getRozdzialId()); $c- setLimit(1); $Zadanie = ZadaniePeer::doSelectOne($c); if ($Zadanie) { return $Zadanie- getNumer(); } else { 300 CzöĈè III i Panele administracyjne return 0; } } Zadaniem tej metody jest znalezienie najwiĊkszego numeru zadania w bieĪącym roz- dziale. Tworzymy kryteria, które zwrócą listĊ zadaĔ z wybranego rozdziaáu. Zwracane wyniki sortujemy malejąco wzglĊdem kolumny numer i ograniczamy do jednego rekordu. Wynikiem funkcji jest 0 lub wartoĞü kolumny numer otrzymanego rekordu. Statyczna metoda RozdzialPeer::getMaxNumerRozdzialu() jest bardzo podobna. Krok 6. Przygotuj zadanie propel:import-danych Skopiuj:  folder z folderu 22-start/dane-zbior-zadan/ do folderu cpp/data/,  pliki z folderu 22-start/lib/ do folderu cpp/lib/. NastĊpnie utwórz zadanie propel:import-danych: symfony generate:task propel:import-danych W pliku lib/task/propelImportdanychTask.class.php wprowadĨ kod, który na podsta- wie plików z folderu dane-zbior-zadan/ wypeáni bazĊ danych. Zarys kodu zadania propel:import-danych jest przedstawiony na listingu 22.3. W tym skrypcie przetwarzamy najpierw plik rozdzialy.txt, a nastĊpnie wszystkie pliki wyszukane przy wykorzystaniu funkcji glob() w podfolderze txt/. Rozwiązania niektórych zadaĔ są zawarte w folderze dane-zbior-zadan/cpp. DostĊpnoĞü rozwiązania sprawdzamy przy uĪyciu funkcji file_ ´exists(). JeĞli rozwiązanie jest dostĊpne, to plik z rozwiązaniem odczytujemy do zmiennej $dane[ odpowiedz ], pamiĊtając o tym, Īe kod C++ moĪe zawieraü znaki , oraz . Dlatego wartoĞü zwrócona przez funkcjĊ file_get_contents() jest prze- ksztaácona przy uĪyciu funkcji htmlspecialchars(). Listing 22.3. Fragment pliku propelImportdanychTask.class.php //rozdzialy $tmp_rozdzialy = string2HArray(file_get_contents( data/dane-zbior-zadan/ ´rozdzialy.txt )); foreach ($tmp_rozdzialy[ items ] as $tmp_rozdzial) { $dane = array( tytul = $tmp_rozdzial[0], slug = string2slug($tmp_rozdzial[0]), numer = $tmp_rozdzial[1], ); RozdzialPeer::insert($dane); } //zadania $plks = glob( data/dane-zbior-zadan/txt/*.txt ); foreach ($plks as $plk) { preg_match( /^(\d+)-(\d+)\.txt$/ , basename($plk), $m); Rozdziaä 22. i Kontekstowe hiperäñcza do edycji i usuwania rekordów 301 $nr_rozdzialu = $m[1]; $nr_zadania = $m[2]; $rozdzial = RozdzialPeer::retrieveByNumer($nr_rozdzialu); if (!$rozdzial) { die( blad ###1 ); } $slug = uzupelnij_int_zerami($nr_rozdzialu, 2) . - . uzupelnij_int_zerami($nr_zadania, 2); $dane = array( numer = $nr_zadania, slug = $slug, tresc = file_get_contents($plk), rozdzial_id = $rozdzial- getRozdzialId() ); $np_cpp = str_replace( txt , cpp , $plk); if (file_exists($np_cpp)) { $dane[ odpowiedz ] = htmlspecialchars(file_get_contents($np_cpp)); } ZadaniePeer::insert($dane); } Krok 7. Wypeänij bazö danych rekordami Wydaj komendĊ: symfony propel:import-danych W bazie danych cpp pojawi siĊ 298 rekordów. SprawdĨ to za pomocą programu phpMyAdmin. Krok 8. Wykonaj moduä rozdzial Wygeneruj moduá CRUD dla tabeli rozdzial: symfony propel:generate-module --with-show frontend rozdzial Rozdzial W tym module usuĔ wszystkie akcje oprócz akcji show. Dodaj dwie nowe akcje: blad404 oraz rozwiazanie. W metodzie executeShow() wykorzystaj metodĊ pierwszyRozdzial(). JeĞli parametr slug jest zdefiniowany, to akcja show ma przekazywaü do widoku wybrany rekord. W przeciwnym razie przekaĪ do widoku pierwszy rozdziaá. Kod metody execute ´Show() jest przedstawiony na listingu 22.4. 302 CzöĈè III i Panele administracyjne Listing 22.4. Metoda akcji rozdzial/show public function executeShow(sfWebRequest $request) { if ($request- getParameter( slug )) { $this- Rozdzial ´= RozdzialPeer::retrieveBySlug($request- getParameter( slug )); } else { $this- Rozdzial = RozdzialPeer::pierwszyRozdzial(); } $this- forward404Unless($this- Rozdzial); } Metoda executeRozwiazanie() bĊdzie wykorzystana do wykonania hiperáączy, pozwa- lających na pobieranie rozwiązaĔ zadaĔ w postaci plików o rozszerzeniu .cpp. W treĞci metody mamy przekazaü do widoku obiekt klasy Zadanie, którego identyfikator slug jest zawarty w zapytaniu HTTP. Obiekt Zadanie przekazujemy do widoku wyáącznie wtedy, gdy ma on niepuste rozwiązanie. Trzy warunki:  istnienie parametru slug,  istnienie zadania o podanej wartoĞci parametru slug,  oraz to, czy zadanie ma niepuste rozwiązanie, áączymy spójnikami i przekazujemy do metody forward404Unless(). JeĞli który- kolwiek warunek nie jest speániony, to sterowanie zostanie przekazane do obsáugi báĊdu 404. Drugi z warunków zawiera instrukcjĊ przypisania, która spowoduje przekazanie do widoku zmiennej $Zadanie. TreĞü metody executeRozwiæzanie() jest przedstawiona na listingu 22.5. Listing 22.5. Metoda akcji rozdzial/rozwiazanie public function executeRozwiazanie(sfWebRequest $request) { $this- forward404Unless( $request- getParameter( slug ) ($this- Zadanie ´= ZadaniePeer::retrieveBySlug($request- getParameter( slug ))) $this- Zadanie- getOdpowiedz() ); } Krok 9. Przygotuj widoki akcji rozdzial/show, rozdzial/rozwiñzanie oraz rozdzial/blad404 Na stronie akcji rozdzial/show drukujemy tytuá rozdziaáu oraz kompletną listĊ wszyst- kich zadaĔ z rozdziaáu. Tytuá rozdziaáu jest zwracany przez funkcjĊ __toStrung(), wiĊc wydruk tytuáu przyjmuje postaü: ?php echo $Rozdzial ? Rozdziaä 22. i Kontekstowe hiperäñcza do edycji i usuwania rekordów 303 Natomiast zadania z rozdziaáu są zwracane jako wynik metody getRozdzials(). Otrzy- maną tablicĊ obiektów klasy Zadanie przetwarzamy iteracyjnie. Dla kaĪdego zadania drukujemy nagáówek h3 zawierający tytuá: h3 id= zad ?php echo $Zadanie- getSlug() ? Zadanie ?php echo $Rozdzial- getNumer() ? . ?php echo $Zadanie- getNumer() ? /h3 ZauwaĪ, Īe ten element jest wzbogacony o identyfikator id. DziĊki temu w panelu administracyjnym bĊdziemy mogli korzystaü z hiperáączy postaci: /rozdzial/wprowadzenie.html#zad01-04 Po numerze zadania drukujemy jego treĞü oraz sprawdzamy, czy rozwiązanie jest dostĊpne. JeĞli tak, to umieszczamy je poniĪej treĞci zadania. Obok napisu rozwiązanie drukujemy hiperáącze do akcji rozdzial/rozwiazanie, które pozwoli na pobranie roz- wiązania w postaci pliku .cpp. TreĞü rozwiązania umieszczamy w elemencie pre wzbo- gaconym o atrybut class= syntax-highlight:cpp . W ten sposób osiągniemy kolo- rowanie skáadni kodu C++. TreĞü widoku showSuccess.php jest przedstawiona na listingu 22.6. Listing 22.6. Widok akcji rozdzial/show h1 Rozdziađ ?php echo $Rozdzial- getNumer() ? . ?php echo $Rozdzial ? /h1 ?php foreach ($Rozdzial- getZadanies() as $Zadanie): ? div class= zadanie h3 id= zad ?php echo $Zadanie- getSlug() ? Zadanie ?php echo $Rozdzial- getNumer() ? . ?php echo $Zadanie- getNumer() ? /h3 ?php echo $Zadanie- getTresc() ? ?php if ($Zadanie- getOdpowiedz()): ? div class= rozwiazanie h4 Rozwiæzanie: a href= ?php echo url_for( rozdzial/rozwiazanie?slug= . ´$Zadanie- getSlug()) ? ?php echo $Zadanie- getSlug() ? .cpp /a /h4 pre class= syntax-highlight:cpp ?php echo $Zadanie- getOdpowiedz() ´? /pre /div ?php endif; ? /div ?php endforeach; ? W akcji rozdzial/rozwiazanie mamy za zadanie wydrukowaü wyáącznie treĞü rozwią- zania zadania. Widok rozwiązanieSuccess.php jest przedstawiony na listingu 22.7. Roz- wiązania nie naleĪy dekorowaü plikiem layout.php. Zatem w pliku konfiguracyjnym widoków moduáu, czyli apps/frontend/modules/rozdzial/config/view.yml, naleĪy umie- Ğciü reguáy, które dla widoku rozwiazanieSuccess wyáączą dekoracjĊ i ustalą nagáówek text/plain: 304 CzöĈè III i Panele administracyjne rozwiazanieSuccess: http_metas: content-type: text/plain has_layout: false Listing 22.7. Widok akcji rozdzial/rozwiazanie ?php echo html_entity_decode($Zadanie- getOdpowiedz()); PoniewaĪ w listingu 22.6 wykorzystujemy zmienną $Zadanie, a nie jej surową postaü1, wiĊc w pliku konfiguracyjnym settings.yml aplikacji frontend naleĪy wyáączyü zabez- pieczanie zmiennych: all: .settings: escaping_method: ESC_RAW W widoku akcji rozdzial/blad404 umieĞü komunikat o báĊdnym adresie URL. Krok 10. Przygotuj komponent rozdzial/menu Menu witryny ma zawieraü listĊ wszystkich rozdziaáów. Wykonamy je w postaci komponentu o nazwie rozdzial/menu. Utwórz plik rozdzial/actions/components.class.php i zdefiniuj w nim przedstawioną na listingu 22.8 klasĊ rozdzialComponents. Metoda executeMenu() ma przekazywaü do widoku listĊ wszystkich rekordów z tabeli rozdzial. Listing 22.8. Klasa rozdzialComponents class rozdzialComponents extends sfComponents { public function executeMenu(sfWebRequest $request) { $this- Rozdzials = RozdzialPeer::doSelect(new Criteria()); } } W widoku rozdzial/templates/_menu.php umieĞü kod z listingu 22.9. Tablica $Rozdzials jest przeksztaácona w listĊ ol zawierającą hiperáącza do akcji show prezentujących szczegóáowe informacje poszczególnych rozdziaáów. Listing 22.9. Widok komponentu rozdzial/menu ol id= menu ?php foreach ($Rozdzials as $Rozdzial): ? li a href= ?php echo url_for( rozdzial/show?slug= .$Rozdzial- getSlug()) ? ?php echo $Rozdzial- getNumer() ? . ?php echo $Rozdzial ? span raquo; /span /a 1 Surowa postaü zmiennej $Zadanie jest dostĊpna jako $sf_data- getRaw( Zadanie ). Rozdziaä 22. i Kontekstowe hiperäñcza do edycji i usuwania rekordów 305 /li ?php endforeach; ? /ol Krok 11. Zmodyfikuj skórkö witryny UĪyj szablonu zawartego w folderze 22-start/xhtml-css-template/. PamiĊtaj o modyfi- kacjach w pliku frontend/config/view.yml. Ustal pliki stylów oraz doáącz skrypty JS kolo- rujące kod: stylesheets: [style.css,SyntaxHighlighter.css] javascripts: [shCore.js,shBrushCpp.js] PamiĊtaj o skopiowaniu plików do folderów /web/css/, /web/images/ oraz /web/js/. Menu gáówne wstaw do pliku layout.php, wywoáując funkcjĊ include_component(). Na dole pliku layout.php, przed zamykającym znacznikiem /body , wstaw skrypt, który bĊdzie kolorowaá kod zawarty w elementach pre klasy syntax-highlight:cpp: ... script type= text/javascript dp.SyntaxHighlighter.ClipboardSwf = ?php echo public_path( js/clipboard.swf ) ? ; dp.SyntaxHighlighter.HighlightAll( code ); /script /body Krok 12. Ustal tytuäy stron W pliku layout.php umieĞü slot o nazwie tytul. Wypeánij ten slot danymi w widokach akcji rozdzial/show oraz rozdzial/blad404. PomiĊdzy znacznikami title i /title umieĞü komunikat o báĊdzie oraz tytuá rozdziaáu. Krok 13. Ustal obsäugö bäödu 404 W pliku frontend/config/settings.yml wprowadĨ reguáy definiujące obsáugĊ báĊdu 404: error_404_module: rozdzial error_404_action: blad404 Krok 14. Ustal przyjazne adresy URL W pliku frontend/config/routing.yml wprowadĨ reguáy przedstawione na listingu 22.10. Reguáa o etykiecie rozwiazanie ustala, Īe adres postaci: /cpp/01-04.cpp bĊdzie powodowaá pobranie rozwiązania zadania o numerze 1.4. W ten sposób emulujemy, Īe w folderze web/ znajduje siĊ folder cpp/, który zawiera statyczne pliki o rozszerzeniu .cpp. W rzeczywistoĞci rozwiązania zadaĔ są pobierane z kolumny odpo- wiedz tabeli zadanie. Realizuje to akcja rozdzial/rozwiazanie. 306 CzöĈè III i Panele administracyjne Listing 22.10. Reguáy translacji adresów w aplikacji frontend rozwiazanie: url: /cpp/:slug.cpp param: { module: rozdzial, action: rozwiazanie } rozdzial_show: url: /rozdzial/:slug.html param: { module: rozdzial, action: show } index: url: /index.html param: { module: rozdzial, action: show } homepage: url: / param: { module: rozdzial, action: show } Krok 15. Przetestuj aplikacjö frontend Przetestuj przy uĪyciu przeglądarki aplikacjĊ frontend. PowinieneĞ otrzymaü witrynĊ widoczną na rysunku 22.2. SprawdĨ dziaáanie hiperáączy zawartych w menu gáównym oraz pozwalających na pobieranie plików .cpp. Rysunek 22.2. Aplikacja frontend zbioru zadaĔ C++ Rozdziaä 22. i Kontekstowe hiperäñcza do edycji i usuwania rekordów 307 Etap 2. Wykonaj aplikacjö backend Krok 1. Utwórz aplikacjö backend W folderze cpp/ wydaj kolejno polecenia: symfony generate:app backend symfony plugin:install sfGuardPlugin symfony propel:build --all --no-confirmation symfony propel:import-danych symfony propel:generate-module backend rozdzial Rozdzial symfony propel:generate-module backend zadanie Zadanie symfony guard:create-user admin supertajnehaslo Po wygenerowaniu moduáów rozdzial oraz zadanie zmodyfikuj komunikaty zawarte we wszystkich widokach. W miejsce angielskich terminów, np. New Zadanie czy Edit Rozdzial, wpisz polskie táumaczenia. Na stronie ze szczegóáowymi danymi rozdziaáu wyĞwietl listĊ wszystkich zadaĔ z danego rozdziaáu. Wykonaj to, przygotowu
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Symfony w przykładach
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: