Рет қаралды 8,842
Сегодня мы затронем тему DTO в Laravel - data transfer object. Рассмотрим, как работать с данными в структурированном виде. Научимся использовать объекты передачи данных (DTO).
#dto#laravel#cutcode
---------------------------------------------------------------------------------
❗️❗️❗️Присоединяйся к нашему комьюнити в телеграм - там и советом помогут и много интересного - t.me/laravel_chat
🤖🤖🤖Мой помощник Тэйлор готов выдать тебе подарок. Забирать тут - cutcode.ru/chat-bot
---------------------------------------------------------------------------------
⏰ Таймкоды:
00:00 Введение
00:31 Описание проблемы
01:52 Реализация DTO
03:36 Обзор библиотеки от Spatie
06:57 Подведение итогов
Всех поклонников Laravel я приветствую на канале Cutcode! Сегодня мы затронем тему DTO в ларавел - data transfer object. Быстро пройдемся по этой теме а также рассмотрим специальный пакет от spatie по организации слоя DTO в Laravel проекте. Обсудим с вами зачем это нужно, как с этим работать и мое личное мнение об этом паттерне.
Итак давайте начнём с проблемы - мы работаем с request в laravel. У нас есть валидация, есть метод validated который возвращает нам массив и мы находясь здесь ничего не знаем, что у нас в этом массиве, для нас он черный ящик. IDE нам также ничего не подскажет об этом массиве. Мы не знаем какие элементы в этом массиве в данном случае находится. Если мы работаем с FormRequest и провалимся в класс, там и хотя бы в методе rules можем увидеть какие именно параметры будет возвращать метод validated. Но если в целом мы работаем с request и возвращаем все параметры, то мы вообще понятия не имеем что там находится. Ну и здесь в целом тоже пока мы не уходим в класс, мы ничего о нем не знаем. Ошибиться в таком подходе гораздо проще. Да как минимум случайно ошибиться в написании ключа. Исправить сие недоразумение можно добавив дополнительный слой представления DTO и это всего лишь дополнительный класс, который примет все параметры из вашего массива с запросам и трансформирует объект перед определенными свойствами и типами и далее с ним работа будет выполнена удобно и IDE нам всегда подскажет что именно содержится в этом объекте. Давайте взглянем на такой объект и применим его в нашем примере.
Итак давайте взглянем на такой класс. Я его уже создал, располагается он у меня в директории DTO и здесь класс PostForm, который как раз ответственен за PostFormRequest. Давайте на него посмотрим как видите это простой класс ничего особенного в нем нет, за единственным исключением - присутствует статический метод FormRequest, который принимает объект Request и в последующем создает экземпляр класса FormRequest на основе параметров которые у нас как раз находятся в методе Rules, который у нас возвращаются от метода validated. Далее в контроллере нам необходимо немножко изменить наш код - убрать RequestValidated - здесь обратиться к PostForm обратиться к методу FormRequest параметрам отдать объект FormRequest и в конечном итоге работать с датой как с экземпляром класса PostForm. И здесь уже IDE нам спокойно подсказывает, какие свойства есть какие методы, плюс мы в самом классе можем указать какие типы у свойств. И работать в таком ключе будет гораздо удобнее.
---------------------------------------------------------------------------------
📹 делитесь этим видео с друзьями:
• DTO в laravel для requ...
🔔 подпишитесь на KZbin-канал: kzbin.info?s...
📼 Курс по Laravel с нуля:
• Курс по Laravel 8 обуч...
DTO в laravel для requests а также обзор библиотеки от Spatie
---------------------------------------------------------------------------------
🔗 наш сайт: cutcode.ru/
📷 наш instagram: / cutcoderu
📱 Наш telegram-канал: t.me/laravel_cutcode