[Laravel, Программирование] Новинки Laravel 8
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Привет, хабр! В преддверии старта курса "Framework Laravel", наш эксперт и по совместительству активный участник российского сообщества Laravel — Виталий Юшкевич, подготовил обзор новинок в Laravel 8. Передаю слово Виталию:
Всем привет!
Последний релиз Laravel 8 получился неоднозначным. С одной стороны, появилось много новых инструментов для быстрого старта; улучшена работа фабрик, приведена структура папок в формат "как обычно используется". С другой стороны, в этом релизе существенно изменили подходы к базовой разработке веб-приложений на Laravel, а привычный ui с поддержкой preset бутстрапа и реакта добавляли фиксом отдельной библиотекой после большого количества возмущений со стороны сообщества.
Давайте посмотрим более внимательно на изменения, как они изменят ландшафт разработки приложений на laravel в будущем.
Попробуем установить новую версию Laravel и посмотреть на новинки внимательнее.
Приложение laravel устанавливается с помощью глобально установленного установщика https://github.com/laravel/installer. Если у вас он уже был установлен, то можете изменить зависимость в вашем глобальном composer.json. Он находится по следующему пути:
~/.composer/composer.json.
Актуальная версия для laravel 8:
"laravel/installer": "^4.0".
После сохранения изменений выполните команду:
composer global update
и после новая версия фреймворка будет доступна.
При создании нового приложения добавился новый флаг:
--jet Installs the Laravel Jetstream scaffolding
Об этом инструменте поговорим отдельно, а пока создадим новое приложение.
Для установки и работы laravel 8 подняли требования к минимальной версии php до 7.3. Все требования можно посмотреть по ссылке https://laravel.com/docs/8.x/installation#server-requirements
Изменения
Изменение структуры директорий модели
По многочисленным просьбам комьюнити, все модели по-умолчанию теперь размещаются в директории Models с соответствующим namespace (App\Models).
При этом сохранилась обратная совместимость в работе команды make:model. Если у вас есть директория Models, то при выполнении команды php artisan make:model ModelName новая модель будет автоматически создана в директории Models с соответствующим namespace (App\Models). Если же у вас нет этой директории, то модель создастся в корне app и namespace будет App. Мелочь, а приятно.
Migration Squashing
Со временем проект обрастает большим количеством файлов миграций. Это не очень удобно, если вы хотите посмотреть вашу актуальную схему, либо если вам приходится часто выполнять все миграции.
В Laravel 8 появилась команда schema:dump, которая создает дамп текущей базы в отдельную директорию schema. Если вызвать эту команду с флагом —prune, то все текущие миграции удалятся. При следующих обновлениях базы сначала будет выполняться этот дамп, а затем оставшиеся миграции.
Model Factory Classes
В этом релизе была переработана работа с фабриками. Model factory — это полноценный класс, а вызов фабрики осуществляется через вызов метода модели factory() (* Модель должна использовать трейт HasFactory).
Это существенно упрощает работу с фабриками. Например, теперь гораздо удобнее задавать разные состояния для генерации модели через отдельные методы и при вызове метода make() или create() последовательно применять цепочки состояний. Например,
User::factory()->active()->subscribed()->client()->make()
Улучшена работа со связями. Появились 2 волшебных метода: has и for. Например, если мы хотим создать пользователя с 5 постами, мы можем написать:
User::factory()->has(Post::factory()->count(5))->create()
более "магичный" вариант тоже будет работать
User::factory()->hasPosts(5)->create()
Метод for() работает аналогично для отношений BelongsTo
Улучшения в работе Maintenance Mode
У команды php artisan down появились новые флаги:
--redirect[=REDIRECT] The path that users should be redirected to
--render[=RENDER] The view that should be prerendered for display during maintenance mode
--retry[=RETRY] The number of seconds after which the request may be retried
--secret[=SECRET] The secret phrase that may be used to bypass maintenance mode
--status[=STATUS] The status code that should be used when returning the maintenance mode response [default: "503"]
Если мы зададим параметр secret, например так:
php artisan down --secret=my_secret_down_key
то мы сможем обратиться к сайту по адресу mysite.com/my_secret_down_key, после чего работать с сайтом, как будто он в обычном режиме (выставляется кука). При этом для остальных пользователей приложение будет находится в maintenance режиме.
Параметр render позволяет отобразить шаблон как финальный html код. Этот параметр можно использовать как для отображения кастомного шаблона (задаем наш шаблон), так и использовать отображение рендера страниц ошибок (—render="errors::503"). Последний вариант использования полезен в следующем — если во время обновления приложения вы выполняете composer update, то ваши зависимости могут поломаться и вывод стандартной заглушки поломаться. Если вы будете использовать render 503 страницы, то вывод не поломается и будет выводится подготовленный заранее шаблон html страницы.
Улучшена работа с Closure-Based Event Listeners
Listeners для событий можно объявлять через замыкания. Такой подход может быть оправданным, когда хочется сэкономить на создании отдельных классов (спорное преимущество, на мой взгляд, но имеет место быть).
Суть улучшения сведена к оптимизациии:
Раньше нужно было писать так:
Event::listen(MyEvent::class, function(MyEvent $event) {
// do smth
})
Теперь можно писать так:
Event::listen(function(MyEvent $event) {
// do smth
})
Если нужно сделать обработкик queueable, то замыкание нужно обернуть в другое:
Event::listen(queueable(function(MyEvent $event) {
// do smth
}))
Time Testing helper
Добавлен новый класс Wormhole, который добавляет для тестирование ряд методов, позволяющих гибко менять "текущую дату", от которой мы хотим протестировать. Есть гибкая поддержка (положительные и отрицательные смещения, изменения в разных единицах — от миллисекунд до лет) изменений текущего времени, а также указания точного времени.
Пример из документации:
public function testTimeCanBeManipulated()
{
// Travel into the future...
$this->travel(5)->milliseconds();
$this->travel(5)->seconds();
$this->travel(5)->minutes();
$this->travel(5)->hours();
$this->travel(5)->days();
$this->travel(5)->weeks();
$this->travel(5)->years();
// Travel into the past...
$this->travel(-5)->hours();
// Travel to an explicit time...
$this->travelTo(now()->subHours(6));
// Return back to the present time...
$this->travelBack();
}
Улучшена работа rate-limit
В предыдущей версии rate limit задавался на уровне middleware. Начиная с 8 версии управление rate limit перенесено в RouteServiceProvider через замыкания. Существенно улучшена гибкость работы. Теперь в рамках одного midleware можно настроить разные rate limit, а также устанавливать лимиты для пользователей или по ip (например, привелигированным пользователям дать менее жесткие ограничения).
JetStream и изменения frontend
Вместе с этим релизом вышел новый продукт для скаффолдинга на смену пакету UI, динамические компоненты blade. Пожалуй, это одно из самых масштабных изменений этого релиза. Вместе с тем и спорных. Этот пакет обладает достаточно большими возможностями, рассмотрим его подробно в отдельной статье.
Job batching
Фасаду Bus добавили новый метод batch() для обработки блоков задач. Можно контролировать запуск следующих методов после выполнения всех задач. Пример кода из документации:
use App\Jobs\ProcessPodcast;
use App\Podcast;
use Illuminate\Bus\Batch;
use Illuminate\Support\Facades\Bus;
use Throwable;
$batch = Bus::batch([
new ProcessPodcast(Podcast::find(1)),
new ProcessPodcast(Podcast::find(2)),
new ProcessPodcast(Podcast::find(3)),
new ProcessPodcast(Podcast::find(4)),
new ProcessPodcast(Podcast::find(5)),
])->then(function (Batch $batch) {
// All jobs completed successfully...
})->catch(function (Batch $batch, Throwable $e) {
// First batch job failure detected...
})->finally(function (Batch $batch) {
// The batch has finished executing...
})->dispatch();
return $batch->id;
Другие изменения
Также в этом релизе были добавлены closure для job dispatch, улучшения artisan serve, обновления Routing Namespace и исправления багов. Полный changelog доступ в документации. https://laravel.com/docs/8.x/releases и в репозитории :)
Вместо итогов
Этот релиз добавляет удобства в работу, привносит много улучшений. Вместе с тем, нет ощущения, что это был самый сильный релиз Laravel. Изменения по frontend части вызвали достаточно много обсуждений, "вынудив" добавить фиксом старый ui через отдельную библиотеку. Taylor обозначил новый вектор развития фреймворка, с которым многие могут не согласится. Сохранит ли Taylor этот вектор и в следующем релизе? Сохранит ли laravel такие же темпы привлечения людей в свое комьюнити? Время будет единственным судьей.
На этом всё. По ссылке ниже вы можете записаться на бесплатный вебинар, в рамках которого мы подробно расскажем о программе курса и процессе обучения, а также ответим на интересующие вас вопросы.
оригинал
===========
Источник:
habr.com
===========
Похожие новости:
- [Java, Программирование] Знакомимся с Event Sourcing. Часть 2 (перевод)
- [Программирование, Разработка мобильных приложений, GitHub] Используем бесплатные возможности Github Actions для CI/CD на Flutter-проекте
- [PHP, Программирование] Собеседование php-developer в 2020
- [C++, Программирование] Полиморфные аллокаторы c++17
- [Программирование, Тестирование веб-сервисов] Враг не пройдёт, или как помочь командам соблюдать стандарты разработки
- [MongoDB, NoSQL, Администрирование баз данных] 14 вещей, которые я хотел бы знать перед началом работы с MongoDB (перевод)
- [Тестирование IT-систем, Программирование, TDD] Деконструкция TDD
- [3D-принтеры, C, Программирование микроконтроллеров] Прошивка для фотополимерного LCD 3D-принтера своими руками. Часть 1
- [Криптография, Платежные системы, Программирование] Блокчейн-платформа R-chain: общая архитектура и эволюция
- [JavaScript, Программирование, VueJS] Разбираем тестовое задание на должность фронтенд-разработчика на Vue.js
Теги для поиска: #_laravel, #_programmirovanie (Программирование), #_laravel, #_laravel8, #_blog_kompanii_otus._onlajnobrazovanie (
Блог компании OTUS. Онлайн-образование
), #_laravel, #_programmirovanie (
Программирование
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 20:09
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Привет, хабр! В преддверии старта курса "Framework Laravel", наш эксперт и по совместительству активный участник российского сообщества Laravel — Виталий Юшкевич, подготовил обзор новинок в Laravel 8. Передаю слово Виталию: Всем привет! Последний релиз Laravel 8 получился неоднозначным. С одной стороны, появилось много новых инструментов для быстрого старта; улучшена работа фабрик, приведена структура папок в формат "как обычно используется". С другой стороны, в этом релизе существенно изменили подходы к базовой разработке веб-приложений на Laravel, а привычный ui с поддержкой preset бутстрапа и реакта добавляли фиксом отдельной библиотекой после большого количества возмущений со стороны сообщества. Давайте посмотрим более внимательно на изменения, как они изменят ландшафт разработки приложений на laravel в будущем. Попробуем установить новую версию Laravel и посмотреть на новинки внимательнее. Приложение laravel устанавливается с помощью глобально установленного установщика https://github.com/laravel/installer. Если у вас он уже был установлен, то можете изменить зависимость в вашем глобальном composer.json. Он находится по следующему пути: ~/.composer/composer.json.
Актуальная версия для laravel 8: "laravel/installer": "^4.0".
После сохранения изменений выполните команду: composer global update
и после новая версия фреймворка будет доступна. При создании нового приложения добавился новый флаг: --jet Installs the Laravel Jetstream scaffolding
Об этом инструменте поговорим отдельно, а пока создадим новое приложение. Для установки и работы laravel 8 подняли требования к минимальной версии php до 7.3. Все требования можно посмотреть по ссылке https://laravel.com/docs/8.x/installation#server-requirements Изменения Изменение структуры директорий модели По многочисленным просьбам комьюнити, все модели по-умолчанию теперь размещаются в директории Models с соответствующим namespace (App\Models). При этом сохранилась обратная совместимость в работе команды make:model. Если у вас есть директория Models, то при выполнении команды php artisan make:model ModelName новая модель будет автоматически создана в директории Models с соответствующим namespace (App\Models). Если же у вас нет этой директории, то модель создастся в корне app и namespace будет App. Мелочь, а приятно. Migration Squashing Со временем проект обрастает большим количеством файлов миграций. Это не очень удобно, если вы хотите посмотреть вашу актуальную схему, либо если вам приходится часто выполнять все миграции. В Laravel 8 появилась команда schema:dump, которая создает дамп текущей базы в отдельную директорию schema. Если вызвать эту команду с флагом —prune, то все текущие миграции удалятся. При следующих обновлениях базы сначала будет выполняться этот дамп, а затем оставшиеся миграции. Model Factory Classes В этом релизе была переработана работа с фабриками. Model factory — это полноценный класс, а вызов фабрики осуществляется через вызов метода модели factory() (* Модель должна использовать трейт HasFactory). Это существенно упрощает работу с фабриками. Например, теперь гораздо удобнее задавать разные состояния для генерации модели через отдельные методы и при вызове метода make() или create() последовательно применять цепочки состояний. Например, User::factory()->active()->subscribed()->client()->make()
Улучшена работа со связями. Появились 2 волшебных метода: has и for. Например, если мы хотим создать пользователя с 5 постами, мы можем написать: User::factory()->has(Post::factory()->count(5))->create()
более "магичный" вариант тоже будет работать User::factory()->hasPosts(5)->create() Метод for() работает аналогично для отношений BelongsTo Улучшения в работе Maintenance Mode У команды php artisan down появились новые флаги: --redirect[=REDIRECT] The path that users should be redirected to
--render[=RENDER] The view that should be prerendered for display during maintenance mode --retry[=RETRY] The number of seconds after which the request may be retried --secret[=SECRET] The secret phrase that may be used to bypass maintenance mode --status[=STATUS] The status code that should be used when returning the maintenance mode response [default: "503"] Если мы зададим параметр secret, например так: php artisan down --secret=my_secret_down_key
то мы сможем обратиться к сайту по адресу mysite.com/my_secret_down_key, после чего работать с сайтом, как будто он в обычном режиме (выставляется кука). При этом для остальных пользователей приложение будет находится в maintenance режиме. Параметр render позволяет отобразить шаблон как финальный html код. Этот параметр можно использовать как для отображения кастомного шаблона (задаем наш шаблон), так и использовать отображение рендера страниц ошибок (—render="errors::503"). Последний вариант использования полезен в следующем — если во время обновления приложения вы выполняете composer update, то ваши зависимости могут поломаться и вывод стандартной заглушки поломаться. Если вы будете использовать render 503 страницы, то вывод не поломается и будет выводится подготовленный заранее шаблон html страницы. Улучшена работа с Closure-Based Event Listeners Listeners для событий можно объявлять через замыкания. Такой подход может быть оправданным, когда хочется сэкономить на создании отдельных классов (спорное преимущество, на мой взгляд, но имеет место быть). Суть улучшения сведена к оптимизациии: Раньше нужно было писать так:
Event::listen(MyEvent::class, function(MyEvent $event) { // do smth }) Теперь можно писать так: Event::listen(function(MyEvent $event) { // do smth }) Если нужно сделать обработкик queueable, то замыкание нужно обернуть в другое: Event::listen(queueable(function(MyEvent $event) { // do smth })) Time Testing helper Добавлен новый класс Wormhole, который добавляет для тестирование ряд методов, позволяющих гибко менять "текущую дату", от которой мы хотим протестировать. Есть гибкая поддержка (положительные и отрицательные смещения, изменения в разных единицах — от миллисекунд до лет) изменений текущего времени, а также указания точного времени. Пример из документации: public function testTimeCanBeManipulated()
{ // Travel into the future... $this->travel(5)->milliseconds(); $this->travel(5)->seconds(); $this->travel(5)->minutes(); $this->travel(5)->hours(); $this->travel(5)->days(); $this->travel(5)->weeks(); $this->travel(5)->years(); // Travel into the past... $this->travel(-5)->hours(); // Travel to an explicit time... $this->travelTo(now()->subHours(6)); // Return back to the present time... $this->travelBack(); } Улучшена работа rate-limit В предыдущей версии rate limit задавался на уровне middleware. Начиная с 8 версии управление rate limit перенесено в RouteServiceProvider через замыкания. Существенно улучшена гибкость работы. Теперь в рамках одного midleware можно настроить разные rate limit, а также устанавливать лимиты для пользователей или по ip (например, привелигированным пользователям дать менее жесткие ограничения). JetStream и изменения frontend Вместе с этим релизом вышел новый продукт для скаффолдинга на смену пакету UI, динамические компоненты blade. Пожалуй, это одно из самых масштабных изменений этого релиза. Вместе с тем и спорных. Этот пакет обладает достаточно большими возможностями, рассмотрим его подробно в отдельной статье. Job batching Фасаду Bus добавили новый метод batch() для обработки блоков задач. Можно контролировать запуск следующих методов после выполнения всех задач. Пример кода из документации: use App\Jobs\ProcessPodcast;
use App\Podcast; use Illuminate\Bus\Batch; use Illuminate\Support\Facades\Bus; use Throwable; $batch = Bus::batch([ new ProcessPodcast(Podcast::find(1)), new ProcessPodcast(Podcast::find(2)), new ProcessPodcast(Podcast::find(3)), new ProcessPodcast(Podcast::find(4)), new ProcessPodcast(Podcast::find(5)), ])->then(function (Batch $batch) { // All jobs completed successfully... })->catch(function (Batch $batch, Throwable $e) { // First batch job failure detected... })->finally(function (Batch $batch) { // The batch has finished executing... })->dispatch(); return $batch->id; Другие изменения Также в этом релизе были добавлены closure для job dispatch, улучшения artisan serve, обновления Routing Namespace и исправления багов. Полный changelog доступ в документации. https://laravel.com/docs/8.x/releases и в репозитории :) Вместо итогов Этот релиз добавляет удобства в работу, привносит много улучшений. Вместе с тем, нет ощущения, что это был самый сильный релиз Laravel. Изменения по frontend части вызвали достаточно много обсуждений, "вынудив" добавить фиксом старый ui через отдельную библиотеку. Taylor обозначил новый вектор развития фреймворка, с которым многие могут не согласится. Сохранит ли Taylor этот вектор и в следующем релизе? Сохранит ли laravel такие же темпы привлечения людей в свое комьюнити? Время будет единственным судьей. На этом всё. По ссылке ниже вы можете записаться на бесплатный вебинар, в рамках которого мы подробно расскажем о программе курса и процессе обучения, а также ответим на интересующие вас вопросы. оригинал =========== Источник: habr.com =========== Похожие новости:
Блог компании OTUS. Онлайн-образование ), #_laravel, #_programmirovanie ( Программирование ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 20:09
Часовой пояс: UTC + 5