V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
m939594960
V2EX  ›  PHP

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

  •  
  •   m939594960 · 2015-05-23 16:15:41 +08:00 · 3291 次点击
    这是一个创建于 3502 天前的主题,其中的信息可能已经有所发展或是发生改变。

    `
    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 (){
    
    });
    
    求教这种路由该如何实现
    
    
      代码如何格式化。。。。 反正我是尽力了 还是没格式化成。。
    
    6 条回复    2015-05-25 13:04:43 +08:00
    ywisax
        1
    ywisax  
       2015-05-23 16:32:30 +08:00
    研究下lara的route不就行了。
    如果觉得lara实现复杂,可以看下slim的route(slim/Slim/Router.php)。
    m939594960
        2
    m939594960  
    OP
       2015-05-23 16:33:46 +08:00
    @ywisax 研究了但没看懂 尴尬。。。。。
    Septembers
        3
    Septembers  
       2015-05-23 16:42:26 +08:00
    route简单的说是个有限状态机,group相当于做了个状态转移
    m939594960
        4
    m939594960  
    OP
       2015-05-23 16:45:35 +08:00
    @Septembers 没有浅显易懂点的解释么。。。。瞬间就感觉自己啥都不会了,,,
    yangmls
        5
    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
        6
    m939594960  
    OP
       2015-05-25 13:04:43 +08:00
    @yangmls 懂了 厉害
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3086 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:43 · PVG 21:43 · LAX 05:43 · JFK 08:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.