Details zum E-Book

Laravel w działaniu. Budowa nowoczesnych aplikacji w PHP. Wydanie II

Laravel w działaniu. Budowa nowoczesnych aplikacji w PHP. Wydanie II

Matt Stauffer

E-book

Framework Laravel cieszy się rosnącą popularnością wśród programistów aplikacji w języku PHP. Jest szybki, potężny i elastyczny, można się go błyskawicznie nauczyć, a generowany przez niego kod cechują przejrzystość i czytelność. Co więcej, Laravel skupia wokół siebie zaangażowaną społeczność, która z jednej strony systematycznie tworzy nowe narzędzia i pakiety wzbogacające ten framework, z drugiej - chętnie śpieszy z pomocą w rozwiązywaniu problemów. Jest to więc świetny, dynamicznie rozwijający się zestaw narzędzi, który spodoba się każdemu profesjonalnemu programiście PHP, ceniącemu efektywność i wysoką jakość tworzonego kodu.

Ta książka stanowi praktyczne i kompletne wprowadzenie do Laravela (zawiera informacje dotyczące Laravela 5.8). Dzięki niej osoby dysponujące pewnym doświadczeniem w tworzeniu kodu PHP błyskawicznie rozpoczną tworzenie znakomitych aplikacji. Znalazły się tutaj zarówno ogólne informacje na temat korzystania z tego frameworka, jak i przykłady szczegółowych zastosowań. Omówiono także mnóstwo narzędzi i bibliotek wzbogacających funkcjonalność Laravela: Dusk, Horizon, Artisan, Mix czy Passport. Opisano też interfejsy pozwalające na dostęp do systemu plików, sesji, ciasteczek, pamięci podręcznej i wyszukiwania oraz narzędzia do korzystania z kolejek, implementacji zadań, zdarzeń i publikowania zdarzeń WebSocket.

W książce między innymi:

  • tworzenie szablonów w Blade
  • generowanie, walidacja, normalizacja oraz filtrowanie danych użytkownika
  • praca z bazami danych za pomocą Eloquent
  • testowanie kodu PHP: PHPUnit, Mockery oraz Dusk
  • tworzenie API typu RESTful
  • inne narzędzia i biblioteki Laravela

Laravel: framework godny profesjonalisty!


Wstęp 17

1. Dlaczego Laravel? 23

  • Po co używać frameworku? 23
    • "Zrobię to po swojemu" 24
    • Konsekwencja i elastyczność 24
  • Krótka historia WWW i frameworków PHP 24
    • Ruby on Rails 25
    • Zalew frameworków PHP 25
    • Dobre i złe strony CodeIgnitera 25
    • Laravel 1, 2 i 3 26
    • Laravel 4 26
    • Laravel 5 26
  • Co jest tak wyjątkowe w Laravelu? 27
    • Filozofia Laravela 27
    • Jak Laravel zapewnia programistom szczęście? 28
    • Społeczność użytkowników Laravela 29
  • Jak działa Laravel? 29
  • Dlaczego Laravel? 31

2. Konfiguracja środowiska roboczego do korzystania z Laravela 33

  • Wymagania systemowe 33
  • Composer 34
  • Lokalne środowisko programistyczne 34
    • Laravel Valet 34
    • Laravel Homestead 35
  • Tworzenie nowego projektu Laravela 36
    • Instalowanie Laravela przy użyciu narzędzia instalacyjnego 36
    • Instalowanie Laravela przy użyciu opcji create-project Composera 36
    • Lambo: polecenie "laravel new" o supermocach 36
  • Struktura katalogów Laravela 37
    • Katalogi 38
    • Pliki 39
  • Konfiguracja 40
    • Plik .env 41
  • Wszystko gotowe 43
  • Testowanie 43
  • TL;DR 44

3. Trasowanie i kontrolery 45

  • Szybkie wprowadzenie do MVC, czasowników HTTP oraz architektury REST 45
    • Czym jest MVC? 45
    • Czasowniki HTTP 46
    • Czym jest REST? 47
  • Definiowanie tras 48
    • Czasowniki tras 50
    • Obsługa tras 50
    • Parametry tras 51
    • Nazwy tras 52
  • Grupy tras 54
    • Oprogramowanie pośrednie 55
    • Prefiksy ścieżek 57
    • Trasy awaryjne 58
    • Trasy do poddomen 58
    • Prefiksy przestrzeni nazw 59
    • Prefiksy nazw 59
  • Trasy podpisane 59
    • Podpisywanie trasy 60
    • Modyfikacja tras w celu umożliwienia ich podpisywania 61
  • Widoki 61
    • Bezpośrednie zwracanie prostych tras przy użyciu Route::view() 62
    • Stosowanie twórców widoków w celu udostępniania danych we wszystkich widokach 63
  • Kontrolery 63
    • Pobieranie danych wejściowych od użytkowników 66
    • Wstrzykiwanie zależności do kontrolerów 67
    • Kontrolery zasobów 68
    • Kontrolery zasobów API 69
    • Kontrolery jednej akcji 70
  • Wiązanie tras i modelu 70
    • Niejawne wiązanie tras i modelu 71
    • Niestandardowe wiązanie trasy i modelu 71
  • Przechowywanie tras w pamięci podręcznej 72
  • Oszukiwanie metod obsługi formularzy 73
    • Czasowniki HTTP w Laravelu 73
    • Oszukiwanie metody HTTP w formularzach HTML 73
  • Zabezpieczanie przed atakami CSRF 74
  • Przekierowania 75
    • Metoda redirect()->to() 76
    • Metoda redirect()->route() 76
    • Metoda redirect()->back() 77
    • Inne metody przekierowań 77
    • Metoda redirect()->with() 78
  • Przerywanie przekierowania 79
  • Niestandardowe odpowiedzi 80
    • Metoda response()->make() 80
    • Metody response()->json() oraz ->jsonp() 80
    • Metody response()->download(), ->streamDownload() oraz ->file 80
  • Testowanie 81
  • TL;DR 82

4. Szablony Blade 83

  • Wyświetlanie danych 84
  • Struktury sterujące 85
    • Konstrukcje warunkowe 85
    • Pętle 86
  • Dziedziczenie szablonów 88
    • Definiowanie sekcji przy użyciu @section/@show oraz @yield 88
    • Dołączanie fragmentów widoków 90
    • Stosowanie stosów 92
    • Stosowanie komponentów i gniazd 93
  • Twórcy widoków i wstrzykiwanie usług 95
    • Wiązanie danych z widokami przy użyciu twórców 96
    • Wstrzykiwanie usług w szablonach Blade 98
  • Dyrektywy niestandardowe 99
    • Parametry w niestandardowych dyrektywach 100
    • Przykład: Stosowanie niestandardowych dyrektyw w aplikacji wielodostępnej 101
    • Łatwiejsze niestandardowe dyrektywy reprezentujące instrukcje "if" 102
  • Testowanie 102
  • TL;DR 103

5. Bazy danych i Eloquent 105

  • Konfiguracja 105
    • Połączenia z bazami danych 106
    • Opcje konfiguracji baz danych 107
    • Definiowanie migracji 108
    • Wykonywanie migracji 115
  • Wypełnianie tabel danymi 116
    • Tworzenie klasy wypełniającej 116
    • Fabryki modeli 117
  • Budowniczy zapytań 122
    • Podstawowe sposoby użycia fasady DB 122
    • Wykonywanie kodu SQL 123
    • Sekwencje zapytań tworzone przy użyciu budowniczego 124
    • Transakcje 132
  • Wprowadzenie do mechanizmu Eloquent 134
    • Tworzenie i definiowanie modeli mechanizmu Eloquent 135
    • Pobieranie danych w modelach Eloquent 136
    • Wstawianie danych i ich aktualizacja w mechanizmie Eloquent 138
    • Usuwanie rekordów przy użyciu mechanizmu Eloquent 142
    • Zasięgi 144
    • Dostosowywanie interakcji z polami przy użyciu akcesorów, mutatorów i rzutowania atrybutów 147
    • Kolekcje mechanizmu Eloquent 150
    • Serializacja w mechanizmie Eloquent 153
    • Związki w mechanizmie Eloquent 155
    • Rekordy podrzędne aktualizujące znaczniki czasu rekordów nadrzędnych 166
  • Zdarzenia mechanizmu Eloquent 168
  • Testowanie 170
  • TL;DR 171

6. Komponenty frontendowe 173

  • System budowania Mix 173
    • Struktura katalogów systemu Mix 175
    • Uruchamianie systemu Mix 175
    • Co nam daje Mix? 176
  • Predefiniowane ustawienia frontendowe i generowanie kodu uwierzytelniającego 182
    • Predefiniowane ustawienia frontendowe 183
    • Generowanie kodu uwierzytelniającego 184
  • Podział na strony 184
    • Podział na strony wyników pobieranych z baz danych 184
    • Ręczna obsługa podziału na strony 185
  • Pojemniki komunikatów 186
    • Nazwane pojemniki komunikatów 188
  • Funkcje pomocnicze do obsługi łańcuchów, tworzenia liczb mnogich i lokalizowania 188
    • Funkcje pomocnicze do obsługi łańcuchów i tworzenia liczb mnogich 188
    • Lokalizowanie 189
  • Testowanie 193
    • Testowanie pojemników komunikatów i błędów 193
    • Tłumaczenie i lokalizowanie 193
  • TL;DR 193

7. Gromadzenie i obsługa danych od użytkowników 195

  • Wstrzykiwanie obiektu Request 195
    • Metoda $request->all() 196
    • Metody $request->except() oraz $request->only() 196
    • Metoda $request->has() 197
    • Metoda $request->input() 197
    • Metody $request->method() oraz $request->isMethod() 198
    • Dane wejściowe w formie tablicy 198
    • Dane wejściowe w formacie JSON (i metoda $request->json()) 198
  • Dane tras 200
    • Obiekt Request 200
    • Dane z parametrów trasy 200
  • Pliki przesyłane na serwer 200
  • Walidacja 203
    • Wywoływanie validate() na rzecz obiektu Request 203
    • Ręczna walidacja 205
    • Obiekty reguł niestandardowych 206
    • Wyświetlanie komunikatów o błędach walidacji 206
  • Żądania formularzy 207
    • Tworzenie żądań formularzy 207
    • Korzystanie z żądań formularzy 208
  • Masowe przypisania w obiektach mechanizmu Eloquent 209
  • {{ a {!! 210
  • Testowanie 211
  • TL;DR 212

8. Artisan i Tinker 213

  • Prezentacja Artisana 213
  • Podstawowe polecenia Artisana 214
    • Opcje 215
    • Grupy poleceń 215
  • Pisanie niestandardowych poleceń Artisan 218
    • Przykładowe polecenie 220
    • Argumenty i opcje 221
    • Korzystanie z danych wejściowych 222
    • Wyświetlanie komunikatów z prośbą o podanie danych 224
    • Wyświetlanie wyników 225
    • Polecenia implementowane przy użyciu domknięć 226
  • Wywoływanie poleceń Artisana w normalnym kodzie 227
  • Tinker 228
  • Serwer zrzutów Laravela 228
  • Testowanie 229
  • TL;DR 230

9. Uwierzytelnianie i autoryzacja użytkowników 231

  • Model User i jego migracja 232
  • Stosowanie globalnej funkcji pomocniczej auth() i fasady Auth 235
  • Kontrolery związane z uwierzytelnianiem 235
    • Kontroler RegisterController 236
    • Kontroler LoginController 237
    • Kontroler ResetPasswordController 238
    • Kontroler ForgotPasswordController 239
    • Kontroler VerificationController 239
  • Metoda Auth::routes() 239
  • Generowany kod obsługujący uwierzytelnianie 240
  • "Zapamiętaj mnie" 241
  • Ręczne uwierzytelnianie użytkowników 242
  • Ręczne wylogowywanie użytkownika 243
    • Unieważnianie sesji na innych urządzeniach 243
  • Oprogramowanie pośrednie związane z uwierzytelnianiem 243
  • Weryfikacja adresu e-mail 244
  • Dyrektywy mechanizmu Blade związane z uwierzytelnianiem 245
  • Strażniki 246
    • Zmiana domyślnego strażnika 246
    • Stosowanie innych strażników bez zmieniania domyślnego 247
    • Dodawanie nowych strażników 247
    • Strażniki żądań obsługiwanych przy użyciu domknięć 247
    • Tworzenie niestandardowego dostawcy użytkowników 248
    • Niestandardowi dostawcy użytkowników dla nierelacyjnych baz danych 248
  • Zdarzenia związane z uwierzytelnianiem 249
  • Autoryzacja (ACL) i role 250
    • Definiowanie reguł autoryzacji 250
    • Fasada Gate (lub wstrzykiwanie obiektu Gate) 251
    • Kontrola dostępu do zasobów 252
    • Oprogramowanie pośrednie służące do autoryzacji 252
    • Autoryzacja w kontrolerach 253
    • Sprawdzanie instancji klasy User 254
    • Testy w szablonach Blade 255
    • Przechwytywanie testów 255
    • Polityki 256
  • Testowanie 258
  • TL;DR 260

10. Żądania, odpowiedzi i oprogramowanie pośrednie 263

  • Cykl życia żądania w Laravelu 263
    • Ładowanie aplikacji 264
    • Dostawcy usług 265
  • Obiekt Request 266
    • Pobieranie obiektu Request w Laravelu 267
    • Pobieranie podstawowych informacji na temat żądania 268
  • Obiekt Response 272
    • Tworzenie i stosowanie obiektu Response w kontrolerach 272
    • Wyspecjalizowane typy odpowiedzi 273
  • Laravel i oprogramowanie pośrednie 278
    • Wprowadzenie do oprogramowania pośredniego 278
    • Tworzenie niestandardowego oprogramowania pośredniego 279
    • Wiązanie oprogramowania pośredniego 281
    • Przekazywanie parametrów do oprogramowania pośredniego 284
  • Zaufane serwery pośredniczące 285
  • Testowanie 286
  • TL;DR 287

11. Kontener 289

  • Krótkie wprowadzenie do wstrzykiwania zależności 289
  • Wstrzykiwanie zależności w Laravelu 291
    • Globalna funkcja pomocnicza app() 291
  • W jaki sposób kontener określa zależności? 292
  • Dodawanie klas do kontenera 293
    • Określanie zależności z wykorzystaniem domknięć 293
    • Stosowanie singletonów, nazw zastępczych i instancji 294
    • Wiązanie konkretnej instancji z interfejsem 295
    • Wiązanie kontekstowe 296
  • Wstrzykiwanie do konstruktora w plikach Laravela 296
  • Wstrzykiwanie do metod 297
  • Fasady a kontener 298
    • Jak działają fasady? 299
    • Fasady czasu rzeczywistego 300
  • Dostawcy usług 301
  • Testowanie 301
  • TL;DR 302

12. Testowanie 303

  • Podstawy testowania 303
  • Nazewnictwo testów 308
  • Testowanie środowiska 308
  • Cechy używane podczas testowania 309
    • RefreshDatabase 309
    • WithoutMiddleware 310
    • DatabaseMigrations 310
    • DatabaseTransactions 310
  • Proste testy jednostkowe 310
  • Testy aplikacji - jak działają? 311
    • Klasa TestCase 311
  • Testy HTTP 312
    • Proste testy stron przy użyciu $this->get() oraz innych wywołań HTTP 312
    • Testowanie API przy użyciu $this->getJson() i innych wywołań HTTP zwracających dane JSON 313
    • Stosowanie asercji z obiektem $response 314
    • Uwierzytelnianie odpowiedzi 315
    • Kilka innych modyfikacji testów żądań HTTP 316
    • Obsługa wyjątków w testach aplikacji 317
  • Testy baz danych 317
    • Stosowanie fabryk modeli w testach 318
    • Wypełnianie tabel danymi w testach 318
  • Testowanie innych systemów Laravela 318
    • Imitacje zdarzeń 319
    • Imitacje magistrali i kolejki 320
    • Imitacje poczty elektronicznej 321
    • Imitacje powiadomień 322
    • Imitacje magazynów 323
  • Stosowanie atrap 323
    • Krótkie wprowadzenie do stosowania atrap 324
    • Krótkie wprowadzenie do Mockery 324
    • Imitowanie innych fasad 326
  • Testowanie komend Artisana 327
    • Sprawdzanie składni poleceń Artisana 328
  • Testy w przeglądarce 329
    • Wybór odpowiedniego narzędzia 329
    • Testowanie przy użyciu narzędzia Dusk 330
  • TL;DR 340

13. Tworzenie API 341

  • Podstawy tworzenia API typu REST-like dla zasobów JSON 341
  • Organizacja kontrolera i zwracanie danych w formacie JSON 342
  • Odczyt i wysyłanie nagłówków 346
    • Wysyłanie nagłówków odpowiedzi w Laravelu 347
    • Odczytywanie nagłówków żądania w Laravelu 347
  • Dzielenie wyników modeli Eloquent na strony 347
  • Sortowanie i filtrowanie 348
    • Sortowanie wyników zwracanych przez API 349
    • Filtrowanie wyników zwracanych przez API 350
  • Przekształcanie wyników 351
    • Pisanie własnych przekształceń 352
    • Obsługa zagnieżdżania i związków przy użyciu niestandardowych przekształceń 353
  • Zasoby API 355
    • Tworzenie klasy zasobu 355
    • Kolekcje zasobów 356
    • Zagnieżdżanie powiązanych zasobów 358
    • Stosowanie podziału na strony z zasobami API 358
    • Warunkowe stosowanie atrybutów 359
    • Dodatkowe możliwości dostosowywania zasobów API 360
  • Uwierzytelnianie API przy użyciu Laravel Passport 360
    • Krótkie wprowadzenie do OAuth 2.0 360
    • Instalowanie Passporta 361
    • API Passporta 362
    • Różne typy przyznań 363
    • Zarządzanie klientami i żetonami przy użyciu API Passporta oraz komponenty Vue 371
    • Zasięgi 373
    • Wdrażanie Passportu 375
  • Uwierzytelnianie przy użyciu żetonu API 375
  • Dostosowywanie odpowiedzi 404 376
    • Wyzwalanie trasy awaryjnej 377
  • Testowanie 377
    • Testowanie Passporta 378
  • TL;DR 378

14. Przechowywanie i pobieranie 379

  • Magazyny plików - lokalne oraz w chmurze 379
    • Konfiguracja dostępu do plików 379
    • Stosowanie fasady Storage 380
    • Dodawanie innych dostawców systemów plików 382
  • Podstawowe sposoby przesyłania plików na serwer i operacji na nich 382
  • Proste sposoby pobierania plików 384
  • Sesje 384
    • Dostęp do sesji 384
    • Dostępne metody instancji sesji 385
    • Mechanizm składowania "flash" sesji 387
  • Pamięć podręczna 387
    • Dostęp do pamięci podręcznej 388
    • Dostępne metody instancji pamięci podręcznej 388
  • Ciasteczka 390
    • Ciasteczka w Laravelu 390
    • Dostęp do narzędzi obsługi ciasteczek 390
  • Rejestracja 393
    • Kiedy i dlaczego używać dzienników? 394
    • Zapisywanie wpisów w dziennikach 394
    • Kanały dzienników 395
  • Wyszukiwanie pełnotekstowe przy użyciu Laravel Scout 397
    • Instalacja pakietu Scout 398
    • Oznaczanie modelu do indeksowania 398
    • Przeszukiwanie indeksu 398
    • Kolejki i Scout 399
    • Wykonywanie operacji bez indeksowania 399
    • Warunkowe indeksowanie modeli 399
    • Ręczne wyzwalanie indeksowania z poziomu kodu 400
    • Ręczne wyzwalanie indeksowania z poziomu wiersza poleceń 400
  • Testowanie 400
    • Przechowywanie plików 400
    • Pamięć podręczna 403
    • Ciasteczka 403
    • Rejestrowanie 404
    • Pakiet Scout 405
  • TL;DR 405

15. Poczta elektroniczna i powiadomienia 407

  • Poczta elektroniczna 407
    • Obsługa "klasycznej" poczty elektronicznej 408
    • Podstawowe sposoby stosowania składni "wysyłalnej" 408
    • Szablony e-maili 410
    • Metody dostępne wewnątrz metody build() 411
    • Załączniki oraz wstawiane obrazki 412
    • Wiadomości e-mail w formacie Markdown 413
    • Wyświetlanie wysyłalnych wiadomości w przeglądarce 415
    • Kolejki 415
    • Praca lokalna 416
  • Powiadomienia 417
    • Definiowanie metody via() w klasie powiadomienia 420
    • Wysyłanie powiadomień 420
    • Umieszczanie powiadomień w kolejce 421
    • Domyślnie dostępne typy powiadomień 421
  • Testowanie 425
    • Poczta elektroniczna 425
    • Powiadomienia 426
  • TL;DR 426

16. Kolejki, zadania, zdarzenia, rozgłaszanie i mechanizm planowania 427

  • Kolejki 427
    • Dlaczego kolejki? 428
    • Podstawowa konfiguracja kolejek 428
    • Zadania umieszczane w kolejkach 428
    • Uruchamianie procesu roboczego 432
    • Obsługa błędów 432
    • Kontrola kolejki 435
    • Kolejki wspierające działanie innych elementów Laravela 435
  • Laravel Horizon 435
  • Zdarzenia 436
    • Zgłaszanie zdarzeń 437
    • Nasłuchiwanie zdarzeń 438
  • Rozgłaszanie zdarzeń przy użyciu WebSocket i Laravel Echo 441
    • Konfiguracja i ustawienia 442
    • Rozgłaszanie zdarzeń 442
    • Odbieranie wiadomości 445
    • Zaawansowane narzędzia do rozgłaszania 447
    • Laravel Echo (kliencki kod JavaScript) 451
  • Mechanizm planujący 455
    • Dostępne typy zadań 455
    • Dostępne ramki czasu 456
    • Definiowanie stref czasowych w zaplanowanych poleceniach 458
    • Blokowanie i nakładanie 458
    • Obsługa wyników generowanych przez zadania 458
    • Punkty zaczepienia zadań 459
  • Testowanie 459
  • TL;DR 461

17. Funkcje pomocnicze i kolekcje 463

  • Funkcje pomocnicze 463
    • Tablice 463
    • Łańcuchy znaków 465
    • Ścieżki aplikacji 467
    • Adresy URL 468
    • Różne funkcje 470
  • Kolekcje 472
    • Podstawy 472
    • Kilka metod 474
  • TL;DR 478

18. Ekosystem Laravela 479

  • Narzędzia opisane w niniejszej książce 479
    • Valet 479
    • Homestead 479
    • Instalator Laravela 480
    • Mix 480
    • Dusk 480
    • Passport 480
    • Horizon 480
    • Echo 481
  • Narzędzia nieopisane w tej książce 481
    • Forge 481
    • Envoyer 481
    • Cashier 482
    • Socialite 482
    • Nova 483
    • Spark 483
    • Lumen 483
    • Envoy 484
    • Telescope 484
  • Inne zasoby 484

Słowniczek 487

  • Titel: Laravel w działaniu. Budowa nowoczesnych aplikacji w PHP. Wydanie II
  • Autor: Matt Stauffer
  • Originaler Titel: Laravel: Up & Running: A Framework for Building Modern PHP Apps, 2nd Edition
  • Übersetzung: Piotr Rajca
  • ISBN: 978-83-283-7634-2, 9788328376342
  • Veröffentlichungsdatum: 2021-08-10
  • Format: E-book
  • Artikelkennung: larav2
  • Verleger: Helion