CakePHP 4.3にアップデートしたらRouter::prefix()が非推奨となり、Deprecatedエラーが表示される場合の解決方法

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()メソッドを呼び出すように変更することで問題を解決できます。

詳細は公式サイトのマイグレーションガイドを参照してください。

コメント

コメントを残す

お名前(任意)
コメント:新規