Laravel 5.6 — обзор и 12 основных изменений в новой версии

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

Laravel 5.6 привносит значительные улучшения в систему логирования существовавшую в Laravel до этого. Настройки логирования теперь хранятся в файле config/logging.php. С этого момента вы можете легко настроить многоуровневую систему логирования, которая отсылает данные сразу в несколько мест. Например, вы можете настроить так, чтобы все логи с уровнем debug отсылались в дефолтовый laravel.log файл, а сообщения уровня error отсылались вам в Slack/Bugsnag или любое другое место, так что бы вы могли быстро на них отреагировать. Пример:

'channels' => [
  'stack' => [
    'driver' => 'stack',
    'channels' => ['syslog', 'slack'],
  ],
],

Кроме того, теперь вы с легкостью можете настраивать существующие каналы логирования с помощью новой функции «tap». С этими и другими нововведениями вы можете ознакомится на странице с полной документацией.

Single-Server Task Scheduling

Чтобы использовать данную функцию, вы должны использовать memcached или redis драйверы кэша в качестве дефолтового драйвера для вашего проэкта. В дополнение: все серверы должны использовать один и тот же сервер в качестве кэширующего сервера.

Теперь вы можете ограничить выполнение ваших заданий (очередей) только одним сервером (в случае если в проэкте используется несколько серверов). Например, представим, что у нас есть задание, которое генерирует отчет каждую пятницу ночью. Если запуск этой задачи настрое на 3х ваших серверах, то отчет сгенерируется 3 раза! Не хорошо.

Используйте метод onOneServer чтобы указать что задание должно быть выполнено только на одном сервере. Первый сервер который получит это задание — заблокирует его так, чтобы другие серверы не смогли его выполнить:

$schedule->command('report:generate')
    ->fridays()
    ->at('17:00')
    ->onOneServer();

Динамический Rate Limit для API

Ранее, когда вы указывали rate limit для группы роутов, вам приходилось указывать жестко заданное значение, которое нельзя изменить в production во время работы:

Route::middleware('auth:api', 'throttle:60,1')->group(function () {
  Route::get('/user', function () {
    //
  });
});

С выходом Laravel 5.6 все меняется. Теперь вы можете указывать динамическое максимальное кол-во запросов, которое будет браться из модели авторизованного пользователя. Например, если в модели User есть поле rate_limit, то вы можете указать его в качестве аргумента для middleware throttle, и максимальное кол-во запросов для данного пользователя будет браться из этого поля:

Route::middleware('auth:api', 'throttle:rate_limit,1')->group(function () {
  Route::get('/user', function () {
  //
  });
});

Новые классы для Broadcast системы

Если ваш проэкт использует множество каналов для оповещения пользователей (broadcast channels), ваш файл routes/channels.php может стать слишком «толстым». Так что теперь, вместо использования замыканий для ваших каналов, вы можете использовать классы. Сгенерировать класс для канала можно с помощью новой artisan команды make:channel, которая создаст новый файл класса в папке App/Broadcasting.

$ php artisan make:channel OrderChannel

Далее вам нужно зарегистрировать ваш канал в routes/channels.php файле:

use App\Broadcasting\OrderChannel;
Broadcast::channel('order.{order}', OrderChannel::class);

И наконец, разместите бизнес логику в методе join вашего нового класса. В методоте join вы можете использовать все тоже самое, что ранее использовали в замыканиях. Ну и конечно, как и везде в Laravel, вам доступен Model Binding в этом методе.

namespace App\Broadcasting;

use App\User;
use App\Order;

class OrderChannel
{
  /**
  * Create a new channel instance.
  *
  * @return void
  */
  public function __construct()
  {
    //
  }
  /**
  * Authenticate the user's access to the channel.
  *
  * @param \App\User $user
  * @param \App\Order $order
  * @return array|bool
  */
  public function join(User $user, Order $order)
  {
    return $user->id === $order->user_id;
  }
}

Улучшенная сериализация моделей

В предыдущих версиях Laravel, сериализованные модели неправильно восстанавливали свои «relation» связи при десериализации. В Laravel 5.6, «relations» которые были загруженны до сериализации, теперь автоматически (и правильно) загружаются при десериализации.

Поддержка алгоритма Argon2 для хеширования паролей

Если вы используете PHP 7.2.0 или выше, теперь вы можете использовать алгоритм Argon2 для хеширования паролей. Настроить дефолтовый драйвер для хеширования можно в новом конфигурационном файле config/hashing.php.

Bootstrap 4

Все дефолтовые html шаблоны переписаны с использование Bootstrap 4 фреймворка. Так же для пагинации теперь по-дефолту используется шаблон Bootstrap 4.

Добавить комментарий