Опубликовано

Новинка: Laravel 9. Быстрая разработка веб-сайтов на PHP

Laravel 9. Быстрая разработка веб-сайтов на PHP

Представляем книгу Владимира Дронова “Laravel 9. Быстрая разработка веб-сайтов на PHP“.

Книга представляет собой полное описание фреймворка Laravel 9 для быстрой разработки сайтов на языке PHP. Дан краткий вводный курс для начинающих, в котором описывается разработка простого учебного сайта — электронной доски объявлений. Описаны базовые инструменты Laravel: миграции, модели, маршруты, контроллеры, шаблоны, средства обработки пользовательского ввода и сохранения выгруженных файлов, валидаторы, шаблоны, пагинаторы и инструменты разграничения доступа. Рассказано о более развитых средствах: внедрении зависимостей, провайдерах, посредниках, событиях и их обработке, отправке электронной почты, оповещениях, очередях и отложенных заданиях, встроенном планировщике, инструментах кеширования, локализации сайтов и расширении возможностей встроенной утилиты artisan. Описаны дополнительные библиотеки для обработки BBCode-тегов и CAPTCHA, вывода графических миниатюр, аутентификации через социальные сети. Рассмотрено программирование веб-служб REST, вещание по протоколу WebSocket и публикация сайта.

    • Модели, контроллеры и шаблоны
    • Разграничение доступа
    • CAPTCHA
    • BBCode
    • Аутентификация через социальные сети
    • Обработка событий
    • Оповещения
    • Отложенные задания
    • Планировщик
    • Локализация сайтов
    • Разработка веб-служб REST
    • Публикация сайта

Дронов Владимир Александрович, профессиональный программист, писатель и журналист, работает с компьютерами с 1987 года. Автор более 30 популярных компьютерных книг, в том числе «Django 2.1. Практика создания веб-сайтов на Python», “HTML, JavaScript, PHP и MySQL. Джентльменский набор Web-мастера“, «Python 3. Самое необходимое», «Python 3 и PyQt 5. Разработка приложений», “Laravel. Быстрая разработка современных динамических Web-сайтов на PHP, MySQL, HTML и CSS“, “Angular 4. Быстрая разработка сверхдинамических Web-сайтов на TypeScript и PHP” и книг по продуктам Adobe Flash и Adobe Dreamweaver различных версий. Его статьи публикуются в журналах “Мир ПК” и “ИнтерФейс” (Израиль) и интернет-порталах “IZ City” и “TheVista.ru”.

Книгу “Laravel 9. Быстрая разработка веб-сайтов на PHP” можно купить со скидкой в интернет-магазине издательства “БХВ”.

Предисловие…………………………………………………………………………………………… 19

Почему именно Laravel?……………………………………………………………………………………………………………. 19

О чем эта книга?…………………………………………………………………………………………………………………………. 20

Используемое ПО……………………………………………………………………………………………………………………….. 21

Типографские соглашения………………………………………………………………………………………………………… 22

Часть I. Основы Laravel на практическом примере……….. 25

Глава 1. Простейший веб-сайт — доска объявлений……………………………… 27

1.1. Подготовительные действия………………………………………………………………………………………………. 27

1.2. Проект и его создание. Папка проекта……………………………………………………………………………… 27

Теория………………………………………………………………………………………………………………………………………. 27

Практика………………………………………………………………………………………………………………………………….. 28

1.3. Запуск проекта. Отладочный веб-сервер PHP………………………………………………………………….. 29

1.4. Контроллеры и действия……………………………………………………………………………………………………. 30

Теория………………………………………………………………………………………………………………………………………. 30

Практика………………………………………………………………………………………………………………………………….. 31

1.5. Маршруты и списки маршрутов. Фасады………………………………………………………………………… 32

Теория………………………………………………………………………………………………………………………………………. 32

Практика………………………………………………………………………………………………………………………………….. 33

1.6. Настройки проекта. Подготовка проекта к работе с базой данных SQLite…………………… 34

Теория………………………………………………………………………………………………………………………………………. 34

Практика………………………………………………………………………………………………………………………………….. 34

1.7. Миграции…………………………………………………………………………………………………………………………….. 36

Теория………………………………………………………………………………………………………………………………………. 36

Практика………………………………………………………………………………………………………………………………….. 36

1.8. Модели…………………………………………………………………………………………………………………………………. 38

1.9. Консоль Laravel…………………………………………………………………………………………………………………… 39

1.10. Работа с базой данных…………………………………………………………………………………………………….. 40

1.11. URL-параметры. Внедрение зависимостей…………………………………………………………………….. 43

Теория………………………………………………………………………………………………………………………………………. 43

Практика………………………………………………………………………………………………………………………………….. 44

1.12. Шаблоны……………………………………………………………………………………………………………………………. 46

Теория………………………………………………………………………………………………………………………………………. 46

Практика………………………………………………………………………………………………………………………………….. 46

1.13. Наследование шаблонов………………………………………………………………………………………………….. 51

Теория………………………………………………………………………………………………………………………………………. 51

Практика………………………………………………………………………………………………………………………………….. 51

1.14. Именованные маршруты………………………………………………………………………………………………….. 53

1.15. Статические файлы…………………………………………………………………………………………………………… 54

Глава 2. Доска объявлений 2.0: разграничение доступа,
работа с объявлениями и локализация…………………………………………………… 55

2.1. Межтабличные связи. Работа со связанными записями………………………………………………….. 55

2.2. Вход и выход. Раздел пользователя………………………………………………………………………………….. 58

Теория………………………………………………………………………………………………………………………………………. 58

Практика………………………………………………………………………………………………………………………………….. 59

2.3. Добавление, правка и удаление записей………………………………………………………………………….. 64

2.4. Валидация данных……………………………………………………………………………………………………………… 70

2.5. Разграничение доступа. Посредники, политики и провайдеры……………………………………… 72

Теория………………………………………………………………………………………………………………………………………. 72

Практика………………………………………………………………………………………………………………………………….. 73

2.6. Получение сведений о текущем пользователе…………………………………………………………………. 76

2.7. Локализация веб-сайта………………………………………………………………………………………………………. 76

Часть II. Базовые инструменты………………………………………………… 81

Глава 3. Создание, настройка и отладка проекта…………………………………… 83

3.1. Подготовка к установке……………………………………………………………………………………………………… 83

3.2. Создание проекта……………………………………………………………………………………………………………….. 83

3.2.1. Создание проекта с помощью Composer…………………………………………………………………….. 83

3.2.2. Создание проекта с помощью Laravel Installer…………………………………………………………… 84

3.3. Папки и файлы проекта………………………………………………………………………………………………………. 85

3.4. Настройки проекта……………………………………………………………………………………………………………… 87

3.4.1. Две разновидности настроек проекта…………………………………………………………………………. 87

3.4.1.1. Локальные настройки…………………………………………………………………………………………. 87

3.4.1.2. Рабочие настройки………………………………………………………………………………………………. 88

3.4.2. Настройки проекта по категориям………………………………………………………………………………. 89

3.4.2.1. Базовые настройки проекта……………………………………………………………………………….. 89

3.4.2.2. Настройки режима работы веб-сайта……………………………………………………………….. 90

3.4.2.3. Настройки шифрования………………………………………………………………………………………. 90

3.4.2.4. Настройки баз данных………………………………………………………………………………………… 91

3.4.3. Доступ к настройкам из программного кода……………………………………………………………… 94

3.4.4. Создание своих настроек……………………………………………………………………………………………… 95

3.5. Базовые инструменты отладки………………………………………………………………………………………….. 96

3.5.1. Отладочный веб-сервер………………………………………………………………………………………………… 96

3.5.2. Вывод сообщений об ошибках…………………………………………………………………………………….. 97

Глава 4. Миграции и сидеры………………………………………………………………….. 99

4.1. Миграции…………………………………………………………………………………………………………………………….. 99

4.1.1. Создание миграций…………………………………………………………………………………………………….. 100

4.1.2. Класс миграции…………………………………………………………………………………………………………… 100

4.1.3. Создание таблиц…………………………………………………………………………………………………………. 101

4.1.3.1. Создание полей………………………………………………………………………………………………….. 101

4.1.3.2. Реализация «мягкого» удаления записей в таблицах…………………………………….. 105

4.1.3.3. Указание дополнительных параметров полей……………………………………………….. 105

4.1.3.4. Создание индексов…………………………………………………………………………………………….. 107

4.1.3.5. Создание полей внешнего ключа…………………………………………………………………….. 108

4.1.3.6. Задание дополнительных параметров таблиц……………………………………………….. 111

4.1.4. Правка и удаление таблиц…………………………………………………………………………………………. 111

4.1.4.1. Правка и удаление полей………………………………………………………………………………….. 111

4.1.4.2. Переименование и удаление индексов…………………………………………………………….. 113

4.1.4.3. Удаление полей внешнего ключа и управление соблюдением
ссылочной целостности…………………………………………………………………………………………………. 113

4.1.4.4. Переименование и удаление таблиц……………………………………………………………….. 114

4.1.5. Проверка существования таблиц и полей………………………………………………………………… 114

4.1.6. Указание базы данных, с которой будут работать миграции………………………………… 115

4.1.7. Обработка миграций…………………………………………………………………………………………………… 115

4.1.7.1. Применение миграций……………………………………………………………………………………….. 115

4.1.7.2. Откат миграций, обновление, сброс и очистка базы данных………………………… 116

4.1.7.3. Создание журнала миграций и просмотр их состояния………………………………… 117

4.1.8. Дамп базы данных как альтернатива миграциям……………………………………………………. 118

4.2. Сидеры……………………………………………………………………………………………………………………………….. 118

4.2.1. Использование корневого сидера……………………………………………………………………………… 119

4.2.2. Использование подчиненных сидеров………………………………………………………………………. 119

4.2.3. Выполнение сидеров…………………………………………………………………………………………………… 120

Глава 5. Модели: базовые инструменты……………………………………………….. 121

5.1. Создание моделей…………………………………………………………………………………………………………….. 121

5.2. Класс модели и соглашения по умолчанию…………………………………………………………………… 122

5.3. Параметры модели……………………………………………………………………………………………………………. 123

5.3.1. Параметры полей модели…………………………………………………………………………………………… 123

5.3.2. Параметры обслуживаемой таблицы……………………………………………………………………….. 123

5.3.3. Параметры преобразования типов……………………………………………………………………………. 124

5.3.4. Реализация «мягкого» удаления записей в моделях………………………………………………… 127

5.4. Создание связей между моделями…………………………………………………………………………………… 127

5.4.1. Связь «один-со-многими»……………………………………………………………………………………………. 127

5.4.2. Связь «один-с-одним из многих»………………………………………………………………………………… 129

5.4.3. Связь «один-с-одним»…………………………………………………………………………………………………. 131

5.4.4. Связь «многие-со-многими»………………………………………………………………………………………… 131

5.4.4.1. Использование связующих моделей………………………………………………………………… 135

5.4.5. Пометка записи первичной модели как исправленной при правке или удалении связанных записей вторичной модели………………………………………………………………………………………………………………………………………………… 136

5.4.6. Сквозная связь «один-со-многими»……………………………………………………………………………. 136

5.4.7. Сквозная связь «один-с-одним»………………………………………………………………………………….. 137

5.4.8. Записи-заглушки…………………………………………………………………………………………………………. 137

5.4.9. Замкнутая связь…………………………………………………………………………………………………………… 138

5.5. Методы моделей……………………………………………………………………………………………………………….. 139

5.6. Преобразователи. Акцессоры и мутаторы……………………………………………………………………… 139

5.6.1. Виртуальные поля………………………………………………………………………………………………………. 141

5.6.2. Акцессоры и мутаторы в предыдущих версиях Laravel………………………………………….. 141

Глава 6. Запись данных……………………………………………………………………….. 143

6.1. Добавление, правка и удаление записей с помощью моделей……………………………………… 143

6.1.1. Добавление записей. Построитель запросов……………………………………………………………. 143

6.1.2. Правка записей……………………………………………………………………………………………………………. 145

6.1.2.1. Правка значений отдельных полей………………………………………………………………….. 146

6.1.2.2. Проверка, значения каких полей изменились…………………………………………………. 147

6.1.3. Удаление записей……………………………………………………………………………………………………….. 149

6.1.3.1. «Мягкое» удаление записей……………………………………………………………………………… 149

6.1.4. Работа со связанными записями………………………………………………………………………………… 150

6.1.4.1. Связи «один-со-многими» и «один-с-одним»: связывание
существующих записей…………………………………………………………………………………………………. 150

6.1.4.2. Связи «один-со-многими» и «один-с-одним»: добавление и правка связанных записей 151

6.1.4.3. Связь «один-с-одним из многих»………………………………………………………………………. 152

6.1.4.4. Связь «многие-со-многими»: связывание записей…………………………………………… 153

6.1.4.5. Связь «многие-со-многими»: добавление и правка связанных записей………… 155

6.1.5. Копирование записей…………………………………………………………………………………………………. 156

6.2. Массовые добавление, правка и удаление записей………………………………………………………. 156

6.2.1. Массовое добавление записей…………………………………………………………………………………… 156

6.2.2. Массовая правка записей…………………………………………………………………………………………… 158

6.2.3. Массовое удаление записей………………………………………………………………………………………. 159

6.2.4. Использование фасада DB для записи данных………………………………………………………… 159

Глава 7. Выборка данных…………………………………………………………………….. 161

7.1. Извлечение значений из полей записи…………………………………………………………………………….. 161

7.2. Доступ к связанным записям……………………………………………………………………………………………. 161

7.2.1. Связь «один-со-многими»: доступ к связанным записям…………………………………………. 161

7.2.2. Связь «один-с-одним из многих»: доступ к связанным записям……………………………… 162

7.2.3. Связь «один-с-одним»: доступ к связанным записям……………………………………………….. 163

7.2.4. Связь «многие-со-многими»: доступ к связанным записям……………………………………… 163

7.3. Выборка записей: базовые средства………………………………………………………………………………. 164

7.3.1. Выборка всех записей………………………………………………………………………………………………… 164

7.3.2. Извлечение первой записи………………………………………………………………………………………….. 164

7.3.3. Поиск записей……………………………………………………………………………………………………………… 165

7.3.4. Фильтрация записей……………………………………………………………………………………………………. 167

7.3.4.1. Фильтрация записей по значениям полей типа JSON…………………………………….. 172

7.3.4.2. Фильтрация по полнотекстовому индексу………………………………………………………. 173

7.3.5. Сортировка записей……………………………………………………………………………………………………. 174

7.3.6. Выборка указанного количества записей………………………………………………………………… 175

7.3.7. Выборка уникальных записей…………………………………………………………………………………… 175

7.3.8. Задание параметров запросов на основании выполнения указанного условия…… 176

7.3.9. Смена типа выдаваемых значений……………………………………………………………………………. 176

7.3.10. Выполнение запроса и получение результата………………………………………………………. 176

7.3.11. Проверка наличия записей в полученном результате…………………………………………… 177

7.3.12. Объединение результатов от разных запросов……………………………………………………… 177

7.4. Выборка связанных записей……………………………………………………………………………………………. 178

7.5. Выборка записей: расширенные средства……………………………………………………………………… 182

7.5.1. Указание выбираемых полей…………………………………………………………………………………….. 182

7.5.2. Вставка фрагментов SQL-кода в запрос……………………………………………………………………. 183

7.5.3. Связывание таблиц……………………………………………………………………………………………………… 183

7.5.4. Использование вложенных запросов………………………………………………………………………… 186

7.5.5. Использование фасада DB для выборки данных……………………………………………………… 189

7.6. Агрегатные вычисления……………………………………………………………………………………………………. 189

7.6.1. Агрегатные вычисления по всем записям…………………………………………………………………. 189

7.6.2. Агрегатные вычисления по группам записей…………………………………………………………… 190

7.6.3. Агрегатные вычисления по связанным записям……………………………………………………….. 192

7.7. Извлечение «мягко» удаленных записей…………………………………………………………………………. 194

7.8. Сравнение записей……………………………………………………………………………………………………………. 195

7.9. Получение значения заданного поля………………………………………………………………………………. 195

7.10. Повторное считывание записей…………………………………………………………………………………….. 196

Глава 8. Маршрутизация……………………………………………………………………… 197

8.1. Настройки маршрутизатора……………………………………………………………………………………………. 197

8.2. Списки маршрутов……………………………………………………………………………………………………………. 198

8.3. Создание простых маршрутов………………………………………………………………………………………… 198

8.3.1. Специализированные маршруты………………………………………………………………………………. 199

8.3.2. Резервный маршрут…………………………………………………………………………………………………….. 200

8.4. Именованные маршруты………………………………………………………………………………………………….. 200

8.5. URL-параметры и параметризованные маршруты……………………………………………………….. 201

8.5.1. Указание правил для значений URL-параметров……………………………………………………. 202

8.5.2. Внедрение моделей…………………………………………………………………………………………………….. 203

8.5.2.1. Неявное внедрение моделей……………………………………………………………………………… 203

8.5.2.2. Явное внедрение моделей…………………………………………………………………………………. 205

8.5.3. Внедрение перечислений……………………………………………………………………………………………. 207

8.5.4. Значения по умолчанию для URL-параметров………………………………………………………… 207

8.6. Дополнительные параметры маршрутов……………………………………………………………………….. 209

8.7. Группы маршрутов…………………………………………………………………………………………………………… 210

8.8. Маршруты на ресурсные контроллеры………………………………………………………………………….. 211

8.8.1. Маршруты на подчиненные ресурсные контроллеры……………………………………………. 213

8.8.2. Дополнительные параметры маршрутов на ресурсные контроллеры………………….. 213

8.9. Как Laravel обрабатывает списки маршрутов?…………………………………………………………….. 215

8.10. Вывод списка созданных маршрутов…………………………………………………………………………… 215

Глава 9. Контроллеры и действия. Обработка запросов и генерирование ответов            217

9.1. Разновидности контроллеров и особенности работы с ними……………………………………….. 217

9.1.1. Контроллеры-функции……………………………………………………………………………………………….. 217

9.1.2. Контроллеры-классы………………………………………………………………………………………………….. 218

9.1.2.1. Ресурсные контроллеры……………………………………………………………………………………. 218

9.1.2.2. Контроллеры одного действия…………………………………………………………………………. 220

9.1.2.3. Создание контроллеров-классов……………………………………………………………………… 220

9.1.2.4. Связывание посредников с контроллерами…………………………………………………….. 221

9.2. Внедрение зависимостей в контроллерах………………………………………………………………………. 221

9.3. Обработка клиентских запросов……………………………………………………………………………………… 222

9.3.1. Извлечение данных, отправленных посетителем…………………………………………………….. 223

9.3.2. Как узнать, присутствует ли в запросе нужное значение?……………………………………… 225

9.3.3. Добавление в запрос произвольных значений…………………………………………………………. 226

9.3.4. Получение сведений о запросе………………………………………………………………………………….. 227

9.4. Генерирование интернет-адресов…………………………………………………………………………………… 231

9.5. Генерирование серверных ответов…………………………………………………………………………………. 233

9.5.1. Ответы на основе шаблонов………………………………………………………………………………………. 233

9.5.1.1. Ответы в виде объектов класса View……………………………………………………………….. 233

9.5.1.2. Ответы в виде объектов класса Response………………………………………………………… 234

9.5.2. Специальные ответы…………………………………………………………………………………………………… 235

9.5.2.1. Отправка файла для отображения в веб-обозревателе………………………………….. 235

9.5.2.2. Отправка файла для сохранения на локальном диске…………………………………… 235

9.5.2.3. Отправка данных в форматах JSON и JSONP………………………………………………….. 236

9.5.2.4. Текстовый ответ…………………………………………………………………………………………………. 237

9.5.2.5. «Пустой» ответ…………………………………………………………………………………………………… 237

9.5.3. Дополнительные параметры ответов……………………………………………………………………….. 237

9.5.4. Перенаправления………………………………………………………………………………………………………… 238

9.6. Обработка ошибок……………………………………………………………………………………………………………. 240

Глава 10. Обработка введенных данных. Валидация…………………………… 242

10.1. Извлечение введенных данных……………………………………………………………………………………… 242

10.2. Валидация данных…………………………………………………………………………………………………………. 244

10.2.1. Валидаторы………………………………………………………………………………………………………………. 244

10.2.1.1. Быстрая валидация с неявным созданием валидатора……………………………….. 244

10.2.1.2. Валидация с явным созданием валидатора………………………………………………….. 246

10.2.2. Формальные запросы……………………………………………………………………………………………….. 249

10.2.3. Правила валидации и написание их наборов………………………………………………………… 252

10.2.3.1. Валидация паролей…………………………………………………………………………………………. 261

10.2.3.2. Валидация массивов элементов управления………………………………………………… 262

10.2.4. Написание сообщений об ошибках ввода……………………………………………………………… 264

10.2.4.1. Подстановки наименований…………………………………………………………………………… 265

10.2.5. Извлечение ранее введенных данных……………………………………………………………………… 265

10.2.6. Извлечение сообщений об ошибках ввода……………………………………………………………… 266

10.2.7. Создание своих правил валидации…………………………………………………………………………. 267

10.2.7.1. Правила-функции…………………………………………………………………………………………….. 267

10.2.7.2. Правила-расширения………………………………………………………………………………………. 267

10.2.7.3. Правила-объекты…………………………………………………………………………………………….. 268

10.3. Предварительная обработка введенных данных………………………………………………………… 270

10.4. Вывод веб-страниц добавления, правки и удаления записей…………………………………….. 272

Глава 11. Шаблоны: базовые инструменты………………………………………….. 274

11.1. Настройки шаблонизатора……………………………………………………………………………………………. 274

11.2. Директивы шаблонизатора……………………………………………………………………………………………. 275

11.2.1. Директивы вывода данных………………………………………………………………………………………. 275

11.2.1.1. Вывод данных в формате JSON……………………………………………………………………… 276

11.2.2. Управляющие директивы…………………………………………………………………………………………. 276

11.2.2.1. Условные директивы и директивы выбора……………………………………………………. 276

11.2.2.2. Директивы циклов……………………………………………………………………………………………. 278

11.2.3. Прочие директивы…………………………………………………………………………………………………….. 280

11.2.4. Запрет на обработку директив………………………………………………………………………………… 281

11.3. Вывод веб-форм и элементов управления…………………………………………………………………….. 282

11.3.1. Вывод веб-форм………………………………………………………………………………………………………… 282

11.3.2. Вывод элементов управления………………………………………………………………………………….. 283

11.3.3. Вывод сообщений об ошибках ввода……………………………………………………………………… 284

11.4. Наследование шаблонов……………………………………………………………………………………………….. 285

11.5. Стеки………………………………………………………………………………………………………………………………… 288

11.6. Включаемые шаблоны…………………………………………………………………………………………………… 290

11.6.1. Псевдонимы включаемых шаблонов………………………………………………………………………. 291

11.7. Компоненты…………………………………………………………………………………………………………………….. 291

11.7.1. Полнофункциональные компоненты………………………………………………………………………. 292

11.7.1.1. Создание полнофункциональных компонентов…………………………………………… 292

11.7.1.2. Передача данных в компоненты. Атрибуты компонентов………………………….. 295

11.7.1.3. Передача HTML-содержимого в компоненты. Слоты…………………………………. 298

11.7.2. Упрощенные компоненты………………………………………………………………………………………… 299

11.7.2.1. Бесшаблонные компоненты……………………………………………………………………………. 299

11.7.2.2. Бесклассовые компоненты……………………………………………………………………………… 300

11.7.3. Динамический компонент………………………………………………………………………………………… 301

11.8. Передача данных в шаблоны: другие способы…………………………………………………………… 302

11.8.1. Разделяемые значения………………………………………………………………………………………………. 302

11.8.2. Составители значений……………………………………………………………………………………………… 303

11.8.3. Создатели значений………………………………………………………………………………………………….. 304

11.9. Обработка статических файлов…………………………………………………………………………………….. 305

Глава 12. Пагинация……………………………………………………………………………. 307

12.1. Автоматическое создание пагинатора…………………………………………………………………………. 307

12.2. Дополнительные параметры пагинатора…………………………………………………………………….. 310

12.3. Настройка отображения пагинатора……………………………………………………………………………. 311

12.4. Создание пагинатора вручную……………………………………………………………………………………… 314

Глава 13. Разграничение доступа: базовые инструменты…………………….. 316

13.1. Настройки подсистемы разграничения доступа…………………………………………………………. 316

13.2. Создание недостающих модулей, реализующих разграничение доступа……………….. 318

13.3. Маршруты, ведущие на контроллеры разграничения доступа…………………………………. 319

13.4. Служебные таблицы и модель………………………………………………………………………………………. 321

13.5. Регистрация новых пользователей………………………………………………………………………………… 322

13.6. Вход на веб-сайт…………………………………………………………………………………………………………….. 325

13.7. Раздел пользователя……………………………………………………………………………………………………….. 327

13.8. Собственно разграничение доступа……………………………………………………………………………… 327

13.8.1. Разграничение доступа: простейшие инструменты………………………………………………. 327

13.8.1.1. Разграничение доступа с помощью посредников………………………………………… 327

13.8.1.2. Разграничение доступа в шаблонах……………………………………………………………… 328

13.8.2. Гейты………………………………………………………………………………………………………………………….. 329

13.8.2.1. Написание гейтов……………………………………………………………………………………………. 329

13.8.2.2. Разграничение доступа посредством гейтов………………………………………………… 330

13.8.2.3. Перехватчики…………………………………………………………………………………………………… 332

13.8.2.4. Гейты с развернутыми ответами……………………………………………………………………. 333

13.8.2.5. Простые гейты…………………………………………………………………………………………………. 334

13.8.3. Политики……………………………………………………………………………………………………………………. 335

13.8.3.1. Создание и регистрация политик…………………………………………………………………… 335

13.8.3.2. Разграничение доступа посредством политик……………………………………………… 338

13.8.3.3. Разграничение доступа в ресурсных контроллерах……………………………………. 341

13.8.4. Разграничение доступа с помощью формальных запросов………………………………….. 341

13.9. Получение сведений о текущем пользователе……………………………………………………………… 342

13.10. Подтверждение пароля………………………………………………………………………………………………… 343

13.11. Выход с веб-сайта………………………………………………………………………………………………………… 344

13.12. Проверка существования адреса электронной почты………………………………………………. 344

13.13. Сброс пароля………………………………………………………………………………………………………………… 347

13.13.1. Отправка электронного письма с гиперссылкой сброса пароля………………………… 347

13.13.2. Собственно сброс пароля………………………………………………………………………………………. 348

13.13.3. Удаление устаревших жетонов сброса пароля……………………………………………………. 349

Глава 14. Обработка строк, массивов и функции-хелперы…………………… 350

14.1. Обработка строк……………………………………………………………………………………………………………… 350

14.1.1. Составление строк……………………………………………………………………………………………………. 351

14.1.2. Сравнение строк и получение сведений о строках………………………………………………… 352

14.1.3. Преобразование строк……………………………………………………………………………………………… 353

14.1.4. Извлечение фрагментов строк………………………………………………………………………………….. 358

14.1.5. Поиск и замена в строках…………………………………………………………………………………………. 360

14.1.6. Обработка путей к файлам………………………………………………………………………………………. 364

14.1.7. Прочие инструменты для обработки строк……………………………………………………………. 365

14.2. Обработка массивов……………………………………………………………………………………………………….. 367

14.2.1. Добавление, правка и удаление элементов массивов……………………………………………. 367

14.2.2. Извлечение элементов массива……………………………………………………………………………….. 369

14.2.3. Проверка существования элементов массивов………………………………………………………. 371

14.2.4. Получение сведений о массиве………………………………………………………………………………… 372

14.2.5. Упорядочивание элементов массивов…………………………………………………………………….. 373

14.2.6. Прочие инструменты для обработки массивов……………………………………………………… 373

14.3. Функции-хелперы……………………………………………………………………………………………………………. 375

14.3.1. Функции, выдающие пути к ключевым папкам……………………………………………………… 376

14.3.2. Служебные функции…………………………………………………………………………………………………. 376

Глава 15. Коллекции Laravel……………………………………………………………….. 380

15.1. Обычные коллекции……………………………………………………………………………………………………….. 380

15.1.1. Создание обычных коллекций…………………………………………………………………………………. 380

15.1.2. Добавление, правка и удаление элементов коллекции…………………………………………. 381

15.1.3. Извлечение отдельных элементов и частей коллекции…………………………………………. 383

15.1.4. Получение сведений об элементах коллекции……………………………………………………….. 389

15.1.5. Перебор элементов коллекции…………………………………………………………………………………. 390

15.1.6. Поиск и фильтрация элементов коллекции…………………………………………………………….. 391

15.1.7. Упорядочивание элементов коллекции…………………………………………………………………… 396

15.1.8. Группировка элементов коллекций…………………………………………………………………………. 398

15.1.9. Агрегатные вычисления в коллекциях…………………………………………………………………….. 399

15.1.10. Получение сведений о коллекции………………………………………………………………………….. 400

15.1.11. Прочие инструменты для обработки коллекций………………………………………………….. 401

15.2. Коллекции, заполняемые по запросу……………………………………………………………………………. 406

15.2.1. Создание коллекций, заполняемых по запросу……………………………………………………… 406

15.2.2. Работа с коллекциями, заполняемыми по запросу………………………………………………… 406

Часть III. Расширенные инструменты
и дополнительные библиотеки…………………………………………….. 409

Глава 16. Базы данных и модели: расширенные инструменты…………….. 411

16.1. Отложенная и немедленная выборка связанных записей…………………………………………… 411

16.2. Выборка наборов записей по частям……………………………………………………………………………. 413

16.3. Фильтрующие связи «многие-со-многими»…………………………………………………………………… 415

16.4. Полиморфные связи………………………………………………………………………………………………………… 417

16.4.1. Создание поля внешнего ключа для полиморфной связи……………………………………… 417

16.4.2. Создание полиморфных связей……………………………………………………………………………….. 418

16.4.2.1. Полиморфная связь «один-со-многими»………………………………………………………… 418

16.4.2.2. Полиморфная связь «один-с-одним из многих»…………………………………………….. 420

16.4.2.3. Полиморфная связь «один-с-одним»………………………………………………………………. 420

16.4.2.4. Полиморфная связь «многие-со-многими»…………………………………………………….. 421

16.4.3. Работа с записями, связанными полиморфной связью………………………………………….. 423

16.4.4. Указание своих типов связываемых записей………………………………………………………….. 424

16.5. Пределы…………………………………………………………………………………………………………………………… 426

16.5.1. Локальные пределы………………………………………………………………………………………………….. 426

16.5.2. Глобальные пределы………………………………………………………………………………………………… 427

16.6. Выполнение «сырых» SQL-запросов…………………………………………………………………………….. 429

16.6.1. «Сырые» вызовы функций СУБД…………………………………………………………………………….. 429

16.6.2. «Сырые» команды SQL…………………………………………………………………………………………….. 429

16.5.3. «Сырые» SQL-запросы целиком………………………………………………………………………………. 431

16.7. Блокировка записей………………………………………………………………………………………………………… 432

16.8. Управление транзакциями……………………………………………………………………………………………… 432

16.8.1. Автоматическое управление транзакциями…………………………………………………………… 433

16.8.2. Ручное управление транзакциями…………………………………………………………………………… 433

16.9. Очистка моделей…………………………………………………………………………………………………………….. 433

Глава 17. Шаблоны: расширенные инструменты
и дополнительные библиотеки…………………………………………………………….. 436

17.1. Библиотека Laravel HTML: создание веб-форм и элементов управления………………… 436

17.1.1. Создание элементов управления…………………………………………………………………………….. 436

17.1.2. Создание веб-форм……………………………………………………………………………………………………. 439

17.1.3. Создание гиперссылок……………………………………………………………………………………………… 441

17.2. Библиотека genert/bbcode: поддержка BBCode…………………………………………………………… 443

17.2.1. Использование библиотеки genert/bbcode………………………………………………………………. 443

17.2.2. Поддерживаемые BBCode-теги……………………………………………………………………………….. 444

17.2.3. Добавление своих BBCode-тегов…………………………………………………………………………….. 445

17.3. Библиотека Captcha for Laravel: поддержка CAPTCHA…………………………………………….. 446

17.3.1. Настройка Captcha for Laravel………………………………………………………………………………… 447

17.3.2. Использование Captcha for Laravel…………………………………………………………………………. 448

17.4. Написание своих директив шаблонизатора………………………………………………………………… 449

17.4.1. Написание простейших директив……………………………………………………………………………. 450

17.4.1.1. Форматировщики объектов…………………………………………………………………………….. 451

17.4.2. Написание условных директив……………………………………………………………………………….. 451

17.5. Пакет Laravel Mix……………………………………………………………………………………………………………. 452

17.5.1. Исходные файлы и их расположение……………………………………………………………………… 453

17.5.2. Конфигурирование Laravel Mix………………………………………………………………………………. 453

17.5.2.1. Обработка таблиц стилей………………………………………………………………………………. 454

17.5.2.2. Обработка веб-сценариев……………………………………………………………………………….. 455

17.5.2.3. Копирование файлов и папок…………………………………………………………………………. 456

17.5.2.4. Мечение файлов………………………………………………………………………………………………. 457

17.5.3. Запуск Laravel Mix……………………………………………………………………………………………………. 458

17.6. Использование Bootstrap……………………………………………………………………………………………….. 459

Глава 18. Обработка выгруженных файлов…………………………………………. 461

18.1. Настройки подсистемы обработки выгруженных файлов………………………………………….. 461

18.2. Создание символических ссылок на папки с выгруженными файлами…………………….. 464

18.3. Хранение выгруженных файлов……………………………………………………………………………………. 465

18.4. Базовые средства для обработки выгруженных файлов…………………………………………….. 465

18.4.1. Валидаторы для выгруженных файлов………………………………………………………………….. 465

18.4.2. Получение выгруженных файлов……………………………………………………………………………. 467

18.4.3. Получение сведений о выгруженных файлах………………………………………………………… 467

18.4.4. Сохранение выгруженных файлов………………………………………………………………………….. 468

18.4.5. Выдача выгруженных файлов посетителям…………………………………………………………… 470

18.4.5.1. Вывод выгруженных файлов………………………………………………………………………….. 470

18.4.5.2. Реализация загрузки выгруженного файла…………………………………………………… 471

18.4.6. Удаление выгруженных файлов………………………………………………………………………………. 472

18.5. Расширенные средства для работы с выгруженными файлами…………………………………. 472

18.5.1. Чтение из файлов и запись в них……………………………………………………………………………… 473

18.5.2. Получение сведений о файле…………………………………………………………………………………… 473

18.5.3. Прочие манипуляции с файлами……………………………………………………………………………… 474

18.5.4. Работа с папками………………………………………………………………………………………………………. 475

18.6. Библиотека bkwld/croppa: вывод миниатюр………………………………………………………………… 475

18.6.1. Настройки библиотеки bkwld/croppa……………………………………………………………………… 476

18.6.2. Использование библиотеки bkwld/croppa………………………………………………………………. 478

18.6.3. Удаление миниатюр…………………………………………………………………………………………………. 481

Глава 19. Безопасность и разграничение доступа:
расширенные инструменты и дополнительная библиотека………………….. 482

19.1. Низкоуровневые средства для работы с пользователями…………………………………………… 482

19.1.1. Низкоуровневые средства для регистрации пользователей…………………………………. 482

19.1.2. Низкоуровневые средства для входа………………………………………………………………………. 483

19.1.3. Низкоуровневые средства для выполнения выхода………………………………………………. 485

19.1.4. Низкоуровневые средства для подтверждения пароля…………………………………………. 485

19.1.5. Низкоуровневые средства для проверки существования адреса
электронной почты……………………………………………………………………………………………………………….. 486

19.1.6. Низкоуровневые средства для сброса пароля……………………………………………………….. 487

19.1.7. Корректная правка пароля………………………………………………………………………………………. 490

19.2. Библиотека Laravel Socialite: вход через сторонние интернет-службы…………………….. 491

19.2.1. Создание приложения «ВКонтакте»……………………………………………………………………….. 491

19.2.2. Установка и настройка Laravel Socialite…………………………………………………………………. 493

19.2.3. Использование Laravel Socialite………………………………………………………………………………. 494

19.2.3.1. Действие первое: обращение к сторонней интернет-службе………………………. 495

19.2.3.2. Действие второе: поиск (регистрация) пользователя и вход……………………….. 495

19.2.3.3. Завершающие операции: создание маршрутов и гиперссылки входа……….. 496

19.3. Защита от атак CSRF……………………………………………………………………………………………………… 497

19.4. Ограничители частоты запросов…………………………………………………………………………………… 498

19.4.1. Простейшие ограничители частоты запросов……………………………………………………….. 498

19.4.2. Именованные ограничители частоты запросов…………………………………………………….. 499

19.4.3. Низкоуровневые ограничители частоты запросов………………………………………………… 501

Глава 20. Внедрение зависимостей, провайдеры и фасады…………………… 504

20.1. Внедрение зависимостей………………………………………………………………………………………………… 504

20.1.1. Простейшие случаи внедрения зависимостей………………………………………………………… 504

20.1.2. Управление внедрением зависимостей…………………………………………………………………… 506

20.1.2.1. Простая регистрация классов и объектов……………………………………………………… 506

20.1.2.2. Подмена классов и реализации……………………………………………………………………… 509

20.1.2.3. Гибкая подмена классов и реализации…………………………………………………………. 510

20.1.2.4. Гибкая регистрация значений произвольного типа……………………………………… 511

20.1.2.5. Переопределение регистрации………………………………………………………………………. 512

20.1.2.6. Вызов методов и функций, в которых используется внедрение зависимостей 512

20.1.2.7. Подмена методов…………………………………………………………………………………………….. 514

20.2. Провайдеры…………………………………………………………………………………………………………………….. 515

20.2.1. Список провайдеров, используемых веб-сайтом…………………………………………………… 515

20.2.2. Создание своих провайдеров…………………………………………………………………………………… 517

20.3. Фасады…………………………………………………………………………………………………………………………….. 518

Глава 21. Посредники………………………………………………………………………….. 520

21.1. Посредники, используемые веб-сайтом………………………………………………………………………… 520

21.1.1. Управление очередностью выполнения посредников…………………………………………… 523

21.1.2. Параметры посредников………………………………………………………………………………………….. 523

21.2. Написание своих посредников………………………………………………………………………………………. 523

21.2.1. Как исполняется посредник?……………………………………………………………………………………. 523

21.2.2. Создание посредников……………………………………………………………………………………………… 524

21.2.3. Посредники с завершающими действиями……………………………………………………………… 526

 

Глава 22. События и их обработка……………………………………………………….. 528

22.1. События-классы……………………………………………………………………………………………………………… 528

22.1.1. Обработка событий-классов: слушатели……………………………………………………………….. 528

22.1.1.1. Создание слушателей-классов………………………………………………………………………. 528

22.1.1.2. Явная привязка слушателей-классов к событиям………………………………………… 530

22.1.1.3. Автоматическая привязка слушателей-классов к событиям……………………….. 531

22.1.1.4. Слушатели-функции……………………………………………………………………………………….. 532

22.1.1.5. Просмотр списков слушателей, привязанных к событиям-классам…………… 532

22.1.2. Обработка событий-классов: подписчики……………………………………………………………… 533

22.1.3. События-классы, поддерживаемые фреймворком…………………………………………………. 534

22.1.3.1. События подсистемы разграничения доступа……………………………………………… 534

22.1.3.2. События других подсистем…………………………………………………………………………….. 536

22.1.4. Создание и использование своих событий-классов………………………………………………. 536

22.1.4.1. Создание событий-классов…………………………………………………………………………….. 536

22.1.4.2. Создание событий-классов и их слушателей……………………………………………….. 537

22.1.4.3. Генерирование своих событий………………………………………………………………………. 538

22.2. События-строки………………………………………………………………………………………………………………. 538

22.2.1. Привязка обработчиков к событиям-строкам………………………………………………………… 539

22.2.2. Генерирование событий-строк………………………………………………………………………………… 539

22.3. События моделей……………………………………………………………………………………………………………. 540

22.3.1. Обработка событий моделей…………………………………………………………………………………… 540

22.3.1.1. Обработка событий моделей посредством слушателей-функций………………. 540

22.3.1.2. Связывание событий моделей с событиями-классами…………………………………. 540

22.3.1.3. Использование обозревателей……………………………………………………………………….. 541

22.3.2. Список событий моделей…………………………………………………………………………………………. 542

22.3.3. Временное отключение событий в моделях…………………………………………………………… 543

Глава 23. Отправка электронной почты………………………………………………. 544

23.1. Настройки подсистемы отправки электронной почты……………………………………………….. 544

23.2. Создание электронных писем………………………………………………………………………………………… 547

23.2.1. Создание классов электронных писем……………………………………………………………………. 547

23.2.2. Генерирование электронных писем………………………………………………………………………… 548

23.2.3. Написание шаблонов электронных писем……………………………………………………………… 551

23.2.4. Написание электронных писем на языке Markdown……………………………………………… 552

23.2.4.1. Классы писем, написанных на Markdown…………………………………………………….. 552

23.2.4.2. Написание шаблонов писем на Markdown…………………………………………………… 552

23.2.4.3. Управление генерированием писем, написанных на Markdown………………… 553

23.3. Отправка электронных писем………………………………………………………………………………………… 555

23.4. Предварительный просмотр электронных писем………………………………………………………… 556

23.5. События, генерируемые при отправке электронных писем………………………………………… 557

23.6. Доступ к письмам, отправленным посредством службы array…………………………………… 557

Глава 24. Оповещения…………………………………………………………………………. 558

24.1. Создание оповещений…………………………………………………………………………………………………….. 558

24.2. Написание оповещений………………………………………………………………………………………………….. 560

24.2.1. Почтовые оповещения………………………………………………………………………………………………. 560

24.2.1.1. Генерирование простых почтовых оповещений………………………………………….. 560

24.2.1.2. Генерирование почтовых оповещений на основе текстовых
и HTML-шаблонов…………………………………………………………………………………………………………. 562

24.2.1.3. Генерирование почтовых оповещений на основе Markdown-шаблонов…… 562

24.2.1.4. Указание адреса получателя…………………………………………………………………………. 563

24.2.2. SMS-оповещения……………………………………………………………………………………………………….. 563

24.2.2.1. Подготовительные действия и настройка службы SMS-оповещений………… 563

24.2.2.2. Генерирование произвольных SMS-оповещений…………………………………………. 564

24.2.2.3. Указание телефона получателя……………………………………………………………………… 565

24.2.3. Slack-оповещения……………………………………………………………………………………………………… 565

24.2.3.1. Генерирование Slack-оповещений…………………………………………………………………. 565

24.2.3.2. Добавление вложений…………………………………………………………………………………….. 566

24.2.3.3. Указание интернет-адреса получателя…………………………………………………………. 568

24.2.4. Табличные оповещения……………………………………………………………………………………………. 568

24.2.4.1. Создание таблицы для хранения табличных оповещений………………………….. 568

24.2.4.2. Генерирование табличных оповещений……………………………………………………….. 569

24.2.5. Оповещения, отправляемые по нескольким каналам…………………………………………….. 570

24.3. Отправка оповещений…………………………………………………………………………………………………….. 570

24.3.1. Отправка оповещений произвольным получателям……………………………………………… 571

24.4. Предварительный просмотр почтовых оповещений…………………………………………………… 571

24.5. Работа с табличными оповещениями……………………………………………………………………………. 571

24.6. События, генерируемые при отправке оповещений…………………………………………………….. 573

Глава 25. Очереди и отложенные задания……………………………………………. 574

25.1. Настройка подсистемы очередей………………………………………………………………………………….. 574

25.1.1. Настройка самих очередей……………………………………………………………………………………… 574

25.1.2. Подготовка таблиц для хранения отложенных заданий………………………………………. 577

25.1.3. Настройка баз данных Redis……………………………………………………………………………………. 578

25.2. Отложенные задания-классы…………………………………………………………………………………………. 579

25.2.1. Создание отложенных заданий-классов………………………………………………………………… 579

25.2.1.1. Создание отложенных заданий-классов: базовые инструменты……………….. 579

25.2.1.2. Параметры отложенных заданий-классов……………………………………………………. 581

25.2.1.3. Обработка ошибок в отложенных заданиях-классах………………………………….. 583

25.2.1.4. Взаимодействие с очередью…………………………………………………………………………… 584

25.2.1.5. Уникальные задания……………………………………………………………………………………….. 584

25.2.1.6. Неотложные задания………………………………………………………………………………………. 586

25.2.2. Запуск отложенных заданий-классов…………………………………………………………………….. 586

25.3. Отложенные задания-функции………………………………………………………………………………………. 587

25.4. Цепочки отложенных заданий………………………………………………………………………………………. 588

25.5. Специфические разновидности отложенных заданий………………………………………………… 589

25.5.1. Отложенные слушатели событий……………………………………………………………………………. 589

25.5.2. Отложенные электронные письма…………………………………………………………………………… 591

25.5.3. Отложенные оповещения…………………………………………………………………………………………. 593

25.6. Выполнение отложенных заданий………………………………………………………………………………… 594

25.6.1. Запуск обработчика отложенных заданий…………………………………………………………….. 594

25.6.2. Работа с проваленными заданиями………………………………………………………………………… 596

25.6.3. Очистка очереди заданий………………………………………………………………………………………… 597

25.7. Пакеты отложенных заданий………………………………………………………………………………………… 597

25.7.1. Подготовка таблицы для хранения пакетов отложенных заданий……………………… 598

25.7.2. Создание отложенных заданий, пригодных для использования в пакетах………… 598

25.7.3. Создание и запуск пакетов отложенных заданий………………………………………………….. 598

25.7.4. Взаимодействие с выполняющимся пакетом………………………………………………………….. 600

25.7.5. Получение сведений о пакете………………………………………………………………………………….. 601

25.7.6. Выполнение пакетов отложенных заданий……………………………………………………………. 602

25.8. Посредники отложенных заданий…………………………………………………………………………………. 603

25.8.1. Ограничение частоты выполнения заданий…………………………………………………………… 603

25.8.2. Предотвращение наложения заданий…………………………………………………………………….. 604

25.8.3. Отложенное выполнение ошибочных заданий………………………………………………………. 605

25.9. События, генерируемые при выполнении отложенных заданий……………………………….. 607

Глава 26. Cookie, сессии, всплывающие сообщения и криптография…… 609

26.1. Cookie………………………………………………………………………………………………………………………………. 609

26.1.1. Настройки cookie………………………………………………………………………………………………………. 609

26.1.2. Создание cookie………………………………………………………………………………………………………… 609

26.1.3. Считывание cookie……………………………………………………………………………………………………. 611

26.1.4. Удаление cookie………………………………………………………………………………………………………… 612

26.2. Сессии………………………………………………………………………………………………………………………………. 612

26.2.1. Подготовка к работе с сессиями………………………………………………………………………………. 613

26.2.1.1. Настройки сессий……………………………………………………………………………………………. 613

26.2.1.2. Создание таблицы для хранения сессий……………………………………………………….. 614

26.2.2. Работа с сессиями……………………………………………………………………………………………………… 615

26.2.2.1. Запись данных в сессию и их изменение……………………………………………………….. 615

26.2.2.2. Чтение данных из сессии………………………………………………………………………………… 616

26.2.2.3. Удаление данных из сессии……………………………………………………………………………. 616

26.2.2.4. Блокировка сессий…………………………………………………………………………………………… 617

26.2.2.5. Предотвращение сетевых атак на сессии……………………………………………………… 617

26.3. Всплывающие сообщения……………………………………………………………………………………………… 618

26.4. Криптография………………………………………………………………………………………………………………….. 619

26.4.1. Шифрование данных………………………………………………………………………………………………… 619

26.4.2. Хеширование и сверка паролей………………………………………………………………………………. 620

26.4.2.1. Настройки хеширования………………………………………………………………………………… 620

26.4.2.2. Хеширование и сверка…………………………………………………………………………………….. 620

26.4.3. Генерирование подписанных интернет-адресов…………………………………………………… 621

Глава 27. Планировщик заданий…………………………………………………………. 624

27.1. Создание заданий планировщика…………………………………………………………………………………. 624

27.1.1. Как пишутся задания планировщика?……………………………………………………………………. 624

27.1.2. Параметры заданий планировщика………………………………………………………………………… 626

27.1.2.1. Расписание запуска заданий………………………………………………………………………….. 626

27.1.2.2. Дополнительные параметры заданий…………………………………………………………… 628

27.1.3. Обработка вывода, генерируемого заданиями планировщика…………………………….. 630

27.1.4. Исполнение указанного кода перед выполнением задания и после него……………. 631

27.1.5. Отправка сигналов по указанным интернет-адресам……………………………………………. 631

27.2. Работа с заданиями планировщика………………………………………………………………………………. 632

27.2.1. Запуск планировщика заданий……………………………………………………………………………….. 632

27.2.1.1. Запуск с использованием штатного планировщика
операционной системы………………………………………………………………………………………………….. 632

27.2.1.2. Запуск в независимом режиме………………………………………………………………………… 634

27.2.2. Вывод списка заданий планировщика……………………………………………………………………. 634

27.2.3. Удаление распределенных блокировок………………………………………………………………….. 635

27.3. События, генерируемые при выполнении заданий планировщика……………………………. 635

Глава 28. Локализация…………………………………………………………………………. 636

28.1. Быстрая локализация……………………………………………………………………………………………………… 636

28.2. Локализация с применением обозначений…………………………………………………………………… 637

28.2.1. Подстановка параметров в переведенные строки…………………………………………………. 639

28.2.2. Вывод существительных во множественном числе……………………………………………….. 639

28.2.3. Локализация сообщений об ошибках ввода…………………………………………………………… 641

28.3. Реализация переключения на другой язык…………………………………………………………………… 642

28.4. Библиотека Laravel Lang: локализация на множество языков…………………………………… 644

Глава 29. Кеширование………………………………………………………………………… 646

29.1. Кеширование на стороне сервера…………………………………………………………………………………. 646

29.1.1. Подготовка подсистемы кеширования……………………………………………………………………. 646

29.1.1.1. Настройка подсистемы кеширования……………………………………………………………. 646

29.1.1.2. Создание таблицы для хранения кеша………………………………………………………….. 648

29.1.2. Работа с кешем стороны сервера…………………………………………………………………………….. 649

29.1.2.1. Сохранение данных в кеше и их правка……………………………………………………….. 649

29.1.2.2. Чтение данных из кеша…………………………………………………………………………………… 650

29.1.2.3. Удаление данных из кеша………………………………………………………………………………. 651

29.1.3. Распределенные блокировки……………………………………………………………………………………. 652

29.1.3.1. Немедленные распределенные блокировки………………………………………………….. 652

29.1.3.2. Распределенные блокировки с ожиданием…………………………………………………… 654

29.1.3.3. Передача распределенных блокировок между процессами……………………….. 655

29.1.4. События, генерируемые кешем………………………………………………………………………………… 656

29.2. Кеширование на стороне клиента…………………………………………………………………………………. 657

Глава 30. Разработка веб-служб……………………………………………………………. 658

30.1. Бэкенды: преобразование данных — базовые инструменты……………………………………… 658

30.1.1. Выдача данных в формате JSON…………………………………………………………………………….. 659

30.1.2. Задание структуры генерируемых JSON-объектов……………………………………………….. 661

30.2. Бэкенды: преобразование данных — ресурсы и ресурсные коллекции……………………. 664

30.2.1. Ресурсы………………………………………………………………………………………………………………………. 664

30.2.1.1. Написание ресурсов……………………………………………………………………………………….. 664

30.2.1.2. Задание структуры JSON-объектов, генерируемых ресурсами………………….. 665

30.2.1.3. Дополнительные параметры ресурсов………………………………………………………….. 668

30.2.1.4. Использование ресурсов…………………………………………………………………………………. 669

30.2.2. Ресурсные коллекции……………………………………………………………………………………………….. 670

30.2.2.1. Быстрое JSON-кодирование коллекции записей…………………………………………… 670

30.2.2.2. Написание ресурсных коллекций………………………………………………………………….. 670

30.2.2.3. Пагинация в ресурсных коллекциях………………………………………………………………. 673

30.3. Бэкенды: обработка данных………………………………………………………………………………………….. 674

30.3.1. Выдача записей………………………………………………………………………………………………………… 674

30.3.2. Добавление, правка и удаление записей………………………………………………………………… 674

30.3.3. Совмещенная обработка данных……………………………………………………………………………. 676

30.4. Бэкенды: разграничение доступа………………………………………………………………………………….. 676

30.5. Фронтенды: взаимодействие с бэкендами……………………………………………………………………. 679

30.6. Фронтенды: использование React и Vue………………………………………………………………………. 681

Глава 31. Вещание……………………………………………………………………………….. 683

31.1. Бэкенд: подготовка подсистемы вещания…………………………………………………………………….. 683

31.1.1. Настройка подсистемы вещания…………………………………………………………………………….. 683

31.1.2. Подготовка проекта к реализации вещания…………………………………………………………… 685

31.1.3. Установка и настройка Laravel Websockets…………………………………………………………… 685

31.2. Бэкенд: вещаемые события и оповещения……………………………………………………………………. 687

31.2.1. Вещаемые события…………………………………………………………………………………………………… 687

31.2.1.1. Вещаемые события моделей…………………………………………………………………………… 690

31.2.2. Вещаемые оповещения…………………………………………………………………………………………….. 693

31.3. Бэкенд: каналы вещания………………………………………………………………………………………………… 695

31.3.1. Общедоступные каналы вещания……………………………………………………………………………. 695

31.3.2. Закрытые каналы вещания………………………………………………………………………………………. 695

31.3.3. Каналы присутствия…………………………………………………………………………………………………. 697

31.4. Фронтенд: прослушивание каналов вещания………………………………………………………………. 699

31.4.1. Использование Laravel Echo……………………………………………………………………………………. 699

31.4.2. Прослушивание общедоступных каналов……………………………………………………………… 701

31.4.3. Прослушивание закрытых каналов………………………………………………………………………… 703

31.4.4. Прослушивание каналов присутствия……………………………………………………………………. 703

31.4.5. Отправка произвольных уведомлений……………………………………………………………………. 704

31.5. Запуск вещания……………………………………………………………………………………………………………….. 705

Глава 32. Команды утилиты artisan……………………………………………………… 706

32.1. Получение сведений о командах утилиты artisan……………………………………………………….. 706

32.2. Команды-классы…………………………………………………………………………………………………………….. 707

32.2.1. Создание команд-классов………………………………………………………………………………………… 707

32.2.2. Описание формата вызова команд………………………………………………………………………….. 709

32.2.3. Получение значений аргументов…………………………………………………………………………….. 711

32.2.4. Получение данных от пользователя……………………………………………………………………….. 712

32.2.5. Вывод данных…………………………………………………………………………………………………………… 713

32.2.5.1. Вывод индикатора процесса………………………………………………………………………….. 714

32.2.6. Вызов из команды других команд…………………………………………………………………………… 715

32.2.7. Регистрация команд-классов……………………………………………………………………………………. 716

32.3. Команды-функции…………………………………………………………………………………………………………… 716

32.4. Программный вызов команд………………………………………………………………………………………….. 718

32.5. События утилиты artisan………………………………………………………………………………………………… 718

Глава 33. Обработка ошибок……………………………………………………………….. 719

33.1. Настройка веб-страниц с сообщениями об ошибках………………………………………………….. 719

33.2. Создание и использование своих исключений…………………………………………………………….. 720

33.2.1. Создание своих исключений……………………………………………………………………………………. 720

33.2.2. Возбуждение своих исключений……………………………………………………………………………… 722

33.3. Настройка обработки существующих исключений……………………………………………………. 723

33.4. Подавление исключений………………………………………………………………………………………………… 725

Глава 34. Журналирование и дополнительные средства отладки…………. 728

34.1. Подсистема журналирования………………………………………………………………………………………… 728

34.1.1. Настройка подсистемы журналирования………………………………………………………………. 728

34.1.2. Занесение записей в журнал……………………………………………………………………………………. 731

34.1.2.1. Разделяемая дополнительная информация…………………………………………………… 732

34.1.3. Событие, генерируемое при занесении записи в журнал……………………………………… 733

34.2. Дополнительные средства отладки………………………………………………………………………………. 733

Глава 35. Публикация веб-сайта………………………………………………………….. 735

35.1. Подготовка веб-сайта к публикации…………………………………………………………………………….. 735

35.1.1. Удаление ненужного кода и данных………………………………………………………………………. 735

35.1.2. Настройка под платформу публикации…………………………………………………………………. 736

35.1.3. Переключение в режим эксплуатации…………………………………………………………………….. 736

35.1.4. Задание списка доверенных прокси-серверов……………………………………………………….. 736

35.1.5. Задание списка доверенных хостов………………………………………………………………………… 737

35.1.6. Компиляция шаблонов……………………………………………………………………………………………… 738

35.1.7. Кеширование маршрутов…………………………………………………………………………………………. 738

35.1.8. Кеширование настроек…………………………………………………………………………………………….. 739

35.1.9. Кеширование обработчиков событий…………………………………………………………………….. 739

35.1.10. Приведение таблиц стилей и веб-сценариев к виду,
оптимальному для публикации…………………………………………………………………………………………… 740

35.2. Перенос веб-сайта на платформу для публикации……………………………………………………… 740

35.3. Настройка веб-сервера и запуск сторонних программ……………………………………………….. 741

35.4. Режим обслуживания……………………………………………………………………………………………………… 741

Заключение………………………………………………………………………………………….. 744

Приложение. Описание электронного архива………………………………………. 746

Предметный указатель…………………………………………………………………………. 747

Добавить комментарий