ルーティング
ルーティング
名前の変更
ルーティングの一般的な役割は、コントローラとそのアクションの名前を変更すること。
/users/some_action/5 でUsersコントローラにアクセスするのではなく、/cooks/some_action/5でアクセスすることができる。
<?php $routes->connect( '/cooks/:action/*', ['controller' => 'Users'] ); ?>
connectメソッド
connectメソッドには3つの引数(URL, ルーティング, オプション)を渡す。
<?php $routes->connect( '/url/template', // URL ['targetKey' => 'targetValue'], // ターゲット ['option' => 'matchingRegex'] // オプション ); ?>
基本的なルーティング
Articles#index
以下は2つともArticlesControllerのindexアクションを実行するルーティング。
スコープつきルートビルダーの方が、Articlesコントローラの他のアクションのルーティングを記載する場合にコードが簡潔になる。
<?php use Cake\Routing\Router; // スコープ付きルートビルダーを使用。 Router::scope('/', function ($routes) { $routes->connect('/', ['controller' => 'Articles', 'action' => 'index']); }); // static メソッドを使用。 Router::connect('/', ['controller' => 'Articles', 'action' => 'index']); ?>
Articles#view
ArticlesControllerのviewアクションへのルーティング。
/articles/15のようなURLを受け取り、view(15)を呼び出す。
<?php Router::scope('/', function ($routes) { $routes->connect('/articles/*', ['controller' => 'Articles', 'action' => 'view']); }); ?>
スターマッチャーではなくプレースホルダーを使うことでURL部分のバリデーションができる(setPatterns)。最後にidプレースホルダーをview関数の引数として渡す(setPass)。
<?php $routes->connect('/articles/:id', ['controller' => 'Articles', 'action' => 'view']) ->setPatterns(['id' => '\d+']) ->setPass(['id']); ?>
HTTPメソッドの指定
以下の例では、GETリクエストとPOSTリクエストを許可する。
<?php $routes->connect('...')->setMethods(['GET', 'POST']) ?>
プレフィックスルーティング
Router::prefixでプレフィックスルーティングする。以下は管理画面のルーティング例。
<?php Router::prefix('admin', function ($routes) { $routes->connect('/', ['controller' => 'Pages', 'action' => 'index']); $routes->connect('/new', ['controller' => 'Pages', 'action' => 'new']); });
$routes->prefixでプレフィックスをネストする
<?php Router::prefix('manager', function ($routes) { $routes->prefix('admin', function ($routes) { $routes->connect('/:controller'); }); }); ?>
connectのprefixオプションでルーティング先のコントローラのプレフィックスを明示する
<?php $routes->connect('/EngineUpdate', ['prefix' => 'Api/System', 'controller' => 'Engine', 'action' => 'update']); // Controllers/Api/System/EnginesControllerにルーティングする }); ?>
Restfulなルーティング
$routes->resources('hoge')によって、HogeControllerのindex, view, add, edit, deleteアクションへのルーティングが定義される。
<?php Router::scope('/', function ($routes) { $routes->setExtensions(['json']); // レスポンスデータの形式を指定 $routes->resources('Recipes'); }); ?>
ネストされたリソースのルーティング
<?php $routes->resources('Articles', function ($routes) { $routes->resources('Comments'); }); ?>
一部のアクションのみを定義
<?php $routes->resources('Recipes', ['only' => ['index']]); ?>