Laravel. Полное руководство [Мэтт Стаффер] (pdf) читать онлайн

Книга в формате pdf! Изображения и текст могут не отображаться!


 [Настройки текста]  [Cбросить фильтры]

arave

Полное р

~nnTEP®

КОВОДСТВО

Мэтт Стаффер

SECOND EDITION

Laravel: Up &Running
А

Framework for Building Modern

РНР Apps

Matt Stauffer

Beijing • Boston • Farnham • Sebastopol • Т okyo

0°REILLY

МэпСтаффер

Larave[
Полное руководство
2-е издание

~nnТEP®
Санкт-Петербург

• Москва • Екатеринбург • Воронеж

Нижний Новгород. Ростов-на-Дону

Самара

• Минск

2020

Мэтт Стаффер

Laravel.

Полное руководство. 2-е издание
Серия «Бестселлеры

O'Reilly»

Перевел с английского Владимир Сауль
Заведующая редакцией

Ю. Сергuенко
С.Давид

Руководитель проекта
Ведущий редактор

Н. Гринчик
Н. Васильева

Художественный редактор

Литературные редакторы

В. Баiiдук, А. Дvбейко

Корректоры

О. Андриев11ч. Е. Павлонич

Верстка

ББК
УДК

Г. Б7инов

32.988.02-018
004.738.5

Стаффер Мэп
С78

Laгavel. Полное руководство. 2-е изд.
рия «Бестселлеры

-

СПб.: Питер,

2020. -

512

с.: ил.

-

(Се­

O'Reilly»).

ISBN 978-5-4461-1396-5
Что отличает Laravel от дру1·их РНР-фреймворков? Скорость и простота. Стремительная разработка прило­
жений, обширная жосистсма и набор инструментов Laravel 1юзволяют быстро создавать сайты и приложения,

отличающиеся чистым у11обочитасмым колом.
Мэтт Стаффер, известный 11ре11011аватель и вс;1ущий разработчик, предлагает как общий обзор фрсймворка,
так и конкретные 11римсры работы с ним. Опытным РНР-разработчнкам книга поможет быстро войти в новую
тему, чтобы реализовать r1роскт на Laravcl. В из11ании также раскрыты темы Laravel Dusk и Horizon, собрана
информация о ресурсах сообщества и 11ругих 11акстах, нс входящих в ядро Laravcl.

16+ (В соответствии с Федеральным законом от 29 декабря 2010 г. № 436-ФЗ.)
ISBN 978-1492041214 англ.

Authoгized

Russian tгanslation of the English edition of Laгavel: Up and Running,
2nd Edition. ISBN 9781492041214 © 2019 Matt Stauffeг
This tгanslation is puЫished and sold Ьу peгmission of O'Reilly Media, lnc .. which
owns ог controls all rights to puЫish and sell the same.
©Перевод на русский язык ООО Издательство «Питер», 2020
©Издание на русском языке, оформление ООО Издательство «Питер», 2020
©Серия «Бестселлеры O'Reilly», 2020

ISBN 978-5-4461-1396-5

Права на издание получены

no соглашению с O'Reilly. Все nрава защищены. Никакая часть данной книги не может

быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав.
Информация, содержащаяся в данной книге, получена из источников, рассматриваемых издательством как на­
дежные. Тем не менее, имея в виду возможные человеческие или технические ошибки, издательство не может
гарантировать абсолютную точность и полноту приводимых сведений и не несет ответственности за возможные
ошибки. связанные с использованием книги. Издательство не несет ответственности за доступность материалов,
ссылки на которые вы можете найти в этой книге. На момент подготовки книги к изданию все ссылки на интернет­

ресурсы были действующими.

И·1готомено в России. И1готовитель: ООО

194044,

«llporpecc

книга». Место 11ахождсния и фактический адрес:

Россия, i: Са11кт-Петербург, Б. Сампсо11иевский пр., д. 29А, пом.

Дата и1готовле11ия:

12.2019.

52.

Тел.:

+78127037373.

Наиме11ование: книжная продукции. Срок годности: не о~·раничен.

Налоговая льr·ота -·общероссийский классификатор продукции ОК

034-2014, 58.11.12 -

Книги печат11ые

nрофессио11алы1ые, тех11ическне и 11ауч11ые.
Импортер в Беларусь: ООО «ПИТЕР М»,
!lодписа1ю в пе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
Внедрение сервиса

Пользовательские директивы

Базы данных и

Eloquent "...... "."" ... " ....... " .................................... " .......... ".................. 108
.............................................................................................................................. 108
Подключения базы данных ............................................................................................... 109
Другие параметры конфигурации базы данных ... " ............. "................................ ".. 110
Миграции ....................................................................................................................................... 11 О
Определение миграций ....................................................................................................... 111
Запуск миграций ................................................................................................................... 117
I lаполнение базы данными .... " .......................... " ............................................... "................... 118
Создание сидера ..................................................... ".......... " ................................................. 119
Фабрики моделей .................................................................................................................. 120
Генератор запросов ..................................................................................................................... 124
Стандартное использование фасада DB " .................................. " ............. ".................. 125
Чистый SQL ..................................................................................................... " ..................... 126
Выстраивание цепочки с генератором запросов ........................................................ 127
Транзакции .............................................................................................................................. 135
Введение в Eloquent .................................................................................................................... 136
Создание и определение моделей Eloquent ... "............................... " ..................... " .... 138
Получение данных с помощью Eloquent .............. " .... " ................................................ 139
Вставки и обновления с помощью Eloquent ................................................................ 141
Удаление с помощью Eloquent ...... "" ..... " ........... "....... ".................................................. 145
Области видимости .............................................................................................................. 14 7

Глава

5.

Конфигурация

Настройка взаимодействия полей с аксессорами, мутаторами

и приведением атрибутов .... """ .. " ... "............ ""."""" ........ " ............................................. 150

Eloquent ............................................................................................................. 154
Eloquent ........... "."." ... "" ............................................................................ 156
Связи в Eloquent ................................................................................................................... 158
Обновление меток времени родительской записи дочерними записями ......... 170
Коллекции

Сериализация

10

Оглавление

События Eloquent" ... " .. "" ... " ... ""." .. "." ... """."" .... "."" .. "" .. """" .. " ... ""."""."."." .. """" ... ""172
Тестирование

.. "".""" ..... "" .. " .... """".""."." .. """ .. """." .. """."""."" .. """.".""""".".""""." ... 174

Резюме"""".""" ........ """ ... """"".".".""."".""" .. "." .. ""." .. """""."""""."" .... """.""""""."." ... 176

Глава 6. Компоненты !(ЛЯ клиентской части""""""""""""."""""""""."."""""""."""""""177

I..aravel Mix .... """."" .... "" ..... "... "...... ".""." ... "."."." .... " .. """.".""" ..... ".... ".""."." ... ""." ... ".""177
Структура каталога Mix ."." ... """"".""""."." .. ".""""."." ...... """ ... ".""."." ... """" .. ".""179
Запуск Mix.".""." ... "... "" .... "" ....... ""."" ... """ .... "." .... "."." ... """ .. "".""." .... """".""."."" .. 179
Что предоставляет Mix ... """" .. "" .... " ... "" .. "."." .... """ .... "." .. ".""." .. "."."""."."."""." .. 180
Предустановки клиентской части и генерация кода аутентификации .""""""""".186
Предустановки клиентской части."""."." .. "." .. ".""" ... """" .... ".""." .. ".. "."""."."."."187
Генерация кода аутентификации """"""" .. """"" .. "".""""."""""".""."."""""""".""188
Разбивка на страницы".""""""""""" .. """" ... """ .. """""."."."""."." .. """""".""""".""."" .. 188
Разбивка на страницы рсэультатов из базы данных .. "".""""""."""""".""""""""188
Создание разбивщиков страниц вручную"".""""".""."."""""""""."""""""""""".189
Пакеты сооб1цений ..... "" .. "." ... "" .... "."" ...... "...... "" .... """" .. """ ....... "."""".""."" .... """ ... "... 190
Строковые хелперы, множественность и локализация"".""""".""""."""""""""""".192

Строковые хелперы и множественность """"""""".""""""."".""."""""""."""".""192
Локализация .""" .... """ .. """"" ..... "." .. "."""" .. """." ... "." ... "." .. """."" .. """."""" ... "".".".193
Тестирование

.. """"".".""" ...... ".""." .. "." .. ""."." .. "".".""."" ... "."""""."" .. "" .... ""."" .. "." ..... 196
Тестирование пакетов сообщений и ошибок """""""."""""""""""""""."""."""".196
Перевод и локализация." ..... ".. " .. "."""""""".""."" .. ""." .. """""."" .. """"""."" .. "."" .... 197
Резюме"" ... ".""." ... ".. "" ..... "" .. " ...... ""." .. "."" .... "" .... """"" .. """ ... " .. "".""""."" .. " ... """"."" ... 197

Глава 7. Получение и обработка пользовательских данных ".""""."""""""""""""""""198
Внедрение объекта запроса" ....... ""." .. "."." .... "..... " ... """ .. """" .... """ .... """""" .. """" .. """198

$request->all() .""."" ... """"" .. " .. """." .. ""." .. "" .. " ..... "... "."" ....... ""."." ... """."" ..... " ... "".199
$request->except() и $1·cquest->only()"" .. "" ..... "."" ... ""." ...... "" ... """" .. "." .... "" ..... "199
$request->has() ...................................................................................................................... 200
$request->input() .""" .. " ... ""." .. """" .. ".""." .. """."."""".""""""""" ... " ... "."".".".""."".200
$request->шethod() и ->isMethod() .. """"."""" .. "."""." .. ""." .. " ... "."."."""" ... """ .... 201
Ввод массива ........................................................................................................................... 201
BвoдJSON (и $reqнcst->jsoп()) """"""""""""".""."."""."."".""""."""""""."".".""201
Маршрут11ые да1111ыс .................................................................................................................. 203

Из

Request ............................................................................................................................... 203
Из параметров маршрута """."" ... ".. "" ..... "" ... ".""" .. ""."."""." .... ""."""" .... " .. "."."" .. 203
Загруженные файлы" .... "" ... " .. "" .. "" .... " ... "" ... "" .... " .. "." .. "."" .. " .... " .. """""""" ... "."" .. "" .. 203
Валидация ..................................................................... " ....................... "...................................... 206
Метод validate() объекrа Reчuest"."." ...... "" ....... "."""." ... " .. """ .. """"" .. """.""." .. " .. 206
Ручная валидация ............................. " .................................................. ".............................. 208

Оглавление

11

Объекты пользовательских правил ................................................................................ 208
Отображение валидационных сообщений ................................................................... 209
Запросы формы ......................................................... " ................................................................. 209

Создание запроса формы

................................................................................................... 210
Использование запроса формы ........................................................................................ 211
Модель массового назначения Eloquent .......... "....... "......... " ............................................. 212
Синтаксис {{и {!!." ...................................................................." .................................. " ............. 213
Тестирование ................................................................................................................................ 213
Резюме ............................................................................................................................................. 215
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

fлава 8. Интерфейсы

Введение в интерфейс

fлава

9. Аутентификация и авторизация пользователей .................................................... 234

Модель

User и

миграция ........................................................................................................... 235

Использование глобального хелпера auth() и фасада

Auth ......................................... 238

Контроллеры аутентификации ............................................................................................... 239

Контроллер

RegisterController ......................................................................................... 239

Контроллер l,ogiпController .............................................................................................. 240

Контроллер

ResetPasswordController ............................................................................ 242
Контроллер ForgotPasswordController ......................................................................... 242
Контроллер Verif"icatioпController .................................................................................. 243
Метод Auth::routes() .........."........................................................................................................ 243
Каркас аутентификации ............................................................................................................ 244
Токен •Запомнить меня~ .......................................................................................................... 245

Оглавление

12

Выполнение вручную аутентификации пользователей

.""." ...... " ............ " .. "." ... " ...... 246
Выполнение вручную выхода пользователя из системы .............................................. 247
auth ................................................................................................................................................... 248
Верификация адресов электронной почты " ...................................................................... 249
Вlасlе-директивы для аутентификации ........... " ...................................................... " ........... 249
Гарды ................................................................................................................................................ 250
Указание другого гарда по умолчанию ....... " .. "."."" .... "" ........... ".................... " ......... 250
Использование других гардов без изменения базового ....... "" ........................ "... "251
Добавление нового гарда .................................................................................................... 251
Гарды на основе замыкания запроса ....... " .. "" .... "... "" .... " ... "...... " ... "....... "" ........ "" ... 252
Создание собственного провайдера пользователей .. " ...................................... " ...... 252
Собственные провайдеры пользователей для нереляционных
баз данных

..... " ....................... " ................. " ........................................... " .................. "...... " ... 253

События аутентификации ........................................................................................................ 253
Система авторизации (список управления доступом) и роли

." ....................... "..... ".25-1

Определение правил авторизации .................................................................................. 255

Фасад

Gate (и

его внедрение) .................................................. ".......................... "........... 256

Ресурсы гейтов .............. "........ " ............................................. " ........... " ...... "... ".................... 256
Authorize ................................................................................................................................... 257
Авторизация внутри контроллера ." .... " .......................................................... " ...... " ..... 257
Проверка с помощью экземпляра класса User "...... "................. "."" ... "...... "....... "... 259
Проверки с помощью Вlаdе-директив ........................................................................... 260
Перехват проверок ................................................................................................................ 260
Политики ................ " ................. "............... " ................ " .......... ".... "" ...... " ................ "........... 261
Тестирование .................................... " ..... "..... " ...... " ............................ "...... "."" ... " .................... 263
Резюме ............................................................................................................................................. 266

Глава

10.

Запросы, ответы и

middleware ...... "" ... "" ... " .... " ........... "".""" .. "" .. "."." ......... "."".267
I..aravel ...................................................................................... 267
Начальная загрузка приложения ....................... "." .... ""." ............... " ............................ 267
Сервис-провайдеры .............................................................................................................. 269
Объект Request ...................................................................... " ..... " .... " .... " ............ ".................... 271
Получение объекта Request в I..aravel .""" ... "".""""""."""" ..... "." .. " ........ "" ........... ".271
Получение основной информации о запросе ... "............ " .......... " ... "" ........................ 272
Объект Response ........................................................................................................................... 276
Использование и создание объектов Respoпse в контроллерах .. "." .................... 276
Специализированные типы ответов ....................... " ....... " ..... "...... " ............ " ................ 277
I..aravel и middleware ........... " ................ " .................................................................................... 283
Вводная информация о шiddleware ......... " .................................... " ............................... 283
Создание собственного шiddleware ................... " ........................................................... 284
Жизненный цикл запроса в

Оглавление

13

middleware ................................................................................................... "...... 286
Передача параметров middleware ............................................................. " ..................... 289
Доверенные прокси-серверы ................................................................................................... 290
Тестирование ................................................................................................................................ 291
Резюме ............................................................................................................................................. 292
Привязка

......................................................................................................................... 293
...................................... " ....... ".......... 293
Внедрение зависимостей и Laravel ........................................................................................ 295
Глобальный хелпер арр() .............................................................................. ".......................... 295
Как осуществляется привязка к контейнеру ....................................................... " ............ 296
Привязка классов к контейнеру .............................................................. " ............................. 297
Привязка к замыканию .... "................. "...... "...................................................................... 298
Привязка одиночек, псевдонимов и экземпляров ..................................................... 299
Привязка конкретного экземпляра к интерфейсу " .................................................. 300
Контекстная привязка ......................................................................................................... 300
Внедрение в конструктор в файлах Laravel ." ... "..... "" .. "" .. " .... "." ..... " ......... " ........ "... ""301
Внедрение через метод .............................................................................................................. 302
Фасады и контейнер ................................................................................................. " ................ 303
Как работают фасады .......... " ................. " ........... " ............................................................... 304
Фасады реального времени ............................................................................................... 305
Сервис-провайдеры .................................................................................................................... 306
Тестирование ................................................................................................................................ 306
Резюме ............................................................................................................................................. 307

Глава

11.

Контейнер

Вводная информация о внедрении зависимостей

12. Тестирование ................................................................................................................... 308
Основы тестирования ................................................................................................................ 309
Именование тестов ...................................................................................................................... 313
Среда тестирования .................................................................................................................... 314
Трейты тестирования ................................................................................................................. 314
Refresh Database ...................................................................................................................... 315
WithoutMiddleware .............................................................................................................. 315
Database Migrations ............................................................................................................... 315
DatabaseTransactions ............................................................................................................ 315
Простые модульные тесты ............. " ........................................................................................ 316
Как осуществляется тестирование приложений ..................... "" .... "" ........... "........... " ... 317
НТТР-тесты ................................................................................................................................... 318
Тестирование простых страниц с помощью вызова $this->get()
и других НТТР-вызовов ..................................................................................................... 318
Тестирование API на базе JSON с помощью вызова $this->getjson()
и других НТТР-вызовов на бaзeJSON ......................................................................... 319

Глава

14

Оглавление

Утверждения в отношении объекта

$response ......... "......... ".... "... ".... " .. "................ 320
Аутентификация ответов ................................................................................................... 322
Ряд других настроек НТТР-тестов ................................................................................. 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
Базовые сведения о RЕSТ-подобных API на бaзeJSON ............................................... 350
Организация контроллеров и возвращаемые JSОN-сообщения ................................ 352
Чтение и отправка заголовков ................................................................................................ 355
Отправка заголовков ответа в Laravel ........................................................................... 356
Чтение заголовков запроса в Laravel ............................................................................. 356
Разбивка на страницы в Eloquent .......................................................................................... 356
Сортировка и фильтрация ....................................................................................................... 358
Сортировка результатов API ............................................................................................ 359
Фильтрация результатов APl ........................................................................................... 360
Преобразование результатов ................................................................................................... 361
Создание собственного преобразователя ..................................................................... 362
Вложение связей пользовательских преобразователей .......................................... 363
Ресурсы API .................................................................................................................................. 365
Создание класса ресурса .................................................................................................... 365
Коллекции ресурсов ............................................................................................................. 366
Вложение связей ................................................................................................................... 368

Оглавление

Применение разбивки на страницы к ресурсам

15

API ."""."."".""".""".""" ..... " ..... 369

Условное применение атрибутов ....... ""."."" ........ "" ... "" .. "... """""" .... " .. " ..... "."""".370
Другие настройки для ресурсов

APl .. """.""." ..... ""." .. """ ..... "..... " ... " .. """.""."""".370
Аутентификация API с помощью Laravel Passport """."""""""""""""""".""."""".".370
Вводная информация о OAuth 2.0"."""""." .. "" ..... "" .... """"."."" ... "."" .. """"""""".370
Установка пакета Passport ."""."""""."""""" .. "." .. """ ... ".. "" .. """" .. """" .... """"."" ... 371
API пакета Passport .. "... "."" .. ""."" .. "."""""" ..... "" ... """ ... ".""." .. ""."".""" .. """"""." .. 373
Типы допуска, предлагаемые пакетом Passpo1·t "."""""""."."""" .. """""""""""""373
Управление клиентами и токенами с помощью АР! пакета Passport
и компонентов Vue """""."".""""""."""""""." .. """ .. """ .... ".""" ..... "." .... ""."."."" .. "".382
Области видимости пакета Passport ""."""" .. """ ..... "."." .... """ ..... " .... """."." .. """".384
Развертывание пакета Passport """"""""""." .... "" ... """"." ... ""."." ..... """"."." .. "."""386
Аутентификация с помощью токенов API " .. """ .... "" ... """"" ... ""." .. ""."".""""""" ... ".386
Настройка ответов с кодом 404 "" .. ".""" .. """"."." .... "" .... ""."" .... """ .... """" .. ".""."." .. ".387
Тестирование ................................................................................................................................ 388
Резюме ......................................................... " .................................................................................. 389
Глава

14.

Сохранение и извлечение данных".""""."" .... """ ..... "."."" ... "".".".""" ... """."".390

Локальные и облачные файловые менеджеры"""".""""""" .. """ ............. "."."""."""".390
Настройка доступа к файлам".""""".""".""" .. """ .. ""." ... " ... """ .. "."".".""."" .. ""."."390
Использование фасада

Storage."""" .. """"""" ... "" .... """ .. "" .. ".".".""""."."."" .... "" ... 392

Добавление дополнительных провайдеров из пакета r'lysystern ".""""""""".".393
Базовые способы загрузки файлов на сервер и манипулирования файлами """"393

Простые способы скачивания файлов "."""."." .. " .. "".""."" .. """.".""."""""." .. """"."".395
Сессии ........................................................... "................................................................................. 395

Получение доступа к сессии """ .. """"."""""""" .... """"." ... ""."."."""."""""."""""".395
Методы, доступные в экземплярах сессий" .. "" .... ""."."".""" ...... " ... ""."""" .. "" .... "396
Флеш-память сессии" ... "" .. "".""".""" ... "" ... "" .. """ .... "" ...... "."." ............ "" .. """."" .. ""398
Кэш

................................................................................................................................................... 398
.. """ .... """" .. """ ....... "." .... """ .. ".""""" .. """"" ... """" ........ 399
Методы, доступные в экземплярах кэшей ".""""""""".""""""""."".".".""".".""".400
Сооkiе-файлы .......................... " ............ " ...................................................................................... 401
Сооkiе-файлы в Laravel".""".""" ... "."""" .. ""."" .... """ .... " .. ""." .... """."."."""""".".""401
Получение доступа к сооkiе-файлам.""" .. ""."." .... """" ..... """.""""" .... "." .. "."." .. ""401
Логирование .................................................................................................................................. 404
Получение доступа к кэшу

Когда и зачем следует выполнять логированис """""."""""""."""""."""""""."".405
Внесение записей в логи."" .. """" ..... """ .. """ ... ".... "...... ""."" .... """ .. """""."""."" ....... 405
Каналы логирования"" .. """ .... """." .... "" .... """ .. ".... "...... """"" ... "" .... """"""."""" .. " ... 406
Полнотекстовый поиск с использованием Laravcl Scout ."""."."""""."""".""""""".409
Установка пакета

Scout ." ... ".""""""" ..... "" ... " .... "...... "" ........ ".. " .. "" ...... """" .. """""".409
Пометка модели для индексирования ."".""".".""."."".""""""."""".""".""""".".".41 О

Оглавление

16

Поиск по вашему индексу .................................................................................................. 41 О

Очереди и

Scout ..................................................................................................................... 410

Выполнение операций без индексирования ................................................................ 411
Условное индексирование моделей

Запуск индексирования

......................... " .................................................. "411
вручную с помощью кода .................................................. 411

Запуск индексирования вручную с помощью интерфейса
командной строки ................................................................................................................. 412

Тестирование

................................................................................................................................ 412

Сохранение файлов .............................................................................................................. 412
Сессия

....................................................................................................................................... 414

Кэш ............................................................................................................................................. 415

Сооkiе-файлы ......................................................................................................................... 415
Логирование

........................................................................................................................... 416
Scout .......................................................................................................................................... 417
Резюме ............................................................................................................................................. 417
Глава

15.

Почта и уведомления

Глава

16.

Очереди, задания, события, трансляция и планировщик ............................. ".439

.................................................................................................... 418
Почта ................................................................................................................................................ 418
Классическая электронная почта .................................................................................... 419
Простейший способ использования отправлений .................................................... 419
Шаблоны писем ..................................................................................................................... 421
Методы, доступные в build() ............................................................................................ 422
Прикрепленные файлы и встроенные изображения ................................................ 423
Маrkdоwn-отправления ...................................................................................................... 424
Визуализация отправлений в браузере ......................................................................... 426
Очереди .................................................................................................................................... 426
Локальная разработка ......................................................................................................... 427
Уведомления ................................................................................................................................. 428
Определение метода via() для уведомляемых объектов ........................................ .431
Отправка уведомлений ....................................................................................................... 432
Помещение уведомлений в очередь ........................................................................... " .. 432
Предлагаемые по умолчанию типы уведомлений ..................................................... 433
Тестирование ................................................................................................................................ 437
Электронная почта ............................................................................................................... 437
Уведомления .......................................................................................................................... 438
Резюме ............................................................................................................................................. 438

Очереди ........................................................................................................................................... 439
Зачем нужны очереди .......................................................................................................... 440
Базовая конфигурация очередей ..................................................................................... 440

Оглавление

17

Задания в очереди ... "."." ................... "................. "." .......... " .. "" ......... "" ............. "." .......... 441

Запуск обработчика очередей" ........... " ......... " ........... "." ............ "" .............. "" ...... "" ..... 444
Обработка ошибок" ....... ".. " .. " ........... "." .................. "." .. " ............. "" ........... "." ........ " .. " ... 445
Управление очередью ... "."." ... "....... "... "." ....... ".......... " ................................... " ... " .......... 447
Очереди для поддержки других функций" ............ " .. " .. " ..... "."" .... " ............. """ ...... .448
Laravel Horizon ................................................. " .... " ....... " ........... " .. " ................ ""." .... " ... "." ..... 448
События ..... " ..... "." ........ " ........................... " ........... """ ... " .... ""."" .. "." ..................... "" ...... " ..... "449
Запуск события ...... " ..... " ........................... " ... " .... "." ........... " .. """ ... " ............ ".. "." ..... "" .... 449
Прослушивание события ..................... " ... " ....... "." .. ""." .. " .. "."" ............................ " .. "".451
Трансляция событий посредством веб-сокетов и Laravel Echo "."""."." .... """"""."454
Конфигурация и настройка ..... "..... "" ............ "" .... "." ....... "" .... " ... "." .. ""." ......... "......... 455
Трансляция события" ........... " .. "" ............ "............ " ........ " .......... " ..... " ..................... " ....... 455
Получение сообщения .......... " .................................. " .......................... " .... " ..... " .............. "458
Продвинутые инструменты трансляции ........... " .. """ .. "."" .. " ......... " ...... "" .... "" ....... 460
Laravel Echo ( cтopoнajavaScript-кoдa) ........ " .. """ ... "" ... "" .. ""." ... "" .. " ..... " ...... " .. ""464
Планировщик. ....... "" .................. " ........ " .... " ............ " ................... "...... " .. " ................................. 469
Доступные типы задач ... "........... " ..... " ......................................... " .... """"" ............. " ........ 470
Доступные временные интервалы ....... " .................. " .. " ......... " ... " ......... "" .. " ........ " ...... 4 70
Определение часовых поясов для запланированных задач " ......... "" ... """ .. """".4 72
Блокирование и наложение .... " ..... "... "." ....... " ............................. "" ... " ........................... 472
Обработка выходных данных задачи ." ..... " ................................ """" ........................... 4 73
Перехват задач " ... " ... " .. " ....... " ..... "" ... "." .................... "................. " .... "" ................. "......... 474
Тестирование ....................................... " ..... " ............. " ............ " ..................... " .................. " ........ 474
Резюме ..... "" ... "." .................... " ........ " ..... " ... " ........ " ................. "." ... " .... " ...... " ... " ........................ 476

Глава

17.

Хелперы и коллекции ."." ... """ .. " ... " ........ " ......... "." .... " .......... "" .... """ ......... " .......... 4 77

Хелперы

......... " .................. " ......................... ".""" ............ " .. "" ........................ " ........... "" ............ 477
Массивы .... " ....................... " ...... " .... " .... " ........ " ........ " .... " ...................... "." ........................ ".477
Строки." ..... " ................................................. " ............ "............................. "" .. " ....................... 479
Пути приложения .............. " ..... "........... "." .... "." ... " .................. " ..... " ............... " ................ 481
URL-aдpeca ........... " .............. " .... "" ..... " ... " .............. " ....................... "" .... " ................... " ...... 482
Прочее ........ " ........................... "" ...... " .... " .... " .... "" .................. ".......... " ..... " ........................... 484
Коллекции" .................. " ..... " .... " ... " .... " .................. "" ......... "..... " .......... "." ................................. 486
Базовые сведения ........ " ............................................... ".................. "" ................................. 487
Некоторые методы ... " ........ "." ... " .......... " ... " ....... " ......" .... " .......... " ............................ " ... " .. 489
Резюме ....... " .. " .............. " .. " ...... " .. "" .... " .......... " .............. " ....................................... "." .......... "" .. 493

Глава

18.

Экосистема инструментов Laravel ." ....... " ............... " ......... """ .. "" .......... """ ...... ".494

Инструменты, рассмотренные в книге ................ " ......................... "..................... " .......... ".494

Valet ... " .................. " ................ " ......................... ".. "." ..... "... " ....... " ......................................... 494
Homestead .................... " ........................................ "....... " ....... " ... " .............................. ".. " ..... 494

18

Оглавление

Установщик I..aravel ... ".. "".""".""" ... "" .. """" .. ".""""""."""""""."""".""""""" .. "" ... "495
Mix ......................... " ................................................................................................................... 495
Dusk ........................................................................................................................................... 495
Passport ........................................ " ........................................................................................... 495
Horizoп"."""."."."" ... """""" .. """."""""".""""." ... """."" .. ""."""""" ... " ... ".""" .. """"."".495
Echo .................................................... "...................................................................................... 496

Инструменты, не рассмотренные в книге """"""""""""""."""""""""""""""""""""""496

Forge ............................................................................................................................... " ......... 496
Envoyer ..................................................................................................................................... 496
Cashier ... """ .. "."."."""""."""." .... "" .. "" .... """"""" .. """ .... """"" .. """"" ......... "" ... ""."."".497
Socialite .""".""""".""""." .. """ ..... ""."".".""".""." ..... """ ... """""."" ........... "."."."""""""498
Nova ............................................................................................................................................ 498
Spark .......................................................................................................................................... 498
Luшen ............ " .......................................................................................................................... 498
Envoy ............. " .......................................................................................................................... 499
Telescope ................................................................................................................................... 499
Другие ресурсы ............................................................................................................................ 499
Глоссарий""." ... """"" .. "."."""."." .. """ .... "."""""""" .. ""."." ... "." ... ".""".""" ... " .. " .... ""." .. "........ 501

Об авторе .. """." .. "" .. "."."" .... """".".""."""" .. """.""."""."".""."" .. " ... "" .. """"".""" .. "." ... ""." ... 511
Об обложке"""" ... "" ... "." .. "."""""" .. """ ... "... """"."""" ... ".".""""" ..... "".""."""""" ... """ .. """ ... 512

Эта книга посвящена моей семье.

Тебе, Миа, моя маленькая принцесса и источник радости и энергии.
Тебе, Малакай, мой маленький принц, искатель приключений и эмпат.

Тебе, Терева, мое вдохновение, мой мотиватор, мое ребро.

Предисловие
История моего знакомства с Laгavel вполне заурядна: много лет я писал код на РНР
и активно изучал потенциал Rails и других современных веб-фреймворков. В Rails
меня привлекало прекрасное сочетание исходных настроек и гибкости, мощные
возможности системы управления пакетами стандартного кода Ruby Gems, а также
наличие активного сообщества программистов.
Я так и не перешел на Rails, чему был безумно рад, когда узнал о Laravel. Он взял
лучшее от Rails, не становясь при этом его клоном. Это был инновационный фрейм­
ворк с отличной документацией и доброжелательным сообществом.
После этого я начал делиться своим опытом и:3учения Laravel: вел благ, записывал
подкасты и выступал на конференциях. С помощью Laravel я написал десятки
приложений в рамках своей основной работы и дополнительных проектов, а также
познакомился лично и в режиме онлайн с разработчиками, использующими этот
фреймворк. Даже имея богатый арсенал инструментов разработки, я наслаждаюсь,
когда набираю в командной строке laravel new projectName.

О чем эта книга
Это не первая книга о Laravel и не последняя. Я не стремился объяснить каждую
строку кода или шаблон реализации, поскольку не хотел рассказывать о том, что
может устареть после обновления I.aravel. Я хотел написать книгу, которая предо­
ставляла бы разработчикам обзор и давала конкретные примеры требований для
работы в кодовых ба..1ах Laravel с использованием любой функции или подсистемы
этого фреймворка. Я стремился не просто дублировать документацию, а помочь
вам понять основополагающие концепции

Laravel.

Laravel - это мощный и гибкий РНР-фреймворк с постоянно растущим сообще­
ством программистов и широкой экосистемой инструментов, •по с каждым днем
повышает его привлекательность и доступность. Книга предназначена для разра­

ботчиков, которые уже знают, как создавать сайты и приложения, и хотят узнать,
как это можно эффективно делать с помощью Laravel.
Документация I.aravel всесторонняя и качественная. Если вам кажется, что я недо­
статочно хорошо осветил определенную тему, то рекомендую ознакомиться с ее более
подробным описанием в онлайн-документации по адресу https://laravel.com/docs.

О втором издании

21

Надеюсь, в книге вы найдете оптимальный баланс между теорией и практикой
в виде примеров конкретного применения, а по прочтении сможете легко написать

с помощью

Laravel целое приложение с нуля.

Для кого предназначена книга
Книга подойдет для читателя, знающего базовые методы объектно-ориентированного
программирования, язык РНР (или но крайней мере общий синтаксис языков С),
а также базовые концепции архитектурного паттерна «Модель - Представление -

Контроллер~

(Model - View - Controller, MVC) и обработки шаблонов. Если вы

никогда не создавали сайт, материал книги может оказаться слишком сложным.

Но если у вас есть опыт программирования, то не обязательно знать что-то о Iжavel
я объясню все, что нужно, начиная с простейшего примера Hello, world!.

-

Laravel может работать в любой операционной системе, но приведенные здесь
примеры команд оболочки bash проще запускать в Linux/macOS. Пользователям
Windows будет сложнее выполнять эти команды и в целом применять современные
средства разработки на РНР, однако, следуя инструкциям, вы сможете установить
Homestead (виртуальную машину Linux) и запускать все необходимые команды.

Структура издания
В этой книге я старался придерживаться хронологического порядка: сначала рас­

сматриваются базовые компоненты, которые вы будете применять в начале созда­
ния веб-приложения с помощью Laravel, а затем - менее фундаментальные и реже
используемые возможности.

Главы организованы так, •пабы незнакомые с фреймворком поль:юватели могли
эффективно усваивать материал, читая книгу 110 порядку.

Большинство глав заканчивается двумя разделами: «Тестирование~ и «Краткие
итоги~. В них соответственно показывается, как писать тесты для описанных воз­

можностей, и проводится общий обзор рассмотренного материала.
Книга написана для

Laravel 5.8,

но охватывает возможности и нововведения син­

таксиса предыдущих версий, начиная с

Laravel 5.1.

О втором издании
Первое издание книги вышло в ноябре 2016 года и освещало возможности версий
14aravel с 5.1 по 5.3. В новом издании дополнительно рассмотрены возможности
версий 5.4-5.8 и инструментов Laravel Dusk и I.aravel Horizon, а также добавлена
глава 18, посвященная ресурсам сообщества и дополнительным пакетам Laravel,
которые не были охвачены в первых 17 главах.

22

Предисловие

Условные обозначения
В этой книге используются следующие типографские обозначения.
Рубленый шрифт

Используется для выделения URL-aдpecoв и адресов электронной почты.
Курсивный шрифт
Применяется для выделения новых терминов и слов, на которых сделан акцент.
Моноширинный шрифт

Используется для записи листингов программ, а также для выделения в тексте

таких элементов, как имена переменных и функций, базы данных, типы данных,
переменные среды, операторы и ключевые слова, имена и расширения файлов.
Полужирный моноширинный шрифт

Предназначен для выделения команд или другого текста, который должен

вводиться пользователем без каких-либо изменений.
Курсивный моноширинный шрифт

Применяется для обозначения в коде элементов, которые требуется заменить
предоставленными пользователем значениями или значениями, зависящими
от контекста.

{Курсивный моноширинный шрифт в фигурных скобках}

Используется для выделения имен файлов или путей к файлам, которые требу­
ется заменить предоставленными пользователем значениями или значениями,
зависящими от контекста.

Так обозначается совет или предложение.

Так обозначается общее примечание.

Так обозначается предупреждение.

it

Поскольку эта книга охватывает возможности

Laravel

версий

5.1-5.8,

в книге ис­

пользуются метки для обозначения комментариев, относящихся к той или иной
конкретной версии. В общем случае такая метка указывает, в какой версии

Laravel

Благодарности

была введена рассматриваемая возможность (так, например, метка

что рассматриваемая во:iможность доступна только в

Laravel 5.3