Идёт обновление сайта. Несколько дней возможны сбои в оформлении и переводах. Документация работает — если страница выглядит сломанной, обновите её позже.

Документация
L Laravel L intervention/image
Войти
Главная Laravel 10.x Руководство по обновлению

Руководство по обновлению

10.x 7 мар 2026 г.

#Изменения с высоким влиянием

#Изменения со средним влиянием

#Изменения с низким влиянием

#Обновление с 9.x до 10.0

#Оценочное время обновления: 10 минут

Примечание

Мы стараемся документировать все возможные критические изменения. Поскольку некоторые из них касаются малоизвестных частей фреймворка, только часть этих изменений может реально повлиять на ваше приложение. Хотите сэкономить время? Вы можете использовать Laravel Shift для автоматизации обновления вашего приложения.

#Обновление зависимостей

Вероятность влияния: высокая

#Требуется PHP 8.1.0

Laravel теперь требует PHP версии 8.1.0 или выше.

#Требуется Composer 2.2.0

Laravel теперь требует Composer версии 2.2.0 или выше.

#Зависимости Composer

В файле composer.json вашего приложения следует обновить следующие зависимости:

Если вы обновляетесь с Sanctum 2.x до 3.x, пожалуйста, ознакомьтесь с руководством по обновлению Sanctum.

Кроме того, если вы хотите использовать PHPUnit 10, удалите атрибут processUncoveredFiles из секции <coverage> в конфигурационном файле phpunit.xml вашего приложения. Затем обновите следующие зависимости в composer.json вашего приложения:

  • nunomaduro/collision до ^7.0
  • phpunit/phpunit до ^10.0

Наконец, проверьте остальные сторонние пакеты, используемые вашим приложением, и убедитесь, что вы используете версии, совместимые с Laravel 10.

#Минимальная стабильность

В файле composer.json вашего приложения следует обновить параметр minimum-stability на stable. Либо, поскольку значение по умолчанию для minimum-stabilitystable, вы можете удалить этот параметр из composer.json:

"minimum-stability": "stable",

#Приложение

#Привязка публичного пути

Вероятность влияния: низкая

Если ваше приложение настраивает "публичный путь", привязывая path.public в контейнер, следует обновить код, чтобы использовать метод usePublicPath, предоставляемый объектом Illuminate\Foundation\Application:

app()->usePublicPath(__DIR__.'/public');

#Авторизация

#Метод registerPolicies

Вероятность влияния: низкая

Метод registerPolicies в AuthServiceProvider теперь вызывается автоматически фреймворком. Поэтому вызов этого метода можно удалить из метода boot вашего AuthServiceProvider.

#Кеширование

#Теги кеша Redis

Вероятность влияния: средняя

Использование Cache::tags() рекомендуется только для приложений с драйвером кеша Memcached. Если вы используете Redis в качестве драйвера кеша, рассмотрите возможность перехода на Memcached или обновления приложения до Laravel 12.30.0.

#База данных

#Выражения базы данных

Вероятность влияния: средняя

Выражения базы данных (обычно создаваемые через DB::raw) были переписаны в Laravel 10.x для расширения функциональности в будущем. Теперь сырой строковый SQL должен извлекаться через метод getValue(Grammar $grammar) выражения. Приведение выражения к строке через (string) больше не поддерживается.

Обычно это не влияет на конечные приложения; однако, если ваше приложение вручную приводит выражения базы данных к строкам через (string) или вызывает метод __toString напрямую, следует обновить код, чтобы использовать метод getValue:

use Illuminate\Support\Facades\DB;

$expression = DB::raw('select 1');

$string = $expression->getValue(DB::connection()->getQueryGrammar());

#Конструктор исключения Query

Вероятность влияния: очень низкая

Конструктор Illuminate\Database\QueryException теперь принимает строку с именем соединения в качестве первого аргумента. Если ваше приложение вручную выбрасывает это исключение, обновите код соответствующим образом.

#Колонки ULID

Вероятность влияния: низкая

При вызове метода ulid в миграциях без аргументов колонка теперь будет называться ulid. В предыдущих версиях Laravel вызов этого метода без аргументов создавал колонку с ошибочным именем uuid:

$table->ulid();

Чтобы явно указать имя колонки при вызове метода ulid, передайте имя колонки в метод:

$table->ulid('ulid');

#Eloquent

#Свойство "Dates" модели

Вероятность влияния: средняя

Устаревшее свойство $dates модели Eloquent было удалено. Теперь следует использовать свойство $casts:

protected $casts = [
    'deployed_at' => 'datetime',
];

#Локализация

#Каталог языков

Вероятность влияния: отсутствует

Хотя это не влияет на существующие приложения, в шаблоне Laravel больше по умолчанию нет каталога lang. Вместо этого при создании новых приложений каталог можно опубликовать с помощью Artisan-команды lang:publish:

php artisan lang:publish

#Логирование

#Monolog 3

Вероятность влияния: средняя

Зависимость Monolog в Laravel обновлена до версии 3.x. Если вы напрямую взаимодействуете с Monolog в приложении, ознакомьтесь с руководством по обновлению Monolog.

Если вы используете сторонние сервисы логирования, такие как BugSnag или Rollbar, возможно, потребуется обновить эти пакеты до версий, поддерживающих Monolog 3.x и Laravel 10.x.

#Очереди

#Метод Bus::dispatchNow

Вероятность влияния: низкая

Устаревшие методы Bus::dispatchNow и dispatch_now удалены. Вместо них следует использовать методы Bus::dispatchSync и dispatch_sync соответственно.

#Возвращаемое значение хелпера dispatch()

Вероятность влияния: низкая

Вызов dispatch с классом, который не реализует Illuminate\Contracts\Queue, ранее возвращал результат метода handle этого класса. Теперь он возвращает экземпляр Illuminate\Foundation\Bus\PendingBatch. Для прежнего поведения используйте dispatch_sync().

#Маршрутизация

#Псевдонимы middleware

Вероятность влияния: по желанию

В новых приложениях Laravel свойство $routeMiddleware класса App\Http\Kernel переименовано в $middlewareAliases для лучшего отражения назначения. Вы можете переименовать это свойство и в существующих приложениях, но это не обязательно.

#Возвращаемые значения Rate Limiter

Вероятность влияния: низкая

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

#Валидация

#Сообщения правил валидации на основе Closure

Вероятность влияния: очень низкая

При написании пользовательских правил валидации на основе closure вызов callback $fail более одного раза теперь добавляет сообщения в массив, а не перезаписывает предыдущее. Обычно это не повлияет на ваше приложение.

Кроме того, callback $fail теперь возвращает объект. Если ранее вы указывали тип возвращаемого значения валидационного closure, возможно, потребуется обновить типизацию:

public function rules()
{
    'name' => [
        function ($attribute, $value, $fail) {
            $fail('validation.translation.key')->translate();
        },
    ],
}

#Сообщения валидации и правила на основе Closure

Вероятность влияния: очень низкая

Ранее можно было передать массив в callback $fail для назначения сообщения об ошибке другому ключу. Теперь следует передавать ключ первым аргументом, а сообщение об ошибке — вторым:

Validator::make([
    'foo' => 'string',
    'bar' => [function ($attribute, $value, $fail) {
        $fail('foo', 'Something went wrong!');
    }],
]);

#Метод After в Form Request

Вероятность влияния: очень низкая

В form request метод after теперь зарезервирован Laravel. Если в ваших form request определён метод after, его следует переименовать или изменить, чтобы использовать новую функцию "после валидации" в form request Laravel.

#Разное

Рекомендуем также ознакомиться с изменениями в репозитории laravel/laravel на GitHub. Многие из этих изменений необязательны, но вы можете синхронизировать эти файлы с вашим приложением. Некоторые изменения описаны в этом руководстве, другие, например изменения в конфигурационных файлах или комментариях — нет.

Вы можете легко просмотреть изменения с помощью инструмента сравнения GitHub и выбрать важные для вас обновления. Однако многие изменения связаны с внедрением в организации нативных типов PHP. Эти изменения обратно совместимы, и их внедрение при миграции на Laravel 10 — опционально.