当前位置: 首页 > 文档资料 > FuelPHP 中文文档 >

Router - 类別

优质
小牛编辑
129浏览
2023-12-01

Router 类别根据传递给它的请求,确定哪个控制器需要被载入,并定义路由。

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

process 方法使用一个 request 物件,并将尝试为包含在 request 内的 URI 寻找一个路由配对。 如果没有路由能被配对,路由将建立一个基于 URI 资讯的新路由, 并遵循 控制器/方法 或 模组/控制器/方法 的 URI 格式。它将不检查已决定的路由是否有效!

静态
参数
参数预设描述
$request必要一个有效的 Request 物件。
$routetrue如果为 '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 实例。
$prependfalse如果为 true,新路由将被附加到已载入路由之前。
$case_sensitivenull如果为 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。 这意味着,如果你变更你的路由,在你检视中的连结将被相应地更新。

静态
参数
参数预设描述
$namenull要载入的路由名称。
$named_paramsarray()要被添加到建立的 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_sensitivenull如果为 false,所给的路由将不分大小写针对 URI 配对。
如果为 true,配对将区分大小写。如果没所给,预设配置将被使用。
回传
範例
// 删除 'this/that' 路由
Router::delete('this/that');

// 强制区分大小写
Router::delete('this/that', true);

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