yaf路由之正则路由

分类: PHP  • 发布时间: 2015-11-15 22:28:11  • 浏览量:9803

yaf提供了多种路由方式,不过我们只要会用正则路由,基本就可以满足我们大多数需求了。

yaf的路由可以在_initRoute方法中注册,也可以在yaf的配置文件中配置,这里记录的是在_initRoute方法注册的方式:

注册路由是在Bootstrap.php中的_initRoute方法中添加规则,通常步骤为:

1:通过派遣器得到默认的路由器

2:配置路由协议

3:将路由协议添加到路由器中

比如:我要做一个用户中心的url来访问用户中心,url类型如下:

http://domain.com/user/1、http://domain.com/user/2、……、http://domain.com/user/n(n代表整数),其中n表示用户的id

那么我们可以在_initRoute方法种写入如下代码:

public function _initRoute(Yaf_Dispatcher $dispatcher) {
//在这里注册自己的路由协议,默认使用简单路由
        //通过派遣器得到默认的路由器
        $router = $dispatcher->getInstance()->getRouter();
        //配置路由协议
        $route1 = new Yaf_Route_Regex('#user/(\d+)#',array('module'=>'Home','controller'=>'User','action'=>'test'),array(1=>'id'));
        //将路由协议添加到路由器
        $router->addRoute('a',$route1);
}


下面分别讲一下上面例子中的Yaf_Route_Regex的几个常用参数:

第一个参数中的'#user/(\d+)#':这是一个正则表达式规则,##是分界符。

第二个参数中的array('module'=>'Home','controller'=>'User','action'=>'test'):这是通过一个数组,指定路由到的模块,控制器以及方法。

第三个参数中的array(1=>'id'):这是对第一个参数中的子模式的匹配,1代表第一个参数中的第一个子模式,id代表方法接收是的索引


Yaf_Router::addRoute('a',$route1);两个参数说明:

第一个参数:路由协议的名字,可以根据自己的实际情况随便起

第二个参数:要增加的路由协议, Yaf_Route_Interface的一个实例,这里添加的是Yaf_Route_Regex的一个实例

官方文档地址:http://www.laruence.com/manual/yaf.class.router.addRoute.html


至此,我们其实已经做好了路由,使用http://domain.com/user/1、http://domain.com/user/2、……、http://domain.com/user/n

等就可以访问到我们的Home模块下的User控制器下的testAction方法了。


不过到了这一步,我们怎么获取参数了,比如这里,我们怎么通过url获取到用户的id呢?也很简单,在testAction中我们可以这么些:

public function testAction()
    {
        $res = $this->getRequest()->getParams();
        print_r($res);
        return false;
    }

比如这时候我们使用http://domain.com/user/5访问,打印$res的结果就为:

Array ( [id] => 5 )

如果你对Yaf_Route_Regex第三个参数如果有迷惑,到这里你应该知道第三个参数怎么用了吧!


YAF示例代码:

yaf示例代码.zip


yaf官方文档:

http://www.laruence.com/manual/yaf.routes.html

http://www.laruence.com/manual/yaf.class.router.html


文章标签: php, 路由, yaf