Мы постарались задокументировать все возможные критические изменения. Поскольку некоторые из них находятся в малоизвестных частях фреймворка, только часть этих изменений может повлиять на ваше приложение. Приблизительное время обновления: 10 минут.
Требуется PHP 8.1
Новая минимальная версия PHP теперь 8.1.0.
Требуется Composer 2.2.0
Laravel теперь требует Composer 2.2.0 или выше.
Обновление зависимостей
Composer
Обновите следующие зависимости в своем файле composer.json
laravel/framework
до^10.0
spatie/laravel-ignition
до^2.0
Минимальная стабильность
Вы должны обновить настройку minimum-stability
в composer.json
до stable
:
"minimum-stability": "stable",
КЭШ
Теги кэша Redis
Поддержка тегов кеша Redis была переписана для повышения производительности и эффективности хранения. В предыдущих версиях Laravel устаревшие теги накапливались в кеше при использовании Redis в качестве драйвера кеша вашего приложения.
Чтобы правильно удалить устаревшие теги кеша, новая artisan-команда cache:prune-stale-tags
должна быть запланирована в классе App\Console\Kernel
вашего приложения:
$schedule->command('cache:prune-stale-tags')->hourly();
База данных
Database Expressions
«Выражения» базы данных (обычно генерируемые с помощью DB::raw
) были переделаны для того, чтобы предложить дополнительный функционал в будущем. Преобразование выражения в строку с помощью (string)
больше не поддерживается — «сырое» строковое значение теперь должно быть получено с помощью getValue(Grammar $grammar)
.
Как правило, это не повлияет на имеющиеся приложения. Но, если вы вручную преобразуете выражения с помощью (string)
или напрямую вызываете метод __toString
для него, то вам следует обновить свой код и, вместо этого, вызывать метод getValue
:
use Illuminate\Support\Facades\DB; $expression = DB::raw('select 1'); $string = $expression->getValue(DB::connection()->getQueryGrammar());
Query Exception конструктор
Конструктор Illuminate\Database\QueryException
теперь принимает строку с именем подключения в качестве первого аргумента. Если ваше приложение выбрасывает это исключение, то необходимо исправить ваш код.
ULID Columns
Когда миграции вызывают метод ulid
без каких-либо аргументов, то поле будет называться ulid
. В предыдущих версиях Laravel создавалось поле uuid
:
$table->ulid();
Чтобы явно указать имя поля при вызове метода ulid, вы можете передать его имя методу:
$table->ulid('ulid');
Eloquent
Свойства «Dates» в модели
Устаревшее свойство Eloquent-модели $dates
удалено. Теперь ваше приложение должно использовать свойство $casts
:
protected $casts = [ 'deployed_at' => 'datetime', ];
Метод отношений getBaseQuery
Метод getBaseQuery
класса Illuminate\Database\Eloquent\Relations\Relation
был переименован в toBase
.
Локализация
Директория с языками
Скелет приложения Laravel по умолчанию больше не содержит директорию lang
. Теперь, при необходимости, её можно создать при помощи artisan-команды lang:publish:
php artisan lang:publish
Логирование
Monolog 3
Monolog был обновлён до версии 3.x
. Если вы напрямую взаимодействуете с Monolog в своем приложении, вам следует ознакомиться с руководством по обновлению Monolog.
Очереди
Метод Bus::dispatchNow
Устаревшие методы Bus::dispatchNow
и dispatch_now
были удалены. Вместо этого ваше приложение должно использовать соответственно методы Bus::dispatchSync
и dispatch_sync
.
Маршрутизация
Middleware Псевдоним
Свойство $routeMiddleware
класса App\Http\Kernel
было переименовано в $middlewareAliases
, чтобы лучше отражать его назначение. Вы можете переименовать это свойство в существующих приложениях, но это не обязательное требование.
Возвращаемые значения ограничителя скорости
При вызове метода RateLimiter::attempt
значение, возвращаемое замыканием, теперь будет возвращено и методом. Если замыкание ничего не возвращает или возвращает null
, то метод вернет true
:
$value = RateLimiter::attempt('key', 10, fn () => ['example'], 1); $value; // ['example']
Метод Redirect::home
Устаревший метод Redirect::home
был удален. Вместо этого ваше приложение должно редиректить на явно указанный маршрут:
return Redirect::route('home');
Тестирование
Имитация сервиса
Устаревший трейт MocksApplicationServices
был удален из фреймворка. Он предоставлял такие методы тестирования, как expectsEvents
, expectsJobs
и expectsNotifications
.
Если ваше приложение использует эти методы, то мы рекомендуем вам перейти на Event::fake
, Bus::fake
и Notification::fake
, соответственно.
Валидация
Сообщения правил валидации с замыканиями
При написании кастомных правил проверки на основе замыкания, вызов колбэка $fail
более одного раза теперь будет добавлять сообщения в массив, а не перезаписывать предыдущее сообщение. Это не должно повлиять на ваше приложение.
Кроме того, колбэк $fail
теперь возвращает объект. Если вы ранее указывали тип возвращаемого типа, то скорей всего вам нужно обновить ваш тайпхинт:
public function rules() { 'name' => [ function ($attribute, $value, $fail) { $fail('validation.translation.key')->translate(); }, ], }
Разное
Мы также рекомендуем вам ознакомиться с изменениями в репозитории laravel/laravel. Некоторые из них рассмотрены в этом руководстве по обновлению, но другие, например изменения конфигурационных файлов или комментарии — нет. Вы можете легко просмотреть все изменения с помощью GitHub-инструмента сравнения и выбрать, какие их них важны для вас.
Автор: Laravel
Перевод: Алексей Широков
Наш Телеграм-канал — следите за новостями о Laravel.