路由

一、示例
先让我们看完一个示例后再做介绍。
<?
ini_set( "display_errors" , "1" );
define( "ROOT" , dirname( __FILE__ ) );
set_include_path( 
				    "." . PATH_SEPARATOR .
				    ROOT."/lib".
				    PATH_SEPARATOR . get_include_path() 
			   );

require_once 'Rong/Controller/Route.php';

$route = new Rong_Controller_Route();

$route->add( "product-:num.html","Index/router/$1" );
$route->add("user/:num/:word/:any.html" , "Index/user_router/$1/$2/$3" );
$route->add( 'article/([0-9]{3,4})/([a-zA-Z]{1,3})\.html\?id=:num' , 'Index/article_router/$1/$2/$3' );

$route->start();


require_once 'Rong/Controller/Guide.php';
$guide = new Rong_Controller_Guide();
$guide->setControllersDir( ROOT . "/application/controllers");
$guide->start();				  

		
		  
?>

实现路由的方法是在入口页index.php的 Rong_Controller_Guide()的实例调用 start()方法之前,实例化 Rong_Controller_Route()对象。 并调用该对象的 add( 当前uri, 转发到uri );以添加一个路由路由采用正则替换。
关键字
:num 代表一个数字。
:word 代表一个word
:any 代表任意字符
先看如下代码:
$route->add( "article/([0-9]{3,4})/([0-9]{1,2}).html" , "index/uri/$1/$2" );
然后访问:/index.php/article/323/32.html
你会发现你的网址被转发到 /index/uri/323/32 这里来了。这样就实现了伪静态
再试试带有?查询字符的路由:
/index.php/article/323/abc.html?id=333
$route->add( 'article/([0-9]{3,4})/([a-zA-Z]{1,3})\.html\?id=:num' , 'Index/article_router/$1/$2/$3' );