首页 » 资源分享 » PHP » 正文

yaf系列学习之六:路由



一般情况下我们会用到Yaf的Yaf_Route_Rewrite,Yaf_Route_Rewrite是一个强大的路由协议, 它能满足我们绝大部分的路由需求,举个例子:
‘article’,
‘action’ => ‘detail’
)
);
//使用路由器装载路由协议
$router->addRoute(‘article’, $route);
?>

在上例中, 我们匹配Url指定到一个文章详情页, 就像http://www.caizhichao.cn/article/771
可以发现我们传递了2个变量到路由协议Yaf_Route_Rewrite的构造函数其中,
第一个变量(‘article/:iid’)实际上就是匹配的URL路径,
第二个变量(array变量)是路由到的动作控制器,
路径使用一个特别的标识来告诉路由协议如何匹配到路径中的每一段路径,这个标识有有两种,可以帮助我们创建我们的路由协议,一个是冒号(:),一个是星号(*)
冒号(:)指定了一个段,这个段包含一个变量用于传递到我们动作控制器中的变量,我们要设置好事先的变量名,比如在上面我们的变量名就是’id’,因此,倘若我们访问http://www.caizhichao.com/article/771,将会创建一个变量名为id并且其值是’771’的变量,我们然后就可以在我们的动作控制器ArticleController/detailAction下获取到它的值:$this->getRequest()->getParam(‘id’);
星号(*)被用做一个通配符, 意思就是在Url中它后面的所有段都将作为一个通配数据被存储. 例如,如果我们有路径’path/article/:id/*'(就是路由协议中设置的第一个变量), 并且我们访问的Url为http://caizhichao.cn/article/771/first_param/value1/second_param/value2,那么所有的在’771’后面的段都将被做成变量名/值对,因此这样会给我们下面的结果:
id = 771
first_param = value1
second_param = value2

这种行为也就是我们平常默认使用的路由协议的行为,记住变量名/值要成对出现,否则像/first_param/value1/这样的将不会这种另一个变量,我们有静态的路由协议部分,这些部分简单地被匹配来满足我们的路由协议,在我们的例子中,静态部分就是article;
就像你现在看到的那样,我们的Yaf_Route_Rewrite路由协议提供给我们极大的灵活性来控制我们的路由