像 laravel 那样的路由分组功能是如何实现的呢?

2015-05-23 16:15:41 +08:00
 m939594960

`
DreamRoute::group('/ccc','Auth',function (){
DreamRoute::get('/fuck(:any)',function (){

});
       DreamRoute::get('/dream(:any)',function (){

       });
});

`

就类似这样的路由声明
/fuck 和 /dream 都是属于 /ccc这个group的
也就是 /ccc/fuck 还有 /ccc/dream 会匹配到这两条路由中

问题就是

DreamRoute::get('/fuck(:any)',function (){

});
DreamRoute::get('/dream(:any)',function (){

});
如何获取 /ccc

试过group 放到静态的变量中 初始值为0
可是这样就不行
```
DreamRoute::group('/admin','Auth',function (){
DreamRoute::get('/fuck(:any)',function (){

});
    DreamRoute::get('/cao(:any)',function (){

    });
});
DreamRoute::get('/fuck(:any)',function (){

});
DreamRoute::get('/cao(:any)',function (){

});
求教这种路由该如何实现


  代码如何格式化。。。。 反正我是尽力了 还是没格式化成。。
3222 次点击
所在节点    PHP
6 条回复
ywisax
2015-05-23 16:32:30 +08:00
研究下lara的route不就行了。
如果觉得lara实现复杂,可以看下slim的route(slim/Slim/Router.php)。
m939594960
2015-05-23 16:33:46 +08:00
@ywisax 研究了但没看懂 尴尬。。。。。
Septembers
2015-05-23 16:42:26 +08:00
route简单的说是个有限状态机,group相当于做了个状态转移
m939594960
2015-05-23 16:45:35 +08:00
@Septembers 没有浅显易懂点的解释么。。。。瞬间就感觉自己啥都不会了,,,
yangmls
2015-05-23 18:41:15 +08:00
这不是很简单嘛,Laravel 的这部分用三句就能解释了

```
//group 的层级,实现多层group嵌套
$this->groupStack[] = 'group';
//运行 group 的第二个参数
call_user_func(xxxx, $this);
//结束就删掉group的层级
array_pop($this->groupStack);
```

Router 因为是个 Facade,所以是个单例,所有 Router 代码共享 $this->groupStack 变量,Router::add 的代码会检查当前 $this->groupStack 的层级,prepend 到route 前面
m939594960
2015-05-25 13:04:43 +08:00
@yangmls 懂了 厉害

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/193203

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX