CakePHP ルーティングのやり方

ルートディレクトリの中で、ルーティングする

例:「/」 = トップページ にアクセスした場合、Pagesコントローラのindexアクションに飛ばす。

$routes->connect('/', ['controller' => 'Pages', 
'action' => 'index']);
$routes->fallbacks(DashedRoute::class);

/ $routes->connect('パスを書く', ['controller' => 'コントローラ名', 
'action' => 'アクション名']);

サブディレクトリに対してルーティングする

例:admin/posts/viewにアクセスした場合、admin/posts/indexに飛ばす。

サブディレクトリに対してルーティングする場合は、Router::prefixにする。

Router::prefix('admin', function (RouteBuilder $routes) {
   $routes->connect('/posts/view', 
   ['controller' => 'Posts', 'action' => 'index']);
   $routes->fallbacks(DashedRoute::class);
});

/ Router::prefix('サブディレクトリ名', function (RouteBuilder $routes) {
/   $routes->connect('パス(サブディレクトリ名は不要)', 
['controller' => 'コントローラ名', 'action' => 'アクション名']);
/   $routes->fallbacks(DashedRoute::class);
/ });

$routes->fallbacks(DashedRoute::class);を必ずつける

ルートの記述をしたあとの行に以下のコードを必ずつける。

$routes->fallbacks(DashedRoute::class);

複数のルートの記述をする場合は、一番最後につけるだけでいいっぽい。
1個書く度にこれを書く必要はないってことね。

つけないとエラーが出るので注意。

エラー例:

Missing Route
Cake\Routing\Exception\MissingRouteException

Error: A route matching "array ( 'controller' => 'Posts', 'action' => 'index', 'plugin' => NULL, '_ext' => NULL, )" could not be found.

エラー時の画像

画像2

サブディレクトリにコントローラやビューをまとめる際は、namespaceも変更する。

例えば、adminディレクトリをsrc/Contorollerの中に作った場合、ディレクトリ構成が変わるため、作成したコントローラのnamespaceも変更する必要がある。

以下の画像は、adminディレクトリ内にPostsControllerを作成した場合のnamespaceの書き方。

キャプチャ


いいなと思ったら応援しよう!