Документация 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 является добровольным.