Router クラス

Router クラスは、渡されたリクエストと定義されたルートに従い、どのコントローラが読み込まれるかを決定します。

process(\Request $request, $route = true)

process メソッドは、request オブジェクトを受け取り、リクエストに含まれる URI から、マッチするルートを見つけようとします。 もし、どのルートにもマッチしなかった場合、router は、URI の中の情報に基づいた新しいルート、および controller/method や module/controller/method といった URI スキーマを作成します。 決められたルートが有効かどうかはチェックされません。

静的 はい
パラメータ
パラメータ デフォルト 説明
$request 必須 有効な Request オブジェクト。
$route true もし 'true' の場合、読み込まれたルートはマッチを見つけるために使われます。もし 'false' の場合、読み込まれたルートは無視され新しいルートが構築されます。 これは、URL からルーティングできていないコントローラへの HMVC 呼び出しに使われます。
返り値 Route オブジェクト、または有効な route オブジェクトが構築できなければ null

通常の使用方法では、このメソッドを必要としません。これは、コントローラを読み込むために、 フレームワークの内部で使用されます。

add($path, $options = null, $prepend = false, $case_sensitive = null)

add メソッドは、実行時に手動で新しいルートを追加することができます。 正常な URI スキームでたどることができないコントローラを読み込みたい、または routes.php の設定ファイル以外のソースからルートを読み込みたければ、 これが必要になるかもしれません。

静的 はい
パラメータ
パラメータ デフォルト 説明
$path 必須 マッチさせたい URI パス。これは、routes.php にあるルート定義の左側です。
$options string|array|Route $path に対しての変換、HTTP メソッドルーティングの配列 (routes.php にあるルート定義の右側のように) 、または Route インスタンス。
$prepend false もし true の場合、既に読み込まれているルートの先頭に新しいルートを追加します。
$case_sensitive null もし false の場合、新しいルートは URI の大文字小文字を区別しないとしてマッチさせます。もし true の場合、マッチは大文字小文字を区別します。もし指定がなければ、設定されているデフォルトが使われます。
返り値 void
// 新しいルート 'this/that' => 'something/else' を読み込む
Router::add('this/that', 'something/else');

// 大文字小文字を区別する
Router::add('this/that', 'something/else', true);

// 大文字小文字を区別しない Route インスタンスを手動で作成する
$path = 'this/that';
Router::add($path, new Route($path, 'something/else', false));

get($name, $named_params = array())

get メソッドは、名前付きルートに対してリバースルーティングをすることができます。 渡された名前に基づいて、定義されているパスを検索し、ビューの中で使用できる URI を返します。 これは、あなたがルートを変更すれば、ビューの中のリンクがその都度更新されるということです。

静的 はい
パラメータ
パラメータ デフォルト 説明
$name null 読み込むルートの名前。
$named_params array() 作成した URI に追加するパラメータの配列。
返り値 bool|array
// このようにルートを定義した場合:
return array(
	'_root_'  => 'welcome/index',  // デフォルトルート
	'_404_'   => 'welcome/404',    // メインの 404 ルート

	'hello(/:name)?' => array('welcome/hello', 'name' => 'hello'),
);

// この呼び出しは 'http://your_base_url/welcome/hello' を返す
echo Router::get('hello');

ルートに名前付きパラメータ、正規表現、または両方の組み合わせを含めて、この様にもできます。

// ルートをこの様に定義した場合:
return array(
    'thread/(?P<thread_id>\d+?)/post' => array('post', 'name' => 'post'),
);

// これらは 'thread/1/post' を返す:
echo Router::get('post', array('thread_id' => 1));
echo Router::get('post', array('$1' => 1));
echo Router::get('post', array(1));

// ルートをこの様に定義した場合:
return array(
    'country/(?P<country>\d+?)/state/(?P<state>\d+?)/location' => array('location', 'name' => 'location'),
);

// これらは 'country/japan/state/tokyo/location' を返す:
echo Router::get('location', array('country' => 'japan', 'state' => 'tokyo'));
echo Router::get('location', array('$1' => 'japan', '$2' => 'tokyo'));
echo Router::get('location', array('japan', 'tokyo'));
echo Router::get('location', array('country' => 'japan', 'tokyo'));
echo Router::get('location', array('$1' => 'japan', 'tokyo'));

ルートに従来の正規表現と名前付きパラメータまたは正規表現ショートカットが混在して含まれている場合、 それらが共に変換されて、予期しない結果になってしまうかもしれないということに注意してください。

// ルートをこの様に定義した場合:
return array(
	'hello/(:name)(/:segment)' => array('welcome/user', 'name' => 'user'),
);

// "(/:segment)" は "article" によって中身が完全に変換されてしまうことに注意してください、
// したがって、この呼び出しは 'http://your_base_url/welcome/user/johnarticle' を返す。
echo Router::get('user', array('name' => 'john', 'article'));

delete($path, $case_sensitive = null)

delete メソッドは、実行時に手動で既にあるルートを削除します。

静的 はい
パラメータ
パラメータ デフォルト 説明
$path 必須 マッチさせたい URI パス。これは、routes.php にあるルート定義の左側です。
$case_sensitive null もし false の場合、指定したルートパスは URI の大文字小文字を区別しないとしてマッチさせます。もし true の場合、マッチは大文字小文字を区別します。もし指定がなければ、設定されているデフォルトが使われます。
返り値 void
// 'this/that' に対するルーティングを削除する
Router::delete('this/that');

// 大文字小文字を区別する
Router::delete('this/that', true);

// module controller への全てのルーティングを削除する
Router::delete('module/controller(:any)');