Введение


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 ещё проще и приятнее в использовании. Так много долгожданных функций, наконец, реализованны и готовы к использованию.


Я думаю, что это отличный релиз, и с нетерпением жду следующие обновления. Надеюсь, что вы чувствуете то же самое!