Русский
Русский
English
Статистика
Реклама

Laravel8

Новинки Laravel 8

24.09.2020 18:11:15 | Автор: admin


Привет, хабр! В преддверии старта курса "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 такие же темпы привлечения людей в свое комьюнити? Время будет единственным судьей.


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

Подробнее..

Laravel Jetstream новый скаффолдинг для фреймворка

25.09.2020 02:06:03 | Автор: admin
Релиз Laravel 8 принес с собой новый каркас, позволяющий быстро развернуть систему аутентификации пользователей, которая включает в себя логин, регистрацию, подтверждение по электронной почте, двухфакторную аутентификацию, управление сессиями и командами. Также Jetstream имеет встроенную интеграцию с Laravel Sanctum для аутентификации через API на основе токенов.

image

Выбираем стек


Laravel Jetstream поставляется с двумя стеками для фронтенда Livewire и Inertia.js. Оба стека добавляют реактивности в ваше приложение, разница между ними в том, что Livewire в качестве шаблонизатора использует Blade, а Inertia.js использует Vue. В качестве CSS-фреймворка в обоих случаях используется Tailwind.

Установка


Если мы создаем новый проект, то можем использовать Laravel Installer с флагом --jet. Установка будет интерактивной и предложит выбрать стек и управление командами (teams). После установки требуется выполнить миграции в базу данных:
laravel new project-name --jetphp artisan migrate

В готовый проект следует добавить пакет с помощью Composer:
composer require laravel/jetstream

Далее в зависимости от выбранного стека выбираем одно из двух. Если управление командами не требуется, то флаг --teams нужно убрать.

Livewire:
php artisan jetstream:install livewire --teams

Inertia.js:
php artisan jetstream:install inertia --teams

Завершаем установку установкой NPM-пакетов и миграцией базы:
npm install && npm run devphp artisan migrate

Профиль пользователя


Laravel Jetstream позволяет пользователю заходить в свой профиль, обновлять информацию о себе и даже загружать фото. Отключить возможность установки фотографий можно в config/jetstream.php
image

Двухфакторная аутентификация


После включении двухфакторной аутентификации пользователь должен сохранить коды восстановления, а также отсканировать полученный QR-код с помощью приложения с поддержкой One-Time Password динамического пароля. Это может быть, например, Google Authenticator или 1Password.
image

API


Jetstream интегрирован с Sanctum и позволяет пользователю генерировать токены доступа с различными правами: создание, чтение, обновление и удаление. Отключить эту возможность можно в config/jetstream.php
image

Команды


Если вы установили Jetstream с опцией teams, то получите интерфейс для управления командами. Каждый пользователь может состоять в одной или нескольких командах. По-умолчанию, новый пользователь состоит в команде, которая названа в его честь. Например, для пользователя John, это будет John's Team.

Эту команду пользователь может переименовать или создать дополнительные. Приглашать других пользователей в свою команду можно только зная их email и они должны быть уже зарегистрированы на сайте. Владелец команды назначает роли для остальных участников. Роли могут быть Administrator или Editor. Administrator имеет полные права, когда Editor может только читать, создавать и обновлять. То есть имеет все те же права, кроме удаления.
image
Подробнее..
Категории: Laravel , Laravel8 , Jetstream

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru