CakePHP 4.3にアップデートしたらRouter::prefix()が非推奨となり、Deprecatedエラーが表示される場合の解決方法
2023年09月30日2023年10月10日 PR
CakePHP4.2からCakePHP4.3をアップデートをおこなったらconfig/routes.phpのRouter::prefix()記述部分でDeprecatedが発生するようになりました。
Deprecated: `Router::prefix()` is deprecated, use the non-static method `RouteBuilder::prefix()` instead. ~/config/routes.php, line: 74 You can disable all deprecation warnings by setting `Error.errorLevel` to `E_ALL & ~E_USER_DEPRECATED`. Adding `config/routes.php` to `Error.ignoredDeprecationPaths` in your `config/app.php` config will mute deprecations from that file only. in ~/vendor/cakephp/cakephp/src/Core/functions.php on line 328
公式サイトにも変更点として記述がありました。
Router::connect(), Router::prefix(), Router::plugin(), Router::scope() は非推奨です。 代わりに、対応する非静的な RouteBuilder メソッドを使用してください。
RouteBuilder::resources() は、'braced' プレースホルダーを使用するルートを生成するようになりました。
参照:https://book.cakephp.org/4/ja/appendices/4-3-migration-guide.html
CakePHP4.3からstaticでprefixを記述しているところはDeprecatedを表示するようになったみたいです。
解決方法
Deprecatedが表示されるソースです。Router::prefix()になります。
$routes->scope('/', function (RouteBuilder $builder) {
Router::prefix('admin', function ($routes) {
$routes->fallbacks('DashedRoute');
$routes->connect('/', ['controller' => 'Top','prefix' => 'Admin']);
});
});
修正後は下記になります。引数の$builderからprefixメソッドを呼び出します。
$routes->scope('/', function (RouteBuilder $builder) {
$builder->prefix('admin', function ($routes) {
$routes->fallbacks('DashedRoute');
$routes->connect('/', ['controller' => 'Top','prefix' => 'Admin']);
});
});
修正は以上になります。Deprecatedが解消されるはずです。
最後に
CakePHP 4.3でのアップデート時にRouter::prefix()がDeprecatedとなり、代わりにRouteBuilder::prefix()を使う必要があります。
今回の修正は$builder引数を使ってprefix()メソッドを呼び出すように変更することで問題を解決できます。
詳細は公式サイトのマイグレーションガイドを参照してください。
コメント
コメントを残す