Laravel w działaniu
Budowa
nowoczesnych aplikacji w PHP
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
Wstęp
O czym jest ta książka?
Dla kogo jest przeznaczona ta książka?
Jaka jest struktura tej książki?
O drugim wydaniu książki
Konwencje stosowane w tej książce
Podziękowania do pierwszego wydania książki
Podziękowania do drugiego wydania książki
Rozdział 1.
Dlaczego
Laravel?
Po co używać frameworku?
Zrobię to po swojemu
Konsekwencja i elastyczność
Krótka historia WWW i frameworków PHP
Ruby on Rails
Zalew frameworków PHP
Dobre i złe strony CodeIgnitera
Laravel 1, 2 i 3
Laravel 4
Laravel 5
Co jest tak wyjątkowe w Laravelu?
Filozofia Laravela
Jak Laravel zapewnia programistom szczęście?
Społeczność użytkowników Laravela
Jak działa Laravel?
Dlaczego Laravel?
Rozdział 2.
Konfiguracja
środowiska roboczego do korzystania z Laravela
Wymagania systemowe
Composer
Lokalne środowisko programistyczne
Laravel Valet
Laravel Homestead
Tworzenie nowego projektu Laravela
Instalowanie Laravela przy użyciu narzędzia instalacyjnego
Instalowanie Laravela przy użyciu opcji create-project Composera
Lambo: polecenie laravel new o supermocach
Struktura katalogów Laravela
Katalogi
Pliki
Konfiguracja
Plik .env
Wszystko gotowe
Testowanie
TL;DR[2]
Rozdział 3.
Trasowanie
i kontrolery
Szybkie wprowadzenie do MVC, czasowników HTTP oraz
architektury REST
Czym jest MVC?
Czasowniki HTTP
Czym jest REST?
Definiowanie tras
Czasowniki tras
Obsługa tras
Parametry tras
Nazwy tras
Grupy tras
Oprogramowanie pośrednie
Stosowanie oprogramowania pośredniego w kontrolerach
Ograniczanie częstotliwości
Prefiksy ścieżek
Trasy awaryjne
Trasy do poddomen
Prefiksy przestrzeni nazw
Prefiksy nazw
Trasy podpisane
Podpisywanie trasy
Modyfikacja tras w celu umożliwienia ich podpisywania
Widoki
Bezpośrednie zwracanie prostych tras przy użyciu Route::view()
Stosowanie twórców widoków w celu
udostępniania danych we wszystkich widokach
Kontrolery
Pobieranie danych wejściowych od użytkowników
Wstrzykiwanie zależności do kontrolerów
Kontrolery zasobów
Metody kontrolerów zasobów w Laravelu
Wiązanie kontrolerów zasobów
Kontrolery zasobów API
Wiązanie kontrolerów zasobów API
Kontrolery jednej akcji
Wiązanie tras i modelu
Niejawne wiązanie tras i modelu
Niestandardowe wiązanie trasy i modelu
Przechowywanie tras w pamięci podręcznej
Oszukiwanie metod obsługi formularzy
Czasowniki HTTP w Laravelu
Oszukiwanie metody HTTP w formularzach HTML
Zabezpieczanie przed atakami CSRF
Przekierowania
Metoda redirect()->to()
Metoda redirect()->route()
Metoda redirect()->back()
Inne metody przekierowań
Metoda redirect()->with()
Przerywanie przekierowania
Niestandardowe odpowiedzi
Metoda response()->make()
Metody response()->json() oraz ->jsonp()
Metody response()->download(), ->streamDownload() oraz
->file
Testowanie
TL;DR
Rozdział 4.
Szablony Blade
Wyświetlanie danych
Struktury sterujące
Konstrukcje warunkowe
@if
@unless i @endunless
Pętle
@for, @foreach oraz @while
Konstrukcje @forelse i @endforelse
Dziedziczenie szablonów
Definiowanie sekcji przy użyciu @section/@show oraz @yield
Dyrektywa @extends
Dyrektywy @section i @endsection
Dyrektywa @parent
Dołączanie fragmentów widoków
Dyrektywa @include
Dyrektywa @each
Stosowanie stosów
Stosowanie komponentów i gniazd
Stosowanie wielu gniazd
Definiowanie nazw zastępczych komponentów, by można ich było
używać jako dyrektyw
Twórcy widoków i wstrzykiwanie usług
Wiązanie danych z widokami przy użyciu twórców
Udostępnianie zmiennej globalnie
Ograniczanie zakresu twórców widoków
przy użyciu domknięć
Użycie klas do tworzenia twórców
widoków o ograniczonym zakresie
Wstrzykiwanie usług w szablonach Blade
Dyrektywy niestandardowe
Parametry w niestandardowych dyrektywach
Przykład: Stosowanie niestandardowych dyrektyw w aplikacji
wielodostępnej
Łatwiejsze niestandardowe dyrektywy reprezentujące instrukcje if
Testowanie
TL;DR
Rozdział 5.
Bazy
danych i Eloquent
Konfiguracja
Połączenia z bazami danych
Opcje konfiguracji baz danych
Definiowanie migracji
Tworzenie migracji
Tworzenie tabel
Tworzenie kolumn
Tworzenie dodatkowych właściwości z wykorzystaniem płynnej składni
Usuwanie tabel
Modyfikowanie kolumn
Indeksy i klucze obce
Wykonywanie migracji
Wypełnianie tabel danymi
Tworzenie klasy wypełniającej
Fabryki modeli
Tworzenie fabryki modelu
Stosowanie fabryk modeli
Profesjonalne fabryki modeli
Budowniczy zapytań
Podstawowe sposoby użycia fasady DB
Wykonywanie kodu SQL
Wybieranie wierszy
Wiązanie parametrów i wiązanie z wykorzystaniem nazw
Nieprzetworzone polecenia INSERT
Nieprzetworzone polecenia UPDATE
Nieprzetworzone polecenia DELETE
Sekwencje zapytań tworzone przy użyciu budowniczego
Metody ograniczające
Metody modyfikujące
Metody warunkowe
Metody edytujące oraz zwracające rekordy
Pisanie nieprzetworzonych zapytań w metodach budowniczego zapytań przy
użyciu DB::raw
Złączenia
Unie
Wstawianie
Aktualizacja
Usuwanie
Operacje na kodzie JSON
Transakcje
Wprowadzenie do mechanizmu Eloquent
Tworzenie i definiowanie modeli mechanizmu Eloquent
Nazwa tabeli
Klucz główny
Znaczniki czasu
Pobieranie danych w modelach Eloquent
Pobieranie jednego rekordu
Pobieranie wielu rekordów
Dzielenie odpowiedzi na fragmenty przy użyciu metody chunk()
Agregacja danych
Wstawianie danych i ich aktualizacja w mechanizmie Eloquent
Wstawianie
Aktualizacja
Masowe przypisania
Metody firstOrCreate() lub firstOrNew()
Usuwanie rekordów przy użyciu mechanizmu Eloquent
Normalne usuwanie
Miękkie usuwanie
Zasięgi
Zasięgi lokalne
Zasięgi globalne
Dostosowywanie interakcji z polami przy użyciu akcesorów,
mutatorów i rzutowania atrybutów
Akcesory
Mutatory
Rzutowanie atrybutów
Mutatory dat
Kolekcje mechanizmu Eloquent
Przedstawienie podstawowych kolekcji
Dodatkowe możliwości kolekcji mechanizmu Eloquent
Serializacja w mechanizmie Eloquent
Zwracanie modeli bezpośrednio z metod obsługi tras
Ukrywanie atrybutów podczas generowania kodu JSON
Związki w mechanizmie Eloquent
Związki jeden-do-jednego
Związki jeden-do-wielu
Związki ma-wiele-przez
Związki ma-jeden-przez
Związki wiele-do-wielu
Związki polimorficzne
Polimorficzny związek wiele-do-wielu
Rekordy podrzędne aktualizujące znaczniki czasu rekordów
nadrzędnych
Ładowanie zachłanne
Zachłanne wczytywanie wyłącznie liczby rekordów
Zdarzenia mechanizmu Eloquent
Testowanie
TL;DR
Rozdział 6.
Komponenty
frontendowe
System budowania Mix
Struktura katalogów systemu Mix
Uruchamianie systemu Mix
Co nam daje Mix?
Mapy źródeł
Pre- i postprocesory
Pomijanie wstępnego przetwarzania kodu CSS
Łączenie kodu JavaScript
Przetwarzanie kodu JavaScript
Kopiowanie plików lub katalogów
Wersjonowanie
Vue i React
Podmienianie modułów na bieżąco
Wyodrębnianie plików zależności
Zmienne środowiskowe w systemie Mix
Predefiniowane ustawienia frontendowe i generowanie kodu
uwierzytelniającego
Predefiniowane ustawienia frontendowe
Korzystanie z ustawień predefiniowanych przygotowanych przez
niezależnych twórców
Generowanie kodu uwierzytelniającego
Podział na strony
Podział na strony wyników pobieranych z baz danych
Ręczna obsługa podziału na strony
Pojemniki komunikatów
Nazwane pojemniki komunikatów
Funkcje pomocnicze do obsługi łańcuchów, tworzenia liczb
mnogich i lokalizowania
Funkcje pomocnicze do obsługi łańcuchów i tworzenia liczb
mnogich
Lokalizowanie
Prosta lokalizacja
Parametry w lokalizacjach
Liczby mnogie w tłumaczeniach
Przechowywanie domyślnego łańcucha jako klucza w kodzie JSON
Testowanie
Testowanie pojemników komunikatów i
błędów
Tłumaczenie i lokalizowanie
TL;DR
Rozdział 7.
Gromadzenie i obsługa danych od użytkowników
Wstrzykiwanie obiektu Request
Metoda $request->all()
Metody $request->except() oraz $request->only()
Metoda $request->has()
Metoda $request->input()
Metody $request->method() oraz $request->isMethod()
Dane wejściowe w formie tablicy
Dane wejściowe w formacie JSON (i metoda $request->json())
Dane tras
Obiekt Request
Dane z parametrów trasy
Pliki przesyłane na serwer
Walidacja
Wywoływanie validate() na rzecz obiektu Request
Ręczna walidacja
Obiekty reguł niestandardowych
Wyświetlanie komunikatów o błędach walidacji
Żądania formularzy
Tworzenie żądań formularzy
Korzystanie z żądań formularzy
Masowe przypisania w obiektach mechanizmu Eloquent
{{ a {!!
Testowanie
TL;DR
Rozdział 8.
Artisan
i Tinker
Prezentacja Artisana
Podstawowe polecenia Artisana
Opcje
Grupy poleceń
Pisanie niestandardowych poleceń Artisan
Przykładowe polecenie
Argumenty i opcje
Argumenty wymagane, opcjonalne i (lub) z wartościami domyślnymi:
Opcje wartości wymagane, wartości domyślne i skróty
Argumenty tablicowe i opcje tablic
Opis danych wejściowych
Korzystanie z danych wejściowych
Metody arguments() i options()
Metody option() i options()
Wyświetlanie komunikatów z prośbą o podanie danych
Wyświetlanie wyników
Wyświetlanie wyników w formie tabeli
Paski postępu
Polecenia implementowane przy użyciu domknięć
Wywoływanie poleceń Artisana w normalnym kodzie
Tinker
Serwer zrzutów Laravela
Testowanie
TL;DR
Rozdział 9.
Uwierzytelnianie
i autoryzacja użytkowników
Model User i jego migracja
Stosowanie globalnej funkcji pomocniczej auth() i fasady Auth
Kontrolery związane z uwierzytelnianiem
Kontroler RegisterController
Cecha RegistersUsers
Kontroler LoginController
Cecha AuthenticatesUsers
Cecha ThrottlesLogins
Kontroler ResetPasswordController
Kontroler ForgotPasswordController
Kontroler VerificationController
Metoda Auth::routes()
Generowany kod obsługujący uwierzytelnianie
Zapamiętaj mnie
Ręczne uwierzytelnianie użytkowników
Ręczne wylogowywanie użytkownika
Unieważnianie sesji na innych urządzeniach
Oprogramowanie pośrednie związane z uwierzytelnianiem
Weryfikacja adresu e-mail
Dyrektywy mechanizmu Blade związane z uwierzytelnianiem
Strażniki
Zmiana domyślnego strażnika
Stosowanie innych strażników bez zmieniania domyślnego
Dodawanie nowych strażników
Strażniki żądań obsługiwanych przy użyciu domknięć
Tworzenie niestandardowego dostawcy użytkowników
Niestandardowi dostawcy użytkowników dla nierelacyjnych baz
danych
Zdarzenia związane z uwierzytelnianiem
Autoryzacja (ACL) i role
Definiowanie reguł autoryzacji
Fasada Gate (lub wstrzykiwanie obiektu Gate)
Kontrola dostępu do zasobów
Oprogramowanie pośrednie służące do autoryzacji
Autoryzacja w kontrolerach
Sprawdzanie instancji klasy User
Testy w szablonach Blade
Przechwytywanie testów
Polityki
Generowanie polityk
Sprawdzanie polityk
Przesłanianie polityk
Testowanie
TL;DR
Rozdział 10.
Żądania, odpowiedzi i oprogramowanie pośrednie
Cykl życia żądania w Laravelu
Ładowanie aplikacji
Jądro Laravela
Dostawcy usług
Metody boot() i register() oraz odraczanie rejestracji
dostawców usług
Obiekt Request
Pobieranie obiektu Request w Laravelu
Pobieranie podstawowych informacji na temat żądania
Podstawowe dane wprowadzane przez użytkownika
Stan użytkownika i żądania
Pliki
Trwałość
Obiekt Response
Tworzenie i stosowanie obiektu Response w kontrolerach
Ustawianie nagłówków
Dodawanie ciasteczek
Wyspecjalizowane typy odpowiedzi
Odpowiedzi korzystające z widoków
Odpowiedzi umożliwiające pobieranie plików
Odpowiedzi umożliwiające wyświetlenie pliku
Odpowiedzi JSON
Odpowiedzi z przekierowaniami
Makra niestandardowych odpowiedzi
Interfejs Responsable
Laravel i oprogramowanie pośrednie
Wprowadzenie do oprogramowania pośredniego
Tworzenie niestandardowego oprogramowania pośredniego
Wyjaśnienie działania metody handle()
Wiązanie oprogramowania pośredniego
Wiązanie globalnego oprogramowania pośredniego
Wiązanie oprogramowania pośredniego z trasami
Stosowanie grup oprogramowania pośredniego
Przekazywanie parametrów do oprogramowania pośredniego
Zaufane serwery pośredniczące
Testowanie
TL;DR
Rozdział 11.
Kontener
Krótkie wprowadzenie do wstrzykiwania zależności
Wstrzykiwanie zależności w Laravelu
Globalna funkcja pomocnicza app()
W jaki sposób kontener określa zależności?
Dodawanie klas do kontenera
Określanie zależności z wykorzystaniem domknięć
Stosowanie singletonów, nazw zastępczych i instancji
Wiązanie konkretnej instancji z interfejsem
Wiązanie kontekstowe
Wstrzykiwanie do konstruktora w plikach Laravela
Wstrzykiwanie do metod
Fasady a kontener
Jak działają fasady?
Fasady czasu rzeczywistego
Dostawcy usług
Testowanie
TL;DR
Rozdział 12.
Testowanie
Podstawy testowania
Nazewnictwo testów
Testowanie środowiska
Cechy używane podczas testowania
RefreshDatabase
WithoutMiddleware
DatabaseMigrations
DatabaseTransactions
Proste testy jednostkowe
Testy aplikacji jak działają?
Klasa TestCase
Testy HTTP
Proste testy stron przy użyciu $this->get() oraz innych wywołań
HTTP
Testowanie API przy użyciu $this->getJson() i innych wywołań
HTTP zwracających dane JSON
Stosowanie asercji z obiektem $response
Uwierzytelnianie odpowiedzi
Kilka innych modyfikacji testów żądań HTTP
Obsługa wyjątków w testach aplikacji
Testy baz danych
Stosowanie fabryk modeli w testach
Wypełnianie tabel danymi w testach
Testowanie innych systemów Laravela
Imitacje zdarzeń
Imitacje magistrali i kolejki
Imitacje poczty elektronicznej
Imitacje powiadomień
Imitacje magazynów
Stosowanie atrap
Krótkie wprowadzenie do stosowania atrap
Krótkie wprowadzenie do Mockery
Imitowanie innych fasad
Testowanie komend Artisana
Sprawdzanie składni poleceń Artisana
Testy w przeglądarce
Wybór odpowiedniego narzędzia
Testowanie przy użyciu narzędzia Dusk
Instalowanie Duska
Pisanie testów Duska
Uwierzytelnianie i bazy danych
Interakcje ze stronami
Oczekiwanie
Inne asercje
Inne struktury organizacyjne
TL;DR
Rozdział 13.
Tworzenie API
Podstawy tworzenia API typu REST-like dla zasobów JSON
Organizacja kontrolera i zwracanie danych w formacie JSON
Odczyt i wysyłanie nagłówków
Wysyłanie nagłówków odpowiedzi w Laravelu
Odczytywanie nagłówków żądania w Laravelu
Dzielenie wyników modeli Eloquent na strony
Sortowanie i filtrowanie
Sortowanie wyników zwracanych przez API
Filtrowanie wyników zwracanych przez API
Przekształcanie wyników
Pisanie własnych przekształceń
Obsługa zagnieżdżania i związków przy użyciu
niestandardowych przekształceń
Zasoby API
Tworzenie klasy zasobu
Kolekcje zasobów
Zagnieżdżanie powiązanych zasobów
Stosowanie podziału na strony z zasobami API
Warunkowe stosowanie atrybutów
Dodatkowe możliwości dostosowywania zasobów API
Uwierzytelnianie API przy użyciu Laravel Passport
Krótkie wprowadzenie do OAuth 2.0
Instalowanie Passporta
API Passporta
Różne typy przyznań
Przyznanie w oparciu o hasło
Przyznanie w oparciu o kod autoryzacyjny
Osobiste żetony dostępu
Żetony z mechanizmu uwierzytelniania sesji Laravela
Zarządzanie klientami i żetonami przy użyciu API Passporta oraz
komponenty Vue
Trasy
Komponenty Vue
Zasięgi
Wdrażanie Passportu
Uwierzytelnianie przy użyciu żetonu API
Dostosowywanie odpowiedzi 404
Wyzwalanie trasy awaryjnej
Testowanie
Testowanie Passporta
TL;DR
Rozdział 14.
Przechowywanie i pobieranie
Magazyny plików lokalne oraz w chmurze
Konfiguracja dostępu do plików
Stosowanie fasady Storage
Dodawanie innych dostawców systemów
plików
Podstawowe sposoby przesyłania plików na serwer i operacji
na nich
Proste sposoby pobierania plików
Sesje
Dostęp do sesji
Dostępne metody instancji sesji
Mechanizm składowania flash sesji
Pamięć podręczna
Dostęp do pamięci podręcznej
Dostępne metody instancji pamięci podręcznej
Ciasteczka
Ciasteczka w Laravelu
Dostęp do narzędzi obsługi ciasteczek
Fasada Cookie
Globalna funkcja pomocnicza cookie()
Operacje na ciasteczkach wykonywane przy użyciu obiektów
Request i Response
Rejestracja
Kiedy i dlaczego używać dzienników?
Zapisywanie wpisów w dziennikach
Kanały dzienników
Kanał single
Kanał daily
Kanał slack
Kanał stack
Zapisywanie wpisów w konkretnych kanałach
Wyszukiwanie pełnotekstowe przy użyciu Laravel Scout
Instalacja pakietu Scout
Oznaczanie modelu do indeksowania
Przeszukiwanie indeksu
Kolejki i Scout
Wykonywanie operacji bez indeksowania
Warunkowe indeksowanie modeli
Ręczne wyzwalanie indeksowania z poziomu kodu
Ręczne wyzwalanie indeksowania z poziomu wiersza poleceń
Testowanie
Przechowywanie plików
Przesyłanie fikcyjnych plików
Zwracanie fikcyjnych plików
Sesja
Pamięć podręczna
Ciasteczka
Rejestrowanie
Pakiet Scout
TL;DR
Rozdział 15.
Poczta elektroniczna i
powiadomienia
Poczta elektroniczna
Obsługa klasycznej poczty elektronicznej
Podstawowe sposoby stosowania składni wysyłalnej
Szablony e-maili
Metody dostępne wewnątrz metody build()
Załączniki oraz wstawiane obrazki
Wiadomości e-mail w formacie Markdown
Komponenty Markdown
Wyświetlanie wysyłalnych wiadomości w przeglądarce
Kolejki
Praca lokalna
Sterownik log
Mailtrap.io
Uniwersalne do
Powiadomienia
Definiowanie metody via() w klasie powiadomienia
Wysyłanie powiadomień
Wysyłanie powiadomień przy użyciu cechy Notifiable
Wysyłanie powiadomień przy użyciu fasady Notification
Umieszczanie powiadomień w kolejce
Domyślnie dostępne typy powiadomień
Powiadomienia przesyłane pocztą elektroniczną
Powiadomienia zapisywane w bazie danych
Powiadomienia rozgłaszane
Powiadomienia przesyłane SMS-ami
Powiadomienia w serwisie Slack
Inne powiadomienia
Testowanie
Poczta elektroniczna
Powiadomienia
TL;DR
Rozdział 16.
Kolejki, zadania,
zdarzenia, rozgłaszanie i mechanizm planowania
Kolejki
Dlaczego kolejki?
Podstawowa konfiguracja kolejek
Zadania umieszczane w kolejkach
Tworzenie zadania
Wstawianie zadania do kolejki
Uruchamianie procesu roboczego
Obsługa błędów
Obsługa wyjątków
Ograniczenie liczby prób
Obsługa zadań, których nie udało się wykonać
Kontrola kolejki
Kolejki wspierające działanie innych elementów Laravela
Laravel Horizon
Zdarzenia
Zgłaszanie zdarzeń
Nasłuchiwanie zdarzeń
Subskrybenci zdarzeń
Rozgłaszanie zdarzeń przy użyciu WebSocket i Laravel Echo
Konfiguracja i ustawienia
Rozgłaszanie zdarzeń
Odbieranie wiadomości
Prosty serwer WebSocket działający w serwisie Pusher
Zaawansowane narzędzia do rozgłaszania
Zapobieganie przekazywaniu rozgłaszanych zdarzeń do bieżącego
użytkownika
Dostawca usługi rozgłaszania
Laravel Echo (kliencki kod JavaScript)
Instalowanie Laravel Echo w projekcie
Stosowanie Laravel Echo do prostego rozgłaszania zdarzeń
Kanały prywatne i proste uwierzytelnianie
Kanały obecności
Wykluczanie bieżącego użytkownika
Subskrybowanie powiadomień przy użyciu Laravel Echo
Zdarzenia klienckie
Mechanizm planujący
Dostępne typy zadań
Dostępne ramki czasu
Definiowanie stref czasowych w zaplanowanych poleceniach
Blokowanie i nakładanie
Obsługa wyników generowanych przez zadania
Punkty zaczepienia zadań
Testowanie
TL;DR
Rozdział 17.
Funkcje pomocnicze i kolekcje
Funkcje pomocnicze
Tablice
Łańcuchy znaków
Ścieżki aplikacji
Adresy URL
Różne funkcje
Kolekcje
Podstawy
Kilka metod
TL;DR
Rozdział 18.
Ekosystem Laravela
Narzędzia opisane w niniejszej książce
Valet
Homestead
Instalator Laravela
Mix
Dusk
Passport
Horizon
Echo
Narzędzia nieopisane w tej książce
Forge
Envoyer
Cashier
Socialite
Nova
Spark
Lumen
Envoy
Telescope
Inne zasoby
Słowniczek
O autorze
Kolofon
504
strony, Format: 17.0x24.0cm, oprawa miękka