Router 类別

Router 类別根據傳遞給它的請求,確定哪个控制器需要被載入,并定義路由。

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

process 方法使用一个 request 物件,并将嘗试为包含在 request 內的 URI 尋找一个路由配對。 如果沒有路由能被配對,路由将建立一个基於 URI 資訊的新路由, 并遵循 控制器/方法 或 模組/控制器/方法 的 URI 格式。它将不檢查已決定的路由是否有效!

靜態
參数
參数 預設 描述
$request 必要 一个有效的 Request 物件。
$route true 如果为 'true',已載入的路由将被用於尋找配對。如果为 'false',已載入的路由将被忽略且一个新的路由将被建構。 这是用於 HMVC 呼叫到無法從 URL 路由的控制器。
回傳 Route 物件,或如果沒有有效的 Route 物件能被建構時 null

正常情況下,你不会需要这个方法, 它在框架內部被用來載入控制器。

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

add 方法能让你在执行階段手动添加新路由。你可能需要此方法, 如果你想要載入不遵循正常 URI 格式的控制器,或如果你想要從 routes.php 配置档案之外的其他來源載入路由。

靜態
參数
參数 預設 描述
$path 必要 要符合的 URI 路徑,这是你的 routes.php 路由定義的左邊。
$options 字串|陣列|Route $path 的轉化、一个變数路由的陣列(就像你的 routes.php 路由定義的右邊)或一个 Route 實例。
$prepend false 如果为 true,新路由将被附加到已載入路由之前。
$case_sensitive null 如果为 false,新路由将不分大小寫針對 URI 配對。
如果为 true,配對将區分大小寫。如果沒給,預設配置将被使用。
回傳
範例
// 載入一个新路由 'this/that' => 'something/else'
Router::add('this/that', 'something/else');

// 強制區分大小寫
Router::add('this/that', 'something/else', true);

// 手动建立一个 實例,該實例将被視为不區分大小寫
$path = 'this/that';
Router::add($path, new Route($path, 'something/else', false));

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

get 方法能让你为具名路由做路由反轉,基於傳遞的名稱, 它将取回定義的路徑,并回傳一个你可以使用在你的檢視中的 URL。 这意味著,如果你變更你的路由,在你檢視中的連結将被相應地更新。

靜態
參数
參数 預設 描述
$name null 要載入的路由名稱。
$named_params array() 要被添加到建立的 URI 的參数陣列。
回傳 布林|陣列
範例
// 如果你的路由是像这樣定義:
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,配對将區分大小寫。如果沒所給,預設配置将被使用。
回傳
範例
// 刪除 'this/that' 路由
Router::delete('this/that');

// 強制區分大小寫
Router::delete('this/that', true);

// 刪除所有指向一个模組控制器的路由
Router::delete('module/controller(:any)');