Оглавление
Предисловие...........................................................................................................................................20
О чем эта книга................................................................................................................................20
Для кого предназначена книга...................................................................................................21
Структура издания.........................................................................................................................21
О втором издании...........................................................................................................................21
Условные обозначения.................................................................................................................22
Благодарности.................................................................................................................................23
Первое издание.........................................................................................................................23
Второе издание.........................................................................................................................24
От издательства.....................................................................................................................................25
Глава 1. Зачем использовать Laravel.............................................................................................26
Для чего нужен фреймворк.........................................................................................................26
«Все своими руками».............................................................................................................27
Согласованность и гибкость................................................................................................27
Краткий экскурс в историю веб- и PHP-фреймворков....................................................27
Ruby on Rails..............................................................................................................................28
Бум PHP-фреймворков.........................................................................................................28
Преимущества и недостатки CodeIgniter........................................................................28
Laravel 1, 2 и 3............................................................................................................................29
Laravel 4.......................................................................................................................................29
Laravel 5.......................................................................................................................................29
Чем уникален Laravel....................................................................................................................30
Философия Laravel.................................................................................................................30
Как Laravel делает разработчиков счастливее...............................................................31
Сообщество Laravel.................................................................................................................32
Как работает Laravel......................................................................................................................32
Почему стоит выбрать Laravel...................................................................................................35
Оглавление 7
Глава 2. Настройка среды разработки для использования Laravel.....................................36
Системные требования.................................................................................................................36
Composer............................................................................................................................................37
Локальные среды разработки.....................................................................................................37
Laravel Valet...............................................................................................................................37
Laravel Homestead....................................................................................................................38
Создание нового проекта Laravel..............................................................................................38
Установка Laravel с помощью установщика Laravel...................................................39
Установка Laravel с помощью функции create-project менеджера пакетов
Composer.....................................................................................................................................39
Lambo: улучшенный вариант команды laravel new......................................................39
Структура каталогов Laravel......................................................................................................40
Каталоги......................................................................................................................................40
Отдельные файлы....................................................................................................................41
Конфигурация.................................................................................................................................42
Завершение настройки.................................................................................................................45
Тестирование...................................................................................................................................45
Резюме................................................................................................................................................46
Глава 3. Маршрутизация и контроллеры.....................................................................................47
Краткое введение в MVC, команды HTTP и REST...........................................................47
Что такое MVC.........................................................................................................................47
HTTP-команды.........................................................................................................................48
Что такое REST........................................................................................................................49
Определения маршрутов.............................................................................................................50
Команды маршрутов...............................................................................................................51
Обработка маршрутов............................................................................................................52
Параметры маршрутов...........................................................................................................53
Имена маршрутов....................................................................................................................54
Группы маршрутов.........................................................................................................................56
Middleware..................................................................................................................................57
Префиксы путей.......................................................................................................................59
Запасные маршруты................................................................................................................60
Поддоменная маршрутизация.............................................................................................60
Префиксы пространства имен.............................................................................................61
Префиксы имен........................................................................................................................61
Подписанные маршруты..............................................................................................................62
Подписание маршрута...........................................................................................................62
Изменение маршрутов для разрешения подписанных ссылок...............................63
8 Оглавление
Представления (views).................................................................................................................64
Прямой возврат простых маршрутов с помощью метода Route::view()...............65
Общий доступ представлений к переменным с использованием
компоновщиков представлений..........................................................................................65
Контроллеры (controllers)...........................................................................................................65
Получение ввода пользователя...........................................................................................68
Внедрение зависимостей в контроллеры........................................................................69
Контроллеры ресурсов...........................................................................................................71
Контроллеры ресурсов API..................................................................................................72
Контроллеры одиночного действия..................................................................................72
Привязка модели маршрута.......................................................................................................73
Неявная привязка модели маршрута................................................................................73
Пользовательская привязка модели маршрута.............................................................74
Кэширование маршрутов............................................................................................................75
Подмена метода формы................................................................................................................75
HTTP-команды в Laravel......................................................................................................76
Подмена HTTP-метода в HTML-формах.......................................................................76
Защита CSRF...................................................................................................................................76
Перенаправления...........................................................................................................................78
redirect()->to()..........................................................................................................................79
redirect()->route()...................................................................................................................79
redirect()->back().....................................................................................................................80
Другие методы перенаправления.......................................................................................80
redirect()->with().....................................................................................................................81
Отмена запроса................................................................................................................................82
Пользовательские ответы............................................................................................................83
response()->make()..................................................................................................................83
response()->json() и ->jsonp().............................................................................................83
response()->download(), ->streamDownload() и ->file()............................................83
Тестирование...................................................................................................................................84
Резюме................................................................................................................................................85
Глава 4. Движок шаблонов Blade....................................................................................................86
Отображение данных....................................................................................................................87
Управляющие структуры............................................................................................................88
Условные конструкции..........................................................................................................88
Циклы..........................................................................................................................................89
Наследование шаблонов..............................................................................................................90
Определение разделов страницы с помощью директив @section/@show
и @yield........................................................................................................................................90
Включение составляющих представления.....................................................................93
Оглавление 9
Использование стеков............................................................................................................94
Использование компонентов и слотов.............................................................................96
Компоновщики представлений и внедрение сервисов.....................................................98
Привязка данных к представлениям с использованием компоновщиков
представлений...........................................................................................................................98
Внедрение сервиса Blade.....................................................................................................101
Пользовательские директивы Blade......................................................................................102
Параметры пользовательских директив Blade............................................................104
Пример: применение пользовательских директив Blade
для многоклиентских приложений.................................................................................104
Упрощенные пользовательские директивы для операторов if..............................105
Тестирование.................................................................................................................................106
Резюме..............................................................................................................................................107
Глава 5. Базы данных и Eloquent..................................................................................................108
Конфигурация...............................................................................................................................108
Подключения базы данных................................................................................................109
Другие параметры конфигурации базы данных.........................................................110
Миграции........................................................................................................................................110
Определение миграций........................................................................................................111
Запуск миграций....................................................................................................................117
Наполнение базы данными.......................................................................................................118
Создание сидера.....................................................................................................................119
Фабрики моделей..................................................................................................................120
Генератор запросов......................................................................................................................124
Стандартное использование фасада DB........................................................................125
Чистый SQL.............................................................................................................................126
Выстраивание цепочки с генератором запросов.........................................................127
Транзакции...............................................................................................................................135
Введение в Eloquent.....................................................................................................................136
Создание и определение моделей Eloquent..................................................................138
Получение данных с помощью Eloquent.......................................................................139
Вставки и обновления с помощью Eloquent.................................................................141
Удаление с помощью Eloquent..........................................................................................145
Области видимости...............................................................................................................147
Настройка взаимодействия полей с аксессорами, мутаторами
и приведением атрибутов....................................................................................................150
Коллекции Eloquent..............................................................................................................154
Сериализация Eloquent.......................................................................................................156
Связи в Eloquent....................................................................................................................158
Обновление меток времени родительской записи дочерними записями..........170
10 Оглавление
События Eloquent.........................................................................................................................172
Тестирование.................................................................................................................................174
Резюме..............................................................................................................................................176
Глава 6. Компоненты для клиентской части.............................................................................177
Laravel Mix......................................................................................................................................177
Структура каталога Mix......................................................................................................179
Запуск Mix...............................................................................................................................179
Что предоставляет Mix........................................................................................................180
Предустановки клиентской части и генерация кода аутентификации.....................186
Предустановки клиентской части....................................................................................187
Генерация кода аутентификации.....................................................................................188
Разбивка на страницы.................................................................................................................188
Разбивка на страницы результатов из базы данных..................................................188
Создание разбивщиков страниц вручную.....................................................................189
Пакеты сообщений.......................................................................................................................190
Строковые хелперы, множественность и локализация..................................................192
Строковые хелперы и множественность.......................................................................192
Локализация............................................................................................................................193
Тестирование.................................................................................................................................196
Тестирование пакетов сообщений и ошибок...............................................................196
Перевод и локализация........................................................................................................197
Резюме..............................................................................................................................................197
Глава 7. Получение и обработка пользовательских данных...............................................198
Внедрение объекта запроса.......................................................................................................198
$request->all().........................................................................................................................199
$request->except() и $request->only()............................................................................199
$request->has().......................................................................................................................200
$request->input()...................................................................................................................200
$request->method() и ->isMethod()................................................................................201
Ввод массива............................................................................................................................201
Ввод JSON (и $request->json()).......................................................................................201
Маршрутные данные...................................................................................................................203
Из Request................................................................................................................................203
Из параметров маршрута....................................................................................................203
Загруженные файлы....................................................................................................................203
Валидация.......................................................................................................................................206
Метод validate() объекта Request.....................................................................................206
Ручная валидация..................................................................................................................208
Оглавление 11
Объекты пользовательских правил.................................................................................208
Отображение валидационных сообщений....................................................................209
Запросы формы.............................................................................................................................209
Создание запроса формы....................................................................................................210
Использование запроса формы.........................................................................................211
Модель массового назначения Eloquent..............................................................................212
Синтаксис {{ и {!!...........................................................................................................................213
Тестирование.................................................................................................................................213
Резюме..............................................................................................................................................215
Глава 8. Интерфейсы Artisan и Tinker........................................................................................216
Введение в интерфейс Artisan..................................................................................................216
Основные команды Artisan.......................................................................................................217
Параметры................................................................................................................................217
Сгруппированные команды...............................................................................................218
Написание пользовательских команд Artisan....................................................................220
Пример команды....................................................................................................................222
Аргументы и параметры......................................................................................................223
Использование ввода............................................................................................................225
Приглашения...........................................................................................................................226
Вывод.........................................................................................................................................227
Команды на основе замыканий.........................................................................................229
Вызов команд Artisan в нормальном коде...........................................................................229
Tinker................................................................................................................................................230
Сервер дампа Laravel...................................................................................................................231
Тестирование.................................................................................................................................232
Резюме..............................................................................................................................................233
Глава 9. Аутентификация и авторизация пользователей.....................................................234
Модель User и миграция............................................................................................................235
Использование глобального хелпера auth() и фасада Auth..........................................238
Контроллеры аутентификации................................................................................................239
Контроллер RegisterController..........................................................................................239
Контроллер LoginController...............................................................................................240
Контроллер ResetPasswordController.............................................................................242
Контроллер ForgotPasswordController..........................................................................242
Контроллер VerificationController...................................................................................243
Метод Auth::routes()....................................................................................................................243
Каркас аутентификации.............................................................................................................244
Токен «Запомнить меня»...........................................................................................................245
12 Оглавление
Выполнение вручную аутентификации пользователей.................................................246
Выполнение вручную выхода пользователя из системы...............................................247
auth....................................................................................................................................................248
Верификация адресов электронной почты.........................................................................249
Blade-директивы для аутентификации.................................................................................249
Гарды.................................................................................................................................................250
Указание другого гарда по умолчанию..........................................................................250
Использование других гардов без изменения базового...........................................251
Добавление нового гарда.....................................................................................................251
Гарды на основе замыкания запроса...............................................................................252
Создание собственного провайдера пользователей...................................................252
Собственные провайдеры пользователей для нереляционных
баз данных................................................................................................................................253
События аутентификации.........................................................................................................253
Система авторизации (список управления доступом) и роли.....................................254
Определение правил авторизации...................................................................................255
Фасад Gate (и его внедрение)............................................................................................256
Ресурсы гейтов........................................................................................................................256
Authorize....................................................................................................................................257
Авторизация внутри контроллера...................................................................................257
Проверка с помощью экземпляра класса User............................................................259
Проверки с помощью Blade-директив............................................................................260
Перехват проверок.................................................................................................................260
Политики..................................................................................................................................261
Тестирование.................................................................................................................................263
Резюме..............................................................................................................................................266
Глава 10. Запросы, ответы и middleware....................................................................................267
Жизненный цикл запроса в Laravel.......................................................................................267
Начальная загрузка приложения.....................................................................................267
Сервис-провайдеры...............................................................................................................269
Объект Request..............................................................................................................................271
Получение объекта Request в Laravel.............................................................................271
Получение основной информации о запросе...............................................................272
Объект Response...........................................................................................................................276
Использование и создание объектов Response в контроллерах............................276
Специализированные типы ответов................................................................................277
Laravel и middleware....................................................................................................................283
Вводная информация о middleware.................................................................................283
Создание собственного middleware.................................................................................284
Оглавление 13
Привязка middleware............................................................................................................286
Передача параметров middleware.....................................................................................289
Доверенные прокси-серверы....................................................................................................290
Тестирование.................................................................................................................................291
Резюме..............................................................................................................................................292
Глава 11. Контейнер..........................................................................................................................293
Вводная информация о внедрении зависимостей............................................................293
Внедрение зависимостей и Laravel.........................................................................................295
Глобальный хелпер app()...........................................................................................................295
Как осуществляется привязка к контейнеру......................................................................296
Привязка классов к контейнеру..............................................................................................297
Привязка к замыканию........................................................................................................298
Привязка одиночек, псевдонимов и экземпляров......................................................299
Привязка конкретного экземпляра к интерфейсу.....................................................300
Контекстная привязка..........................................................................................................300
Внедрение в конструктор в файлах Laravel........................................................................301
Внедрение через метод...............................................................................................................302
Фасады и контейнер....................................................................................................................303
Как работают фасады............................................................................................................304
Фасады реального времени................................................................................................305
Сервис-провайдеры.....................................................................................................................306
Тестирование.................................................................................................................................306
Резюме..............................................................................................................................................307
Глава 12. Тестирование....................................................................................................................308
Основы тестирования.................................................................................................................309
Именование тестов.......................................................................................................................313
Среда тестирования.....................................................................................................................314
Трейты тестирования..................................................................................................................314
RefreshDatabase.......................................................................................................................315
WithoutMiddleware...............................................................................................................315
DatabaseMigrations................................................................................................................315
DatabaseTransactions.............................................................................................................315
Простые модульные тесты........................................................................................................316
Как осуществляется тестирование приложений...............................................................317
HTTP-тесты...................................................................................................................................318
Тестирование простых страниц с помощью вызова $this->get()
и других HTTP-вызовов......................................................................................................318
Тестирование API на базе JSON с помощью вызова $this->getJson()
и других HTTP-вызовов на базе JSON..........................................................................319
14 Оглавление
Утверждения в отношении объекта $response............................................................320
Аутентификация ответов....................................................................................................322
Ряд других настроек HTTP-тестов..................................................................................323
Обработка исключений в тестах приложений.............................................................323
Тесты базы данных.......................................................................................................................324
Использование фабрик моделей в тестах......................................................................325
Заполнение начальными данными в тестах.................................................................325
Тестирование других систем Laravel.....................................................................................325
Подделка событий.................................................................................................................326
Подделка фасадов Bus и Queue.........................................................................................327
Подделка фасада Mail...........................................................................................................328
Подделка фасада Notification.............................................................................................329
Подделка фасада Storage.....................................................................................................330
Имитирование...............................................................................................................................331
Вводная информация об имитировании.......................................................................331
Вводная информация о Mockery......................................................................................331
Подделка других фасадов...................................................................................................334
Тестирование команд Artisan...................................................................................................335
Браузерные тесты.........................................................................................................................336
Выбор инструмента...............................................................................................................337
Тестирование с использованием Dusk...........................................................................338
Резюме..............................................................................................................................................349
Глава 13. Создание API....................................................................................................................350
Базовые сведения о REST-подобных API на базе JSON................................................350
Организация контроллеров и возвращаемые JSON-сообщения.................................352
Чтение и отправка заголовков.................................................................................................355
Отправка заголовков ответа в Laravel............................................................................356
Чтение заголовков запроса в Laravel..............................................................................356
Разбивка на страницы в Eloquent...........................................................................................356
Сортировка и фильтрация........................................................................................................358
Сортировка результатов API.............................................................................................359
Фильтрация результатов API............................................................................................360
Преобразование результатов....................................................................................................361
Создание собственного преобразователя......................................................................362
Вложение связей пользовательских преобразователей...........................................363
Ресурсы API...................................................................................................................................365
Создание класса ресурса.....................................................................................................365
Коллекции ресурсов.............................................................................................................366
Вложение связей....................................................................................................................368
Оглавление 15
Применение разбивки на страницы к ресурсам API.................................................369
Условное применение атрибутов.....................................................................................370
Другие настройки для ресурсов API...............................................................................370
Аутентификация API с помощью Laravel Passport..........................................................370
Вводная информация о OAuth 2.0...................................................................................370
Установка пакета Passport..................................................................................................371
API пакета Passport...............................................................................................................373
Типы допуска, предлагаемые пакетом Passport..........................................................373
Управление клиентами и токенами с помощью API пакета Passport
и компонентов Vue................................................................................................................382
Области видимости пакета Passport...............................................................................384
Развертывание пакета Passport.........................................................................................386
Аутентификация с помощью токенов API..........................................................................386
Настройка ответов с кодом 404...............................................................................................387
Тестирование.................................................................................................................................388
Резюме..............................................................................................................................................389
Глава 14. Сохранение и извлечение данных.............................................................................390
Локальные и облачные файловые менеджеры...................................................................390
Настройка доступа к файлам.............................................................................................390
Использование фасада Storage..........................................................................................392
Добавление дополнительных провайдеров из пакета Flysystem..........................393
Базовые способы загрузки файлов на сервер и манипулирования файлами.........393
Простые способы скачивания файлов..................................................................................395
Сессии...............................................................................................................................................395
Получение доступа к сессии..............................................................................................395
Методы, доступные в экземплярах сессий....................................................................396
Флеш-память сессии............................................................................................................398
Кэш....................................................................................................................................................398
Получение доступа к кэшу.................................................................................................399
Методы, доступные в экземплярах кэшей....................................................................400
Cookie-файлы.................................................................................................................................401
Cookie-файлы в Laravel........................................................................................................401
Получение доступа к cookie-файлам...............................................................................401
Логирование...................................................................................................................................404
Когда и зачем следует выполнять логирование..........................................................405
Внесение записей в логи......................................................................................................405
Каналы логирования.............................................................................................................406
Полнотекстовый поиск с использованием Laravel Scout...............................................409
Установка пакета Scout.......................................................................................................409
Пометка модели для индексирования............................................................................410
16 Оглавление
Поиск по вашему индексу...................................................................................................410
Очереди и Scout......................................................................................................................410
Выполнение операций без индексирования.................................................................411
Условное индексирование моделей................................................................................411
Запуск индексирования вручную с помощью кода...................................................411
Запуск индексирования вручную с помощью интерфейса
командной строки..................................................................................................................412
Тестирование.................................................................................................................................412
Сохранение файлов...............................................................................................................412
Сессия........................................................................................................................................414
Кэш..............................................................................................................................................415
Cookie-файлы..........................................................................................................................415
Логирование............................................................................................................................416
Scout...........................................................................................................................................417
Резюме..............................................................................................................................................417
Глава 15. Почта и уведомления.....................................................................................................418
Почта.................................................................................................................................................418
Классическая электронная почта.....................................................................................419
Простейший способ использования отправлений.....................................................419
Шаблоны писем......................................................................................................................421
Методы, доступные в build().............................................................................................422
Прикрепленные файлы и встроенные изображения.................................................423
Markdown-отправления.......................................................................................................424
Визуализация отправлений в браузере..........................................................................426
Очереди.....................................................................................................................................426
Локальная разработка..........................................................................................................427
Уведомления..................................................................................................................................428
Определение метода via() для уведомляемых объектов..........................................431
Отправка уведомлений........................................................................................................432
Помещение уведомлений в очередь................................................................................432
Предлагаемые по умолчанию типы уведомлений......................................................433
Тестирование.................................................................................................................................437
Электронная почта................................................................................................................437
Уведомления...........................................................................................................................438
Резюме..............................................................................................................................................438
Глава 16. Очереди, задания, события, трансляция и планировщик.................................439
Очереди............................................................................................................................................439
Зачем нужны очереди...........................................................................................................440
Базовая конфигурация очередей......................................................................................440
Оглавление 17
Задания в очереди..................................................................................................................441
Запуск обработчика очередей............................................................................................444
Обработка ошибок.................................................................................................................445
Управление очередью...........................................................................................................447
Очереди для поддержки других функций.....................................................................448
Laravel Horizon..............................................................................................................................448
События...........................................................................................................................................449
Запуск события.......................................................................................................................449
Прослушивание события....................................................................................................451
Трансляция событий посредством веб-сокетов и Laravel Echo...................................454
Конфигурация и настройка................................................................................................455
Трансляция события.............................................................................................................455
Получение сообщения..........................................................................................................458
Продвинутые инструменты трансляции.......................................................................460
Laravel Echo (сторона JavaScript-кода)..........................................................................464
Планировщик.................................................................................................................................469
Доступные типы задач.........................................................................................................470
Доступные временные интервалы...................................................................................470
Определение часовых поясов для запланированных задач....................................472
Блокирование и наложение................................................................................................472
Обработка выходных данных задачи..............................................................................473
Перехват задач........................................................................................................................474
Тестирование.................................................................................................................................474
Резюме..............................................................................................................................................476
Глава 17. Хелперы и коллекции....................................................................................................477
Хелперы...........................................................................................................................................477
Массивы....................................................................................................................................477
Строки........................................................................................................................................479
Пути приложения..................................................................................................................481
URL-адреса..............................................................................................................................482
Прочее........................................................................................................................................484
Коллекции..................................................................................