首页 > PHP开源 > 反向路由和分页–kohana3使用手册

反向路由和分页–kohana3使用手册

2011年2月11日 发表评论 阅读评论

Kohana 3 中路由中最牛逼的事之一就是你能按定义好的路由属性自动生成一个URL链接

这就允许你改变路由的模式,并且把它应用在控制器的两端,无论何处路由都能生成控制器

反向路由示例

按下面例子在你的 bootstrap.php 内设置路由

Route::set(‘article_posts’, ‘article/read(/<id>(/<title>(/<page>)))’, array(‘id’ => ‘[0-9]+’, ‘page’ => ‘[0-9]+))

->defaults(array(

‘controller’                              => ‘article’,

‘action’                                   => ‘view’,

‘id’                                          => NULL,

‘title’                                       => NULL,

‘page’                                     => NULL,

));

将它反向路由!

$route = Route::get(‘article_posts’)->uri(array(‘id’ => 35, ‘title’ => ‘my-test-article’, ‘page’ => 2));

echo $route;

结果是:

article/read/35/my-test-article/2

现在让我们说,我们决定要改变URL中显示页面的方式,所以我们改变 article_posts 路由

Route::set(‘article_posts’, ‘article/read(/<id>(/<title>(/?page=<page>)))’, array(‘id’ => ‘[0-9]+’, ‘page’ => ‘[0-9]+’))

->defaults(array(

‘controller’                              => ‘article’,

‘action’                                   => ‘view’,

‘id’                                          => NULL,

‘title’                                       => NULL,

‘page’                                     => NULL,

));

输出它:

$route = Route::get(‘article_posts’)->uri(array(‘id’ => 35, ‘title’ => ‘my-test-article’, ‘page’ => 2));

echo $route;

结果是:

article/read/35/my-test-article/?page=2

哈哈,做得好!

路由和分页

另一个关于反向路由牛逼的事情就是你可以使用它们为你分页!如果你想尝试这个例子,先确认下你有分页模块(pagination),并且在你的 bootstrap.php 中启用了它。(也就是在bootstrap.php中去掉了 pagination前面的注释)

例如,在我们的 Controller_Article中,我们有 action_view() 动作

public function action_view()
{
	$article['pages'] = 5;

	$pagination = Pagination::factory(array(
		  'current_page'   => array('source' => 'route', 'key' => 'page'),
		  'total_items'    => $article['pages'],
		  'items_per_page' => 1,
		  'view'           => 'pagination/basic',
		  'auto_hide'      => FALSE,
	  ));

	echo $pagination;
}

现在,当我们浏览页面,你就能看到分页已经为我们生成了设置的非常好的链接,哈哈!

分类: PHP开源 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.