在Kohana3中路由查询字符串

时间:2011-01-19 09:51:22

标签: url-routing kohana-3

我正在尝试使用bootstrap.php中的以下条目路由网址http://host/order?servertype=1&plan=1

Route::set('order', 'order(/<action>)?servertype=<id1>&plan=<id2>', array('id1'=>'[0-9]+','id2'=>'[0-9]+'))
  ->defaults(array(
      'controller' => 'order',
      'action' => 'index',
  ));

我收到错误:无法找到匹配URI的路由。我做错了什么?

1 个答案:

答案 0 :(得分:2)

Kohana的路由系统不适用于查询字符串(我相信大多数框架也是如此)。如果你真的需要以这种方式操作查询字符串,那么你将不得不使用mod_rewrite将逻辑从Kohana移出到.htaccess文件中。

但是,执行路由的首选方法是使用分层(路径样式)URL结构,然后将查询字符串用于任何无法以层次方式表示的信息(然后可以通过{{直接从控制器访问) 1}})。

这意味着使用类似$_GET的网址结构和路由方案,如:

http://host/order/<id1>/<id2>

但是,在使用这种类型的URL结构时,最好在URL中使用比普通数字ID更多的描述性标记。因此,您可以考虑使用"slugs"来识别您的服务器类型和计划类型,从而为您提供更具可读性和SEO友好性的网址,例如Route::set('order', 'order(/<action>)/<id1>/<id2>', array('id1'=>'[0-9]+','id2'=>'[0-9]+')) ->defaults(array( 'controller' => 'order', 'action' => 'index', ));