Введение
3 марта команда Laravel официально выпустила Laravel 7.0. Как указано в политике поддержки Laravel, это одно из основных обновлений. Хоть этот релиз и не обозначен как LTS, в нём всё равно представлено много новых замечательных функций и исправлений. Обновление будет предоставлять исправление ошибок до 3 сентября 2020 года, а исправления безопасности в течение 1 года до 3 марта 2021 года.
Новые Функции в Laravel 7
X Blade
Laravel 7 доработали шаблонизатор Blade, добавив совершенно новые X функции. Этот пакет предоставляет простой способ рендеринга пользовательских компонентов HTML в ваших представлениях Blade.
Ранее вы должны были писать так:
@include('myAlert', ['type' => 'error', 'message' => $message])
Сейчас, используя x blade, это будет выглядеть так:
<my-alert type="error" :message="$message" />
Настраиваемые Заглушки
Для того, чтобы настроить файлы-заглушки, вам нужно опубликовать их:
php artisan stub:publish
После запуска этой команды в ваш проект будет добавлен новый каталог.
Свободные Операции над Строками
Ранее множество полезных функций для работы со строками предоставлял класс llluminate\Support\str. Laravel 7 теперь предлагает более объектно-ориентированную, свободную библиотеку для работы со строками, построенную поверх этих функций.
Сейчас вы можете создать объект llluminate\Support\Striangable с помощью метода Str::of. Затем к объекту можно применить множество методов для манипулирования строкой:
return (string) Str::of(' Laravel Framework 6.x ')
->trim()
->replace('6.x', '7.x')
->slug();
Zttp для HTTP-клиентов
Zttp — это простая обёртка вокруг Guzzle, задача которой обеспечить максимально приятный опыт разработки при наиболее распространённых сценариях использования. Zttp — новый пакет PHP, который представляет собой обёртку вокруг Guzzle, предназначенную для создания выразительного синтаксиса и упрощения общих случаев использования.
Laravel Airlock
Laravel Airlock — это новый пакет, который обеспечивает лёгкую систему аутентификации для одностраничных приложений (SPA), мобильных приложений и простых API на основе токенов. C помощью пакета Airlock пользователь вашего приложения может создать несколько токенов API для своей учётной записи. Эти токены могут предоставлять способности/области действия, определяющие, какие действия разрешено выполнять токенам.
Несколько Почтовых Драйверов
Laravel 7 позволяет настроить несколько почтовых драйверов для одного приложения. Каждый почтовый драйвер (mailer), настроенный в конфигурационном файле mail, может иметь свои собственные параметры и даже уникальный “транспорт”, позволяющий вашему приложению использовать различные почтовые службы для отправки определённых электронных сообщений.
Кастомные Eloquent Касты (Custom Eloquent Casts)
Классы, которые реализуют этот интерфейс, должны определять методы get и set. Метод get отвечает за преобразование необработанного значения из базы данных в приведённое значение, тогда как метод set должен преобразовать приведённое значение в необработанное значение, которое можно сохранить в базе данных. В качестве примера, мы повторно реализуем встроенный каст json как пользовательский:
<?php
namespace App\Casts;
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
class Json implements CastsAttributes
{
/**
* Cast the given value.
*
* @param \Illuminate\Database\Eloquent\Model $model
* @param string $key
* @param mixed $value
* @param array $attributes
* @return array
*/
public function get($model, $key, $value, $attributes)
{
return json_decode($value, true);
}
/**
* Prepare the given value for storage.
*
* @param \Illuminate\Database\Eloquent\Model $model
* @param string $key
* @param array $value
* @param array $attributes
* @return string
*/
public function set($model, $key, $value, $attributes)
{
return json_encode($value);
}
}
Поддержка Общего Доступа к Ресурсам (CORS)
Laravel может автоматически отвечать на запросы CORS OPTION с настроенными вами значениями. Все параметры CORS могут быть настроены в вашем конфигурационном файле CORS, а запросы OPTIONS будут автоматически обрабатываться связующим программным обеспечением HandleCors, которое по умолчанию включено в ваш глобальный стек связующего ПО.
Касты Времени в Запросах
Иногда нужно применить преобразование при выполнении запроса, например, при выборе необработанного значения из таблицы. Давайте рассмотрим следующий запрос:
$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 ещё проще и приятнее в использовании. Так много долгожданных функций, наконец, реализованны и готовы к использованию.
Я думаю, что это отличный релиз, и с нетерпением жду следующие обновления. Надеюсь, что вы чувствуете то же самое!
snowmage
Airlock уже переименован в Sanctum
Dinver
Тоже сразу в глаза бросилось, интересно связано ли это как то c Apple.
snowmage
Тейлор вроде твитил, что претензии выкатила швейцарская компания Airlock.