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.
エラー時の画像
サブディレクトリにコントローラやビューをまとめる際は、namespaceも変更する。
例えば、adminディレクトリをsrc/Contorollerの中に作った場合、ディレクトリ構成が変わるため、作成したコントローラのnamespaceも変更する必要がある。
以下の画像は、adminディレクトリ内にPostsControllerを作成した場合のnamespaceの書き方。