Что нового в Laravel 7.0

Что нового в Laravel 7.0

Релиз laravel 7

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

Схема управления версиями

Фреймворк Laravel, как и многие другие сторонние пакеты поддерживают семантическую версионность - Semantic Versioning . Основные выпуски платформы выпускаются каждые шесть месяцев (примерно февраль, август), в то время как небольшие выпуски и патчи могут выпускаться довольно часто, хоть каждую неделю. Незначительные и патч-релизы никогда не должны содержать критических изменений.

Конечно при работе с платформой Laravel или ее компонентам вы всегда должны использовать конкретные версии, поскольку основные выпуски Laravel действительно содержат критические изменения, иногда руша совместимость с предыдущими версиями. Однако ларавеловцы всегда стремимся к тому, чтобы мы могли обновиться до новой основной версии за один день или даже меньше.

Политика поддержки

Для выпусков LTS, таких как Laravel 6, исправления ошибок предоставляются в течение 2 лет, а исправления безопасности - в течение 3 лет. Эти выпуски предоставляют самое длинное окно поддержки и обслуживания. Для общих выпусков исправления ошибок предоставляются в течение 6 месяцев, а исправления безопасности - в течение 1 года. Для всех дополнительных библиотек, включая Lumen, только последний выпуск получает исправления ошибок. 

Версия
Выпуск
Исправление ошибок до
Исправления безопасности до
5,5 (LTS)
30 августа 2017г.
30 августа 2019г.
30 августа 2020г.
5,6
7 февраля 2018г.
7 августа 2018г.
7 февраля 2019г.
5,7
4 сентября 2018г.
4 марта 2019г.
4 сентября 2019г.
5,8
26 февраля 2019г.
26 августа 2019г.
26 февраля 2020г.
6 (LTS)
3 сентября 2019г.
3 сентября 2021г.
3 сентября 2022г.
7
3 марта 2020г.
3 сентября 2020г.
3 марта 2021г.

Laravel 7

Laravel 7 продолжает улучшения, сделанные в Laravel 6.x. В Laravel 7 представлены пользовательские преобразования Eloquent, увеличение скорости маршрутизации, Laravel Airlock, теги компонентов Blade, fluent операции со строками, HTTP-клиент, ориентированный на разработчиков, поддержка CORS от первого лица, улучшенная область видимости для привязки модели маршрута, настройка заглушки, улучшения очереди базы данных, множественные почтовые драйверы, преобразование времени запроса, новая команда artisan для тестирования и множество других исправлений ошибок и улучшений юзабилити.

Так же стоит учитывать, что минимальная версия PHP теперь PHP 7.2.5 (было 7.2.0).

Laravel Airlock

Laravel Airlock - это официальный пакет для аутентификации по API.

Он предоставляет простую систему аутентификации для SPA, мобильных приложений и простой APIS на основе токенов. Это позволяет каждому пользователю вашего приложения создавать несколько токенов API для своей учетной записи.

Zttp для HTTP-клиентов

С Zttp теперь сделать HTTP-запрос к конечной точке API будет проще и чище. Оболочка Laravel вокруг Guzzle сфокусирована на наиболее распространенных сценариях использования и прекрасном опыте разработчиков. Например, клиент упрощает POST взаимодействие с данными JSON:

use Illuminate\Support\Facades\Http;

$response = Http::withHeaders([
'X-First' => 'foo'
'X-Second' => 'bar'
])->post('http://test.com/users', [
'name' => 'Taylor',
]);

return $response['id'];

Кроме того, HTTP-клиент предоставляет фантастические, эргономичные функции тестирования:

Http::fake([
// Stub a JSON response for GitHub endpoints...
'github.com/*' => Http::response(['foo' => 'bar'], 200, ['Headers']),

// Stub a string response for Google endpoints...
'google.com/*' => Http::response('Hello World', 200, ['Headers']),

// Stub a series of responses for Facebook endpoints...
'facebook.com/*' => Http::sequence()
->push('Hello World', 200)
->push(['foo' => 'bar'], 200)
->pushStatus(404),
]);

Поддержка CORS

Теперь Laravel 7 поддерживает CORS (Cross-Origin Resource Sharing) из коробки. Каждый разработчик сталкивается с проблемой CORS во время разработки API. Теперь Laravel 7 автоматически отвечает на ваш запрос OPTION с вашим настроенным значением. Midleware HandledCors позаботится обо всем, что Laravel 7 предоставляет из коробки.

Пользовательские Eloquent Cast

Пользовательский кастинг Eloquent в Laravel 7 - еще одна интересная особенность. Эти функции дадут вам возможность добавлять ваши собственные касты.

<?php
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
class Json implements CastsAttributes
{
public function get($model, $key, $value, $attributes)
{
return json_decode($value, true);
}
public function set($model, $key, $value, $attributes)
{
return json_encode($value);
}
}

Теперь мы можем использовать наш собственный актерский состав в нашей модели


<?php

namespace App;

use App\Casts\Json;
use Illuminate\Database\Eloquent\Model;

class User extends Model
{

protected $casts = [
'extra' => Json::class,
];
}

Fluent операции над строками

В Laravel 7 вы можете делать более классную и более объектно-ориентированную обработку строк с помощью класса Illuminate\Support\Str

$currentVersion = (string) Str::of('Laravel 6.x');
             ->trim()
        ->replace('6.x', '7.x')
        ->slug();

Теги компонентов Blade 

В Laravel 7 шаблонизатор  Blade был серьезно доработан - добавлен новый функционал. X функции дают вам возможность сделать компонент и связанный с ним класс, который указывает принимаемые данные

НАпример, создание х-компонента


@php($user = $user ?? Auth::user())
@php($size = $size ?? 50)

<img
class="inline-block rounded-full"
src="{{ $user->gravatarUrl($size) }}"
width="{{ $size }}"
height="{{ $size }}"
/>

используем x blade


<x-avatar/>
<x-avatar size="40" />
<x-avatar size="100" />

Касты времени в запросах

Иногда возникает необходимость применить преобразование во время выполнения запроса, например, при выборе необработанного значения из таблицы.


$users = User::select([
'users.*',
'last_posted_at' => Post::selectRaw('MAX(created_at)')->whereColumn('user_id', 'users.id')
])
->withCasts(['last_posted_at' => 'date'])
->get();

Множество почтовых драйверов

Laravel 7 позволит вам настроить несколько почтовых драйверов для одного приложения.


Mail::mailer('noreply')
->to($request->user())
->send(new PostUpdated($post));

Новая команда test для Artisan

В дополнение к phpunit команде вы можете теперь использовать команду test для запуска ваших тестов. Бегущий по тестам Artisan предоставляет прекрасный UX консоли и больше информации о тесте, который в данный момент выполняется. Кроме того, бегун автоматически остановится при первом провале теста:

php artisan test


 Любые аргументы, которые могут быть переданы команде phpunit, также могут быть переданы команде Artisan test:


php artisan test --group=feature

Улучшения скорости маршрутов

Новый метод сопоставления соответствовал кэшированным маршрутам, которые были кэшированы с использованием route:cache был включен в обновленную версию Laravel 7.

Следовательно, это улучшение может дать вам в 2 раза более высокую производительность при сопоставлении маршрутов, чем Laravel 6, при использовании команды Artisan route:cache .

Улучшения привязки модели маршрута

По умолчанию привязка модели маршрута работает с полем id. Теперь вы можете настроить его и изменить, например, по псевдониму ()(


Route::get('posts/{post:slug}', function (App\Post $post) {
return $post;
});

Автоматический Scoping

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


use App\Post;
use App\User;
Route::get('api/users/{user}/posts/{post:slug}', function (User $user, Post $post) {
return $post;
});

Улучшение очереди базы данных

Laravel 7 предоставляет улучшения для приложений, использующих MySQL 8+ в качестве своей очереди с поддержкой базы данных.

Драйвер базы данных теперь можно безопасно использовать в производственных приложениях с большим объемом, используя FOR UPDATE SKIP LOCKED и другие усовершенствования SQL.

Улучшения шаблона почтовой разметки

Почтовый шаблон разметки по умолчанию получил новый, более свежий дизайн, с цветовой палитрой Tailwind CSS. Шаблон можно публиковать и настраивать по своему усмотрению

Настройка заглушки

Команды консоли Artisan make используются для создания различных классов, таких как контроллеры, задания, миграции и тесты. Эти классы создаются с использованием файлов-заглушек, которые заполняются значениями на основе вашего ввода. Однако иногда вы можете захотеть внести небольшие изменения в файлы, созданные Artisan. Для этого Laravel 7 предоставляет команду для публикации наиболее распространенных заглушек для настройки: stub:publish

php artisan stub:publish

Опубликованные заглушки будут находиться в каталоге stubs в корне вашего приложения. Любые изменения, внесенные в эти заглушки, будут отражены при создании соответствующих классов с помощью команд Artisan make.

Конфигурация очереди - maxExceptions

Иногда вам может потребоваться указать, что задание может быть выполнено много раз, но оно не будет выполнено, если повторные попытки инициируются с помощью определенного числа исключений. В Laravel 7 вы можете определить свойство maxExceptions вашего класса работы:

<?php

namespace App\Jobs;

class ProcessPodcast implements ShouldQueue
{
/**
* The number of times the job may be attempted.
*
* @var int
*/
public $tries = 25;

/**
* The maximum number of exceptions to allow before failing.
*
* @var int
*/
public $maxExceptions = 3;

/**
* Execute the job.
*
* @return void
*/
public function handle()
{
Redis::throttle('key')->allow(10)->every(60)->then(function () {
// Lock obtained, process the podcast...
}, function () {
// Unable to obtain lock...
return $this->release(10);
});
}
}

В этом примере задание освобождается на десять секунд, если приложение не может получить блокировку Redis и будет повторяться до 25 раз. Тем не менее, задание не будет выполнено, если сгенерирует три необработанных исключения.


Сергей Мухин

Веб-разработчик со стажем программирования более 6 лет, постоянно учусь, люблю делать новые проекты.

Есть вопросы?

Я почти всегда в режиме онлайн

Связаться со мной