🥮

CakePHP4.3からRouter::prefix()はもう非推奨になりました ちょっとroute.phpの書き方が変わってる、、

2022/02/08に公開
1

新規開発でいつものようにrouteの設定を変更しようとしたときに下記のwarningが出た。

CAKE/Core/functions.php:322
`Router::prefix()` is deprecated, use the non-static method `RouterBuilder::prefix()` instead~~

画面のヘッター部分に思いっきり出るのでスルーも出来ないし、現在まだ最新過ぎて海外記事もほぼ無い

一応githubでissueは立ち上がってました
https://github.com/dereuromark/cakephp-queue/issues/303
やっぱ読む限り4.3以降はwarningを出すようです
ちなみに解決方法もここからページ飛んでいけばあります

だったら公式にも書いてないの?と思い探したところがっつり書いてありました、、見つけられてないだけでした、、
https://book.cakephp.org/4/ja/appendices/4-3-migration-guide.html

Routing
Router::connect(), Router::prefix(), Router::plugin(), Router::scope() は非推奨です。 代わりに、対応する非静的な RouteBuilder メソッドを使用してください。
RouteBuilder::resources() は、'braced' プレースホルダーを使用するルートを生成するようになりました。

他も色々非推奨になってるんですね。

解決方法
今まではこう書いてたものを

Router::prefix( 'admin', function( $routes ) {                                   
    $routes->connect( '/', [ 'controller' => 'Logins', 'action' => 'index'] );       
    $routes->fallbacks( 'DassRoute' );                                             
}); 

静的メソッドで囲うようにする

use Cake\Routing\RouteBuilder;
return static function (RouteBuilder $routes) {
    $routes->prefix('Admin', function (RouteBuilder $builder) {
        $builder->connect('/', ['controller' => 'Logins', 'action' => 'index']);
        $builder->fallbacks();
    });
};

多分この件に関しては日本で初の記事だと思う笑

Discussion