通过RewriteRouter写出漂亮的URL

通过RewriteRouter写出漂亮的URL

在使用ZF中,是通过URL来确定使用的控制器和动作,如:/blog/view/bid/1这样的URL,如果参数多的话,应该是非常难看的。而且暴露了一些东西,反正我是不喜欢看到这样的URL的。不过幸运的是,ZF提供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.2ZF0.15这个方法有点区别,ZF0.2直接就是一个Zend_Controller_Router_Route,而在ZF0.15中,是要创建Zend_Controller_Router_Route的参数。这里例子以ZF0.2为主。

Zend_Controller_Router_Route($route,$defaults = array(), $reqs = array())
可以接受三个参数,只有第一个是必须的。$routeURL的映射关系,$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);

Zend Framework

其实,我一直在改变网站的架构。最近,看了些面向对象的设计模式,准备自己重新设计一个。虽然,我知道有Zend Framework,但我还是不准备在这个上面开发。上周未,在IBM developerWorks 中国上面发现Zend Framework的教程,然后看了下,觉得挺有意思的。今天,就差不多在做站点的移植的事情。

这么说来,差不多还是头一次在框架下面开发,像Plone给人的感觉完全不是框架,而是做二次开发。我用的是0.15版,虽然,我现在只用了少部分功能,但感觉还是挺不错的(反正没有其它框架可比Laughing)。 在数据库方面封装的是PDO,速度应该也没有问题,有些地方设计的很好。

估计,到下个月上旬能将整个程序移值过来。