Полное руководство. 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 англ.
no соглашению с O'Reilly. Все nрава защищены. Никакая часть данной книги не может
быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав.
Информация, содержащаяся в данной книге, получена из источников, рассматриваемых издательством как на
дежные. Тем не менее, имея в виду возможные человеческие или технические ошибки, издательство не может
гарантировать абсолютную точность и полноту приводимых сведений и не несет ответственности за возможные
ошибки. связанные с использованием книги. Издательство не несет ответственности за доступность материалов,
ссылки на которые вы можете найти в этой книге. На момент подготовки книги к изданию все ссылки на интернет
ресурсы были действующими.
И·1готомено в России. И1готовитель: ООО
194044,
«llporpecc
книга». Место 11ахождсния и фактический адрес:
Россия, i: Са11кт-Петербург, Б. Сампсо11иевский пр., д. 29А, пом.
Дата и1готовле11ия:
12.2019.
52.
Тел.:
+78127037373.
Наиме11ование: книжная продукции. Срок годности: не о~·раничен.
Налоговая льr·ота -·общероссийский классификатор продукции ОК
Использование стеков ........................................................................................................... 94
Использование компонентов и слотов ............................................................................ 96
Компоновщики представлений и внедрение сервисов
Eloquent ............................................................................................................. 154
Eloquent ........... "."." ... "" ............................................................................ 156
Связи в Eloquent ................................................................................................................... 158
Обновление меток времени родительской записи дочерними записями ......... 170
Коллекции
События аутентификации ........................................................................................................ 253
Система авторизации (список управления доступом) и роли
." ....................... "..... ".25-1
Определение правил авторизации .................................................................................. 255
Фасад
Gate (и
его внедрение) .................................................. ".......................... "........... 256
......................................................................................................................... 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
Другие настройки для ресурсов
Добавление дополнительных провайдеров из пакета r'lysystern ".""""""""".".393
Базовые способы загрузки файлов на сервер и манипулирования файлами """"393
Выполнение операций без индексирования ................................................................ 411
Условное индексирование моделей
Запуск индексирования
......................... " .................................................. "411
вручную с помощью кода .................................................. 411
Запуск индексирования вручную с помощью интерфейса
командной строки ................................................................................................................. 412
Предисловие
История моего знакомства с 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можность доступна только в