Предисловие....20
О чем эта книга....20
Для кого предназначена книга....21
Структура издания....21
О третьем издании....21
Условные обозначения....22
Благодарности....23
От издательства....24
Глава 1. Зачем использовать Laravel....25
Для чего нужен фреймворк....25
«Все своими руками»....26
Согласованность и гибкость....26
Краткий экскурс в историю веб- и PHP-фреймворков....26
Ruby on Rails....27
Бум PHP-фреймворков....27
Преимущества и недостатки CodeIgniter....27
Laravel 1, 2 и 3....28
Laravel 4....28
Laravel 5....28
Laravel 6....29
Версии Laravel в новом мире SemVer (6+)....29
Чем уникален Laravel....29
Философия Laravel....29
Как Laravel делает разработчиков счастливее....30
Сообщество Laravel....31
Как работает Laravel....32
Почему стоит выбрать Laravel....34
Глава 2. Настройка среды разработки для использования Laravel....35
Системные требования....35
Composer....36
Локальные среды разработки....36
Artisan Serve....36
Laravel Sail....36
Laravel Valet....37
Laravel Herd....37
Laravel Homestead....37
Создание нового проекта Laravel....38
Установка Laravel с помощью установщика Laravel....38
Установка Laravel с помощью функции create-project менеджера пакетов Composer....38
Установка Laravel с помощью Sail....39
Структура каталогов Laravel....39
Каталоги....40
Отдельные файлы....40
Конфигурация....41
Файл .env....42
Завершение настройки....44
Тестирование....45
Резюме....45
Глава 3. Маршрутизация и контроллеры....46
Краткое введение в MVC, команды HTTP и REST....46
Что такое MVC....46
HTTP-команды....47
Что такое REST....48
Определения маршрутов....49
Команды маршрутов....50
Обработка маршрутов....51
Параметры маршрутов....52
Имена маршрутов....53
Группы маршрутов....55
Промежуточное ПО....56
Префиксы путей....57
Поддоменная маршрутизация....58
Префиксы имен....58
Контроллеры групп маршрутов....59
Запасные маршруты....59
Подписанные маршруты....59
Подписание маршрута....60
Изменение маршрутов для разрешения подписанных ссылок....61
Представления (views)....61
Прямой возврат простых маршрутов с помощью метода Route::view()....62
Общий доступ представлений к переменным с использованием компоновщиков представлений....63
Контроллеры (controllers)....63
Получение ввода пользователя....65
Внедрение зависимостей в контроллеры....67
Контроллеры ресурсов....68
Контроллеры ресурсов API....69
Контроллеры одиночного действия....70
Привязка модели маршрута....70
Неявная привязка модели маршрута....70
Пользовательская привязка модели маршрута....72
Кэширование маршрутов....72
Подмена метода формы....73
HTTP-команды в Laravel....73
Подмена HTTP-метода в HTML-формах....73
Защита CSRF....74
Перенаправления....75
redirect()->to()....76
redirect()->route()....77
redirect()->back()....77
Другие методы перенаправления....77
redirect()->with()....78
Отмена запроса....79
Пользовательские ответы....80
response()->make()....80
response()->json() и ->jsonp()....80
response()->download(), ->streamDownload() и ->file()....80
Тестирование....81
Резюме....82
Глава 4. Движок шаблонов Blade....83
Отображение данных....84
Управляющие структуры....84
Условные конструкции....85
Циклы....85
Наследование шаблонов....87
Определение разделов страницы с помощью директив @section/@show и @yield....87
Включение частичных представлений....90
Использование компонентов....91
Использование стеков....96
Компоновщики представлений и внедрение сервисов....97
Привязка данных к представлениям с использованием компоновщиков представлений....97
Внедрение сервиса Blade....100
Пользовательские директивы Blade....101
Параметры пользовательских директив Blade....102
Пример: применение пользовательских директив Blade для многоклиентских приложений....103
Упрощенные пользовательские директивы для операторов if....104
Тестирование....104
Резюме....106
Глава 5. Базы данных и Eloquent....107
Конфигурация....107
Подключения к базе данных....108
Настройка URL....109
Другие параметры конфигурации базы данных....110
Миграции....110
Определение миграций....110
Запуск миграций....120
Инспектирование базы данных....121
Наполнение базы данными....122
Создание заполнителя....122
Фабрики моделей....123
Генератор запросов....130
Стандартное использование фасада DB....131
Чистый SQL....131
Выстраивание цепочки с генератором запросов....133
Транзакции....142
Ведение в Eloquent....143
Создание и определение моделей Eloquent....144
Получение данных с помощью Eloquent....146
Вставки и обновления с помощью Eloquent....148
Удаление с помощью Eloquent....151
Области видимости....154
Взаимодействия с полями с использованием аксессоров, мутаторов и приведением типов атрибутов....157
Коллекции Eloquent....162
Сериализация Eloquent....164
Отношения Eloquent....166
Синхронное обновление меток времени в родительских и дочерних записях....179
События Eloquent....182
Тестирование....183
Резюме....185
Глава 6. Компоненты для клиентской части....186
Стартовые наборы Laravel....186
Laravel Breeze....187
Laravel Jetstream....188
Конфигурация Laravel Vite....191
Упаковка файлов с помощью Vite....192
Сервер разработки Vite....193
Статические ресурсы и Vite....193
Vite и работа с фреймворками JavaScript....194
Использование переменных окружения в Vite....196
Разбивка на страницы....196
Разбивка на страницы результатов из базы данных....196
Разбивка на страницы вручную....198
Пакеты сообщений....199
Строковые вспомогательные функции, множественность и локализация....201
Строковые вспомогательные функции и множественность....201
Локализация....202
Тестирование....206
Тестирование пакетов сообщений и ошибок....206
Перевод и локализация....206
Отключение Vite при тестировании....207
Резюме....207
Глава 7. Сбор и обработка пользовательских данных....208
Внедрение объекта запроса....208
$request->all()....209
$request->except() и $request->only()....209
$request->has() и $request->missing()....210
$request->whenHas()....210
$request->filled()....211
$request->whenFilled()....211
$request->mergeIfMissing()....211
$request->input()....212
$request->method() и $request->isMethod()....212
$request->integer(), $request->float(), $request->string() и $request->enum()....212
$request->dump() и $request->dd()....213
Ввод массива....213
Ввод JSON (и $request->json())....214
Маршрутные данные....215
Из Request....215
Из параметров маршрута....216
Выгруженные файлы....216
Валидация....218
Метод validate() объекта Request....219
Подробнее о правилах проверки Laravel....220
Валидация вручную....221
Использование проверенных данных....221
Объекты пользовательских правил....222
Отображение сообщений об ошибках валидации....222
Запросы формы....223
Создание запроса формы....223
Использование запроса формы....224
Модель массового назначения Eloquent....225
Синтаксис {{ и {!!....226
Тестирование....227
Резюме....228
Глава 8. Интерфейсы Artisan и Tinker....229
Введение в интерфейс Artisan....229
Основные команды Artisan....230
Параметры....231
Сгруппированные команды....232
Написание пользовательских команд Artisan....234
Пример команды....235
Аргументы и параметры....236
Использование ввода....238
Приглашения....240
Вывод....241
Команды на основе замыканий....242
Вызов команд Artisan в нормальном коде....243
Tinker....244
Сервер дампа Laravel....244
Настройка шаблонов генератора....245
Тестирование....246
Резюме....246
Глава 9. Аутентификация и авторизация пользователей....247
Модель User и миграция....247
Использование глобальной вспомогательной функции auth() и фасада Auth....251
routes/auth.php, контроллеры аутентификации и действия....251
Шаблоны пользовательского интерфейса в Breeze и Jetstream....253
Токен «Запомнить меня»....253
Подтверждение пароля....254
Выполнение вручную аутентификации пользователей....254
Выполнение вручную выхода пользователя из системы....255
Аннулирование сессий на других устройствах....255
auth....256
Верификация адресов электронной почты....257
Blade-директивы для аутентификации....258
Охранники....259
Изменение охранника по умолчанию....259
Использование других охранников без изменения охранника по умолчанию....260
Добавление нового охранника....260
Охранники на основе замыкания запроса....260
Создание собственного провайдера пользователей....261
Собственные провайдеры пользователей для нереляционных баз данных....262
События аутентификации....262
Система авторизации и роли....263
Определение правил авторизации....263
Фасад Gate (и его внедрение)....264
Шлюзы ресурсов....265
Authorize....266
Авторизация внутри контроллера....266
Проверка с помощью экземпляра класса User....268
Проверки с помощью Blade-директив....269
Перехват проверок....269
Политики....270
Тестирование....272
Резюме....275
Глава 10. Запросы, ответы и промежуточное ПО....276
Жизненный цикл запроса в Laravel....276
Начальная загрузка приложения....277
Сервис-провайдеры....278
Объект Request....279
Получение объекта Request в Laravel....280
Получение основной информации о запросе....281
Объект Response....286
Использование и создание объектов Response в контроллерах....286
Специализированные типы ответов....287
Laravel и промежуточное ПО....293
Вводная информация о промежуточном ПО....293
Создание собственного промежуточного ПО....294
Привязка промежуточного ПО....296
Передача параметров промежуточному ПО....299
Промежуточное ПО по умолчанию....300
Режим обслуживания....300
Ограничение частоты....300
Доверенные прокси-серверы....301
CORS....302
Тестирование....303
Резюме....304
Глава 11. Контейнер....305
Вводная информация о внедрении зависимостей....305
Внедрение зависимостей и Laravel....307
Глобальная вспомогательная функция app()....307
Как осуществляется привязка к контейнеру....308
Привязка классов к контейнеру....309
Привязка к замыканию....309
Привязка одиночек, псевдонимов и экземпляров....310
Привязка конкретного экземпляра к интерфейсу....311
Контекстная привязка....312
Внедрение в конструктор в файлах фреймворка Laravel....313
Внедрение через метод....313
Фасады и контейнер....315
Как работают фасады....315
Фасады реального времени....317
Сервис-провайдеры....317
Тестирование....318
Резюме....319
Глава 12. Тестирование....320
Основы тестирования....321
Именование тестов....324
Среда тестирования....325
Трейты тестирования....326
RefreshDatabase....326
DatabaseMigrations....326
DatabaseTransactions....326
WithoutMiddleware....327
Простые модульные тесты....327
Как осуществляется тестирование приложений....328
HTTP-тесты....329
Тестирование простых страниц с помощью вызова $this->get() и других HTTP-вызовов....329
Тестирование API на базе JSON с помощью вызова $this->getJson() и других HTTP-вызовов на базе JSON....330
Утверждения в отношении объекта $response....331
Аутентификация ответов....334
Ряд других настроек HTTP-тестов....335
Обработка исключений в тестах приложений....335
Отладка ответов....336
Тесты базы данных....336
Проверка утверждений в отношении базы данных....337
Проверка утверждений в отношении моделей Eloquent....337
Использование фабрик моделей в тестах....338
Заполнение начальными данными в тестах....338
Тестирование других систем Laravel....338
Подделка событий....338
Подделка фасадов Bus и Queue....340
Подделка фасада Mail....341
Подделка фасада Notification....342
Подделка фасада Storage....343
Работа со значениями времени в тестах....344
Имитирование....345
Вводная информация об имитировании....345
Вводная информация о Mockery....345
«Подделка» других фасадов....348
Тестирование команд Artisan....349
Параллельное тестирование....350
Браузерные тесты....351
Выбор инструмента....351
Тестирование с использованием Dusk....351
Pest....363
Резюме....363
Глава 13. Создание API....364
Базовые сведения о REST-подобных API на базе JSON....364
Организация контроллеров и возвращаемые JSON-сообщения....366
Чтение и отправка заголовков....369
Отправка заголовков ответа в Laravel....370
Чтение заголовков запроса в Laravel....370
Разбивка на страницы в Eloquent....370
Сортировка и фильтрация....372
Сортировка результатов API....373
Фильтрация результатов API....374
Преобразование результатов....375
Ресурсы API....376
Создание класса ресурса....376
Коллекции ресурсов....377
Вложение отношений....379
Применение разбивки на страницы к ресурсам API....380
Условное применение атрибутов....381
Другие настройки для ресурсов API....381
Аутентификация API....382
Аутентификация API с помощью Sanctum....382
Аутентификация API с помощью Laravel Passport....386
Вводная информация о OAuth 2.0....386
Настройка ответов с кодом 404....398
Активация резервного маршрута....399
Тестирование....399
Тестирование пакета Passport....400
Резюме....400
Глава 14. Сохранение и извлечение данных....401
Локальные и облачные файловые менеджеры....401
Настройка доступа к файлам....401
Использование фасада Storage....403
Добавление дополнительных провайдеров из пакета Flysystem....405
Базовые способы выгрузки файлов на сервер и манипулирования файлами....406
Простые способы скачивания файлов....407
Сессии....407
Получение доступа к сессии....408
Методы, доступные в экземплярах сессий....409
Кратковременное хранилище сессии....411
Кэш....411
Получение доступа к кэшу....412
Методы, доступные в экземплярах кэшей....412
Cookie-файлы....414
Cookie-файлы в Laravel....414
Получение доступа к cookie-файлам....414
Журналирование....417
Когда и зачем следует выполнять журналирование....418
Запись сообщений в журналы....418
Каналы журналирования....419
Полнотекстовый поиск с использованием Laravel Scout....422
Установка пакета Scout....422
Пометка модели для индексирования....422
Поиск по вашему индексу....423
Очереди и Scout....423
Выполнение операций без индексирования....424
Условное индексирование моделей....424
Запуск индексирования вручную с помощью кода....424
Запуск индексирования вручную с помощью интерфейса командной строки....425
HTTP-клиент....425
Использование фасада HTTP....425
Обработка ошибок и тайм-аутов, а также проверка статусов....426
Тестирование....427
Хранилище файлов....427
Сессия....428
Кэш....430
Cookie-файлы....430
Журналирование....431
Scout....431
HTTP-клиент....432
Резюме....433
Глава 15. Почта и уведомления....434
Почта....434
Простейший способ использования «отправлений»....435
Шаблоны писем....437
Методы, доступные в envelope()....438
Прикрепление файлов и встраивание изображений....440
Markdown-отправления....441
Визуализация отправлений в браузере....443
Очереди....444
Локальная разработка....445
Уведомления....446
Определение метода via() для уведомляемых объектов....449
Отправка уведомлений....449
Помещение уведомлений в очередь....450
Предлагаемые по умолчанию типы уведомлений....450
Тестирование....454
Электронная почта....454
Уведомления....456
Резюме....457
Глава 16. Очереди, задания, события, рассылка и планировщик....458
Очереди....458
Зачем нужны очереди....459
Базовая конфигурация очередей....459
Задания в очереди....460
Запуск обработчика очередей....465
Обработка ошибок....466
Управление очередью....470
Очереди для поддержки других функций....471
Laravel Horizon....471
События....472
Запуск события....473
Прослушивание события....474
Рассылка событий посредством веб-сокетов и Laravel Echo....478
Конфигурация и настройка....478
Рассылка события....479
Получение сообщения....481
Продвинутые инструменты рассылки....483
Laravel Echo (сторона JavaScript-кода)....487
Планировщик....492
Доступные типы задач....493
Доступные временные интервалы....493
Определение часовых поясов для запланированных задач....496
Блокирование и наложение....496
Обработка выходных данных задачи....497
Ловушки задач....498
Запуск планировщика при локальной разработке....498
Тестирование....498
Резюме....500
Глава 17. Вспомогательные функции и коллекции....501
Вспомогательные функции....501
Массивы....501
Строки....504
Пути приложения....507
URL-адреса....508
Прочее....510
Коллекции....513
Базовые сведения....513
Некоторые операции с коллекциями....515
Резюме....522
Глава 18. Экосистема инструментов Laravel....523
Инструменты, рассмотренные в книге....523
Valet....523
Homestead....523
Herd....524
Установщик Laravel....524
Dusk....524
Passport....524
Sail....524
Sanctum....525
Fortify....525
Breeze....525
Jetstream....525
Horizon....525
Echo....526
Инструменты, не рассмотренные в этой книге....526
Forge....526
Vapor....526
Envoyer....527
Cashier....527
Socialite....528
Nova....528
Spark....528
Envoy....528
Telescope....529
Octane....529
Pennant....529
Folio....530
Volt....530
Pint....530
Другие ресурсы....530
Глоссарий....532
Об авторе....541
Иллюстрация на обложке....542
Что отличает Laravel от других PHP-фреймворков? Скорость и простота. Стремительная разработка приложений, обширная экосистема и набор инструментов Laravel позволяют быстро создавать сайты и приложения, отличающиеся чистым удобочитаемым кодом. Третье издание, обновленное с учетом Laravel 10, — это практическое руководство по использованию одного из самых популярных на сегодняшний день веб-фреймворков.
Мэтт Стаффер, известный преподаватель и ведущий разработчик, представляет полный обзор фреймворка и конкретные примеры работы с ним. Опытным PHP-разработчикам книга поможет быстро разобраться с темой, чтобы реализовать проект на Laravel. В обновленном руководстве рассматриваются в том числе совершенно новые инструменты аутентификации и разработки пользовательских интерфейсов, а также ряд сторонних инструментов, появившихся после выхода в свет второго издания.