Tytuł oryginału: Laravel Application Development Cookbook Tłumaczenie: Mirosław Gołda ISBN: 978-83-283-0305-8 Copyright © Packt Publishing 2013. First published in the English language under the title: „Laravel Application Development Cookbook”. Polish edition copyright © 2015 by Helion S.A. All rights reserved. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher. Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji. Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli. Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce. Wydawnictwo HELION ul. Kościuszki 1c, 44-100 GLIWICE tel. 32 231 22 19, 32 230 98 63 e-mail: [email protected] WWW: http://helion.pl (księgarnia internetowa, katalog książek) Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/larare_ebook Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. Poleć książkę na Facebook.com Księgarnia internetowa Kup w wersji papierowej Lubię to! » Nasza społeczność Oceń książkę Spis treści O autorze 7 O recenzentach 8 Wstęp 9 Rozdział 1. Instalowanie Laravela 13 Wprowadzenie 13 Instalowanie Laravela w postaci modułu zależnego repozytorium git 14 Konfigurowanie hostów wirtualnych i środowiska deweloperskiego na serwerze Apache 15 Tworzenie „czystych” adresów URL 17 Konfigurowanie Laravela 18 Praca z Laravelem w edytorze Sublime Text 2 19 Konfigurowanie środowiska IDE pozwalające włączyć autouzupełnianie przestrzeni nazw dla Laravela 21 Wykorzystywanie mechanizmu autoloadera do mapowania pomiędzy nazwą klasy a plikiem z jej definicją 24 Tworzenie zaawansowanych autoloaderów z przestrzeniami nazw i katalogami 25 Rozdział 2. Pobieranie danych wejściowych 29 Wprowadzenie 29 Tworzenie prostego formularza 30 Pobieranie danych z formularza i wyświetlenie ich na innej stronie 31 Walidacja danych wysłanych przez użytkownika 33 Tworzenie mechanizmu przesyłania plików 35 Walidacja przesyłanych plików 37 Tworzenie własnego komunikatu o błędzie 39 Dodawanie „wabika” do formularza 42 Przesyłanie obrazów za pomocą biblioteki Redactor 44 Przycinanie obrazu za pomocą biblioteki Jcrop 47 Tworzenie pola tekstowego z autouzupełnianiem 50 Tworzenie mechanizmu przechwytywania spamu w stylu CAPTCHA 53 Spis treści Rozdział 3. Uwierzytelnianie w Twojej aplikacji 57 Wprowadzenie 57 Instalowanie i konfigurowanie biblioteki Auth 58 Tworzenie systemu uwierzytelniania 60 Pobieranie i aktualizowanie danych o użytkowniku po zalogowaniu 64 Ograniczanie dostępu do wybranych stron 67 Konfigurowanie uwierzytelniania OAuth z użyciem pakietu HybridAuth 69 Wykorzystywanie OpenID do logowania 70 Logowanie z poświadczeniami Facebooka 72 Logowanie z poświadczeniami Twittera 74 Logowanie z poświadczeniami LinkedIn 76 Rozdział 4. Przechowywanie i wykorzystywanie danych 79 Wprowadzenie 80 Tworzenie tabel w bazie danych z zastosowaniem migracji i schematów 80 Tworzenie zapytań w języku SQL 83 Tworzenie zapytań z użyciem konstruktora Fluent 85 Tworzenie zapytań z wykorzystaniem systemu ORM Eloquent 88 Automatyczna walidacja w modelach 90 Relacje i zaawansowane funkcje systemu Eloquent 93 Tworzenie systemu CRUD 95 Importowanie plików CSV za pomocą systemu Eloquent 99 Kanały RSS jako źródła danych 101 Atrybuty do zmiany nazw kolumn w tabeli 102 Zastąpienie systemu Eloquent innym systemem ORM 105 Rozdział 5. Wykorzystywanie kontrolerów i routingu do obsługi adresów URL i tworzenia API 109 Wprowadzenie 110 Tworzenie prostych kontrolerów 110 Tworzenie routingu z wykorzystaniem domknięcia 111 Tworzenie kontrolera REST-owego 112 Zaawansowane opcje routingu 113 Filtry w routingu 115 Grupy reguł routingu 116 Tworzenie REST-owego API z wykorzystaniem routingu 118 Nazwany routing 124 Nazwa subdomeny w routingu 125 Rozdział 6. Wyświetlanie widoków 129 Wprowadzenie 129 Tworzenie i wykorzystywanie prostego widoku 130 Przekazywanie danych do widoku 131 Wczytywanie widoku do innego (zagnieżdżonego) widoku 133 Dodawanie zasobów 136 4 Spis treści Tworzenie widoków z zastosowaniem systemu szablonów Blade 138 System szablonów Twig 140 Zaawansowane możliwości systemu Blade 142 Tworzenie zlokalizowanej zawartości 145 Tworzenie menu w Laravelu 148 Integracja z Bootstrapem 151 Nazwane widoki i kompozytory widoków 153 Rozdział 7. Tworzenie i wykorzystywanie pakietów Composera 157 Wprowadzenie 157 Pobieranie i instalowanie pakietów 158 Pakiet Generators do tworzenia szkieletu aplikacji 161 Tworzenie pakietu Composera w Laravelu 165 Dodawanie pakietów Composera do Packagista 169 Dodawanie pakietu spoza Packagista do Composera 171 Tworzenie własnego polecenia dla Artisana 173 Rozdział 8. Ajax i jQuery 177 Wprowadzenie 177 Pobieranie danych z innej strony 178 Konfigurowanie kontrolera tak, aby zwracał dane w formacie JSON 181 Tworzenie funkcji wyszukiwania z wykorzystaniem techniki Ajax 183 Tworzenie i walidowanie użytkownika z wykorzystaniem techniki Ajax 185 Filtrowanie danych na podstawie pól wyboru 188 Tworzenie okna rejestracji do newslettera z użyciem techniki Ajax 191 Wysyłanie wiadomości e-mail z zastosowaniem Laravela i biblioteki jQuery 194 Tworzenie tabeli z możliwością sortowania przy użyciu Laravela i biblioteki jQuery 197 Rozdział 9. Efektywne wykorzystywanie mechanizmów bezpieczeństwa i sesji 201 Wprowadzenie 201 Szyfrowanie i odszyfrowywanie danych 202 Hashowanie haseł i innych danych 205 Tokeny CSRF i filtry w formularzach 208 Zaawansowana walidacja w formularzach 210 Tworzenie koszyka zakupowego 213 Wykorzystywanie Redisa do przechowywania sesji 216 Podstawowe zastosowanie sesji i ciasteczek 218 Tworzenie bezpiecznego serwera API 221 Rozdział 10. Testowanie i debugowanie aplikacji 225 Wprowadzenie 225 Instalowanie i konfigurowanie biblioteki PHPUnit 226 Tworzenie i uruchamianie testów 227 Wykorzystywanie biblioteki Mockery do testowania kontrolerów 228 Pisanie testów akceptacyjnych z użyciem biblioteki Codeception 231 Debugowanie i profilowanie aplikacji 233 5 Spis treści Rozdział 11. Wdrażanie i integrowanie aplikacji z usługami firm trzecich 237 Wprowadzenie 237 Tworzenie kolejek i wykorzystywanie Artisana do ich uruchamiania 238 Wdrażanie aplikacji Laravela na platformę Pagoda Box 240 Używanie bramki płatności Stripe z frameworkiem Laravel 244 Przeszukiwanie bazy GeoIP i konfiguracja własnego routingu 247 Gromadzenie adresów e-mail i ich wykorzystywanie w usługach pocztowych firm trzecich 248 Przechowywanie i pobieranie zawartości zapisanej w chmurze Amazon S3 251 Skorowidz 255 6 O autorze Terry Matula jest webdeveloperem i popularyzatorem Laravela mieszkającym w Austin, w stanie Teksas. Pasjonuje się komputerami od momentu, gdy po raz pierwszy zagrał w grę Oregon Trail na komputerze Apple //e. Swoją przygodę z programowaniem rozpoczął wcześnie, od języka BASIC, w którym przygotowywał na komputerze Commodore Vic-20 gry podobne to tych, które tworzył Scott Adams. Pracował jako programista Flash, ActionScript, ASP.NET i PHP; korzystał z wielu frameworków, z których najbardziej polubił właśnie Laravela. Na swoim blogu dostępnym pod adresem http://terrymatula.com zamieszcza porady i rozwią- zania różnych problemów dotyczących programowania aplikacji internetowych. Chciałbym podziękować Taylorowi Otwellowi za stworzenie tak wspaniałego frameworka, jak również członkom społeczności Laravela, oferującym najlepszą pomoc spośród wszystkich znanych mi środowisk webdeveloperskich. Chciałbym też podziękować mojej pięknej żonie Michelle za nieustanne wsparcie i zachęcanie mnie do dalszej pracy nawet wtedy, gdy pracowałem 18 godzin dziennie, żeby ukończyć tę książkę. Na koniec chciałbym podziękować mojemu synowi Evanowi za rozświetlenie mojego życia i na- danie mu głębszego sensu. O recenzentach Jason Lewis jest webdeveloperem i designerem z Australii. Programowaniem w obrębie technologii webowych zajmuje się od 7 lat i należy do grona wielkich propagatorów Laravela. W ciągu dnia Jason pracuje jako strażak, a w nocy zajmuje się kodowaniem. Jest zawsze chętny do pomocy i uwielbia pisać artykuły wspomagające innych w nauce programowania. Elan Marikit jest inżynierem oprogramowania pracującym w obrębie takich technologii, jak PHP, JavaScript, MySQL, Linux i FreeBSD. Elan posiada bogate doświadczenie w tworzeniu zaawansowanych aplikacji internetowych z wykorzystaniem frameworków MVC, takich jak CodeIgniter i Laravel. Posiada tytuł Zend Certified Engineer dla PHP w wersji 5.3, a aktual- nie pracuje w start-upie z Singapuru zajmującym się tworzeniem skalowalnych portali o te- matyce podróżniczej, w szczególności dotyczących południowo-wschodniej Azji. Wstęp � k\.�� Laravteojl e dezn n ajszybrcoizewji jajsąic�fęyr cahm e�wo� r)rH histoJreigieo.k spre syjnsak ładinz inaa komdiotak umentpaoczjwaa l�sazj�yą�b zyćw pełnfiu nkcjonalną aplikaDcojdęa.t kowwyok orzystnaonwioec zesnfycjh lnośjcęiz yPkHaP umożliwia �D-, łatwper zystoso4w.wa enriseLj air avdeolna a syzh jarkó wnigedży,t ok onieczne, tworzesntireoo nw ysokim stsokpanrnipul ik·o was tt od oskonałe połączenie prostoty użyciiz aa awansowamnoyżclhi wości. o @ Książtkaoa p isuje jedynmioeż� luiłwaomśecakv elMao.ż njaą j edntarka ktojwaakćpo u nkt wyjścaip ao,d anper zykłkaoddypu o �zw� as zybkie rozpproacczDyęo.cs iteę ppnrez ykłady możndao wolnpirez y�sto,su: oz�wuapće asnkyo dl ubł ączzyećs obaąb,y s tworwzłyaćs ną aplikaMcojżęl.i wosśąnc iie ograone. � � : Jednyzmn ajwięksazuytc'h avlaj esjte gsop ołeczJneośśnlćai.p otkjaaskzpi rśo blem in iez najdzjieegsrozo z iaw wyszukiwGaorocgel zea,w szmeo żeslzi cznyaćp omoc członksópwo łecśzcn·N.a Jt wiesjk ontaktsoiwzęa n ći mzia p ośrednicItRwCe( mk anał #laranavs eelrw er nodel)u bp oprzfeozr u(mh ttp://foruWmsi.elluaużr yatvkoewl.io). nikóLwa ralvajeestte żo stępnnyacT hw itterze. Miłegloa ravelowania! Coz awiekrsai ążka? Rozdz1i.a",łI nstaloLwaarnaivee olma'a'w,ir aó żnsep osorboyz poczpęrcaiczayL aravelem. " Rozdz2i.a",łP obierdaanniyecw he jściow,py ockhazuwjiee lsep osobpórwa czyf ormularza miw LaraveOlmua.w iway korzysktlaansfiyoe r mulajrazrkaó ,w niperżz eprowadpzoednie stawowweajl idadcajniy ch. • LaraveTlw.o rzenaipel ikaRcejcie.p tury " Rozdzi3.a",ł Twojaap lika,co jpaisuujwei erzytelunżiyatnkioew n.iD koówwiemy się, jak korzyszt uawći erzytelznapi oaśnriead nicOtAwuetmhO ,p enlodr arzó żnyscihe scpio łecz nościowych. Rozdz4i.a",łP rzechowyiww aynkioer zystydwaannyiceoh m'a'w,i was zysttkeimea ztwyi ązane zd anymi, wlwi tcozu ażjyącźcire ó ddeałn ycihn nyncihbż a zMay SQL. " Rozdz5i.a",łW ykorzystykwoanntireo lier roóuwt idnogo ub sługi aUdRrLe istw óowrz eniAaP I, opisuwjiee lmee tokdo nfigurorwoauntiiawn gLua ravoerlaupz r zygotowypwraonsitaAe PgIo. " Rozdz6i.,a, ł,W yświetwliadnoikeó ,wo mawidaz iaławniideo kóww L araveZliun.t egrujemy równizeL ża raveslyesmt sezma bloTnwóiwog r afzr amewoTrwki tBtoeort strap. � Rozdzi7.a",łT worzeinw iyek orzystywanieC opmapkoiseetroóa'pw' j,e m etoduyż ywania pakietwó awp likoarcajtziw orzewnłiaas nepgaok ietu. """ " � �""- Rozdz8i.a",łA jaixj Quer,oy pisurjóeż nper zykłpardaycz y li jQueryL awr avelu iw ywołaniaasmyin chronicznymi. � � � • " Rozdz9i.a",łE fektywwynkeo rzystymweacnh,iaet_n i�zm ieczełlsits weas ,jz iawiera temadtoyt yczząacbee zpiecazpalniikaoa rcajszi raczys esijc ąi asteczkami. Va Rozdzi10a.ł", T estowiac nlieeb ugawaapnliiek acjiw,i�a>p raczęt estajmeid nostkowymi c� w aplikzaw cyjkio rzystfarnaimeemw orPków to raCzo deception. � " Rozdz1i1a.ł", W drażaini inet egrowanicejziu sługafmiirt mr zec,io cphisuwjyek orzy e stanwi aep likkaicljukisu ł uzge wnętrz. �- i!! �������! ����::: z , ą cgoo programowTaAnMiPa ( Linnx, ApachMey,S QLi P HP)J.a ksoe rwienrt erneptooswłyun żaymA pach2e,d ostępdnopy o brania poda dreshemt tp://httpZdal.eacpaanscyemhr wee.rboearmz gdya. n ycjhe sMty SQL5 .6d,o stępdnoyp obrapnoidaa dreshetm tp://dev.mysql.Zcaolme/cdawneoąrwn slPjoHąP a ds!mysql. jeswte rs5j.al4 ubw yższdao,s tęppnoada dreshetm tp://php.net/downloads.php. Osoby szukkaojmąpclee ksorwoezgwoi ązmaongiąba y ćz ainteressoewrawneer WaAmMiP (http://www.wamlpusbXA eMrMvPe (rh.tctopm://e/nw)w w.apachefriends.org/en/xampp.html), przeznaczodnlyasm yis teWmiun dowosr,a MzA MP (http://www.mmapm-pp.rion)f,o /en/ma dostępndylmsa y steMmauc O SX . 10