Мы постарались задокументировать все возможные критические изменения. Поскольку некоторые из них находятся в малоизвестных частях фреймворка, только часть этих изменений может повлиять на ваше приложение. Приблизительное время обновления: 10 минут.
Требуется PHP 8.1
Новая минимальная версия PHP теперь 8.1.0.
Требуется Composer 2.2.0
Laravel теперь требует Composer 2.2.0 или выше.
Обновление зависимостей
Composer
Обновите следующие зависимости в своем файле composer.json
laravel/frameworkдо^10.0spatie/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.
