通过RewriteRouter写出漂亮的URL
这一切都只要在index.php里添加几句代码就可以实现,也就是那个入口文件。
首先创建一个RewriteRouter实例
$router = new Zend_Controller_RewriteRouter()
然后设置路由的基本路径,这一步是必须的。
$router->setRewriteBase('/')
开始了,最核心的地方添加路由
$router->addRoute($name,Zend_Controller_Router_Route_Interface $route);
第一个参数$name是路由表的参数,由保持路由表的唯一性。重名并不会报错。第二个参数是一个Zend_Controller_Router_Route对象。在这里需要注意的一个,ZF0.2和ZF0.15这个方法有点区别,ZF0.2直接就是一个Zend_Controller_Router_Route,而在ZF0.15中,是要创建Zend_Controller_Router_Route的参数。这里例子以ZF0.2为主。
Zend_Controller_Router_Route($route,$defaults = array(), $reqs = array())
可以接受三个参数,只有第一个是必须的。$route是URL的映射关系,$defaults指定相应的控制器和动作及参数的默认值,$reqs参数的约束条件。如:
newZend_Controller_Router_Route('/blog/:bid', array('controller' => 'blog','action' => 'view'), array('bid' => '\d+'))
/blog/:bid代表的URL的映射关系,:bid表示映射的参数,参数必须是已:开始,array('controller' => 'blog','action' => 'view')用于指定使用的控制器及动作,当然你也可以在这里设定bid的默认值’bid’ =>1, array('bid' => '\d+')指定bid必需是一个数字,这里的参数是正则表达式。
现在,我们把他们写在一起
$router->addRoute('blog', new Zend_Controller_Router_Route('/blog/:bid', array('controller' => 'blog', 'action' => 'view'), array('bid' => '\d+')));
这样直接/blog/1就能达到/blog/view/bid/1的效果。
最后不是要忘了$controller->setRouter($router);