Документация Laravel 10.x
Здесь ты найдешь сниппеты по Laravel и полезные советы по веб-разработке.
Примечание Мы стараемся задокументировать каждое возможное изменение, способное вызвать проблемы. Поскольку некоторые из этих изменений могут касаться только отдельных частей фреймворка, лишь часть из них может повлиять на ваше приложение. Хотите сэкономить время? Вы можете использовать Laravel Shift для автоматизации процесса обновления вашего приложения.
Вероятность Воздействия: Высокая
Теперь Laravel требует PHP 8.1.0 или выше.
Теперь Laravel требует Composer 2.2.0 или выше.
Вы должны обновить следующие зависимости в файле composer.json
вашего приложения:
laravel/framework
to ^10.0
laravel/sanctum
to ^3.2
doctrine/dbal
to ^3.0
spatie/laravel-ignition
to ^2.0
laravel/passport
to ^11.0
(Upgrade Guide)Если вы обновляетесь до Sanctum 3.x из серии релизов 2.x, пожалуйста, ознакомьтесь с руководством по обновлению Sanctum.
Кроме того, если вы хотите использовать PHPUnit 10, вы должны удалить атрибут processUncoveredFiles
из раздела <coverage>
файла конфигурации phpunit.xml
вашего приложения. Затем обновите следующие зависимости в файле composer.json
вашего приложения:
nunomaduro/collision
to ^7.0
phpunit/phpunit
to ^10.0
Наконец, изучите любые другие сторонние пакеты, используемые вашим приложением, и убедитесь, что вы используете правильную версию для поддержки Laravel 10.
Вы должны обновить настройку minimum-stability
в файле composer.json
вашего приложения на stable
. Или, поскольку значение minimum-stability
по умолчанию - stable
, вы можете удалить эту настройку из файла composer.json
вашего приложения:
"minimum-stability": "stable",
Вероятность Воздействия: Низкая
Если ваше приложение настраивает "публичный путь", привязывая path.public
в контейнер, вам следует обновить свой код, вызывая метод usePublicPath
, предоставленный объектом Illuminate\Foundation\Application
:
app()->usePublicPath(__DIR__.'/public');
registerPolicies
Вероятность Воздействия: Низкая
Метод registerPolicies
в AuthServiceProvider
теперь вызывается автоматически фреймворком. Следовательно, вы можете удалить вызов этого метода из метода boot
вашего AuthServiceProvider
приложения.
Вероятность Воздействия: Средняя
Поддержка тегов кэша Redis была переписана для улучшения производительности и эффективности хранения. В предыдущих версиях Laravel, устаревшие теги кэша накапливались в кэше при использовании Redis в качестве драйвера кэша вашего приложения.
Однако для правильного удаления устаревших записей тегов кэша, новую команду Artisan cache:prune-stale-tags
Laravel следует запланировать в вашем классе App\Console\Kernel
приложения:
$schedule->command('cache:prune-stale-tags')->hourly();
Вероятность Воздействия: Средняя
База данных "выражений" (обычно создаваемых через DB::raw
) была переписана в Laravel 10.x для предоставления дополнительных возможностей в будущем. Важно отметить, что сырое строковое значение грамматики теперь должно быть получено с использованием метода getValue(Grammar $grammar)
выражения. Приведение выражения к строке с использованием (string)
больше не поддерживается.
Обычно это не затрагивает конечные приложения; однако, если ваше приложение вручную преобразует выражения базы данных в строки, используя (string)
или вызывает метод __toString
непосредственно на выражении, вам следует обновить свой код и использовать метод getValue
вместо этого:
use Illuminate\Support\Facades\DB; $expression = DB::raw('select 1'); $string = $expression->getValue(DB::connection()->getQueryGrammar());
Вероятность Воздействия: Очень Низкая
Конструктор Illuminate\Database\QueryException
теперь принимает строковое имя подключения в качестве первого аргумента. Если ваше приложение вручную генерирует это исключение, вы должны соответствующим образом изменить свой код.
Вероятность Воздействия: Низкая
При вызове метода ulid
в миграциях без аргументов, теперь столбец будет называться ulid
. В предыдущих версиях Laravel, вызов этого метода без аргументов создавал столбец с ошибочным именем uuid
:
$table->ulid();
Чтобы явно указать имя столбца при вызове метода ulid
, вы можете передать имя столбца методу:
$table->ulid('ulid');
Вероятность Воздействия: Средняя
Устаревшее свойство модели Eloquent $dates
было удалено. Ваше приложение теперь должно использовать свойство $casts
:
protected $casts = [ 'deployed_at' => 'datetime',];
Вероятность Воздействия: Нет
Хотя это не относится к существующим приложениям, стандартный каркас Laravel теперь не содержит директории lang
по умолчанию. Вместо этого, при написании новых приложений Laravel, ее можно опубликовать с использованием команды Artisan lang:publish
:
php artisan lang:publish
Вероятность Воздействия: Средняя
Зависимость Laravel от Monolog была обновлена до Monolog 3.x. Если вы взаимодействуете напрямую с Monolog в вашем приложении, вам следует ознакомиться с руководством по обновлению Monolog.
Если вы используете сторонние службы регистрации ошибок, такие как BugSnag или Rollbar, вам может потребоваться обновить эти сторонние пакеты до версии, поддерживающей Monolog 3.x и Laravel 10.x.
Bus::dispatchNow
Вероятность Воздействия: Низкая
Устаревшие методы Bus::dispatchNow
и dispatch_now
были удалены. Вместо этого ваше приложение должно использовать методы Bus::dispatchSync
и dispatch_sync
соответственно.
Вероятность Воздействия: Опционально
В новых приложениях Laravel свойство $routeMiddleware
класса App\Http\Kernel
было переименовано в $middlewareAliases
для лучшего отражения его назначения. Вы можете переименовать это свойство в своих существующих приложениях, однако это не обязательно.
Вероятность Воздействия: Низкая
При вызове метода 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
соответственно. Вы можете узнать больше о мокировании через фейки в соответствующей документации для компонента, который вы пытаетесь подделать.
Вероятность Воздействия: Очень Низкая
При написании правил валидации на основе замыканий, повторный вызов обратного вызова $fail
теперь добавит сообщения в массив, а не перезаписывать предыдущее сообщение. Обычно это не повлияет на ваше приложение.
Кроме того, обратный вызов $fail
теперь возвращает объект. Если вы ранее использовали типизацию возвращаемого типа замыкания в вашем правиле валидации, это может потребовать обновления вашей типизации:
public function rules(){ 'name' => [ function ($attribute, $value, $fail) { $fail('validation.translation.key')->translate(); }, ],}
Вероятность Воздействия: Очень Низкая
В рамках форм-запросов метод after
теперь зарезервирован Laravel. Если ваши форм-запросы определяют метод after
, этот метод следует переименовать или изменить для использования новой функции "после валидации" форм-запросов Laravel.
Мы также призываем вас просмотреть изменения в репозитории Laravel. Хотя многие из этих изменений не требуются, вы можете решить сохранить эти файлы в синхронизации с вашим приложением. Некоторые из этих изменений будут охвачены в данном руководстве по обновлению, но другие, такие как изменения в файлах конфигурации или комментариях, могут не быть охвачены.
Вы можете легко просмотреть изменения с помощью средства сравнения GitHub и выбрать, какие обновления важны для вас. Однако многие из изменений, показанных инструментом сравнения GitHub, обусловлены принятием PHP-нативных типов в нашей организации. Эти изменения обратно совместимы, и их принятие во время миграции к Laravel 10 является добровольным.