代码之家  ›  专栏  ›  技术社区  ›  jpeltoniemi

使用Cakephp URL的正确方法是什么?

  •  1
  • jpeltoniemi  · 技术社区  · 16 年前

    这是我在这里的第一篇帖子:)

    主要是我在将字符串url转换为基本数组格式时遇到了问题。

    $arrayUrl=array('controller'=>'SomeController','action'=>'someAction','someValue');
    $url=Router::url($arrayUrl);       //$url is now '/path/to/site/someController/someAction/someValue'
    $url=Router::normalize($url);      //remove '/path/to/site'
    $parsed=Router::parse($url);       /*$parsed is now
    Array(
        [controller] => someController
        [action] => someAction
        [named] => Array()
        [pass] => Array([0] => someValue)
        [plugin] => 
    ) */
    

    这似乎是一个可怕的代码做一些简单的事情,如转换两个核心格式。另外,请注意,$parsed仍然与$arrayUrl不同。当然我可以手动调整$parsed,实际上作为一个快速补丁,我已经做了几次了,但我想深入了解一下。

    我还注意到,使用前缀路由时,$this->控制器中的参数具有嵌入在操作中的前缀(即,[操作]=>'admin(编辑),而Router::parse()的结果不存在。当然,它们都有自己的密钥前缀。

    当然,我很容易理解这一点,但我仍然愿意相信,蛋糕是由一群比我更有经验和洞察力的人开发的,所以我猜这是一个很好的理由“被感知的错误行为”。

    我尽量把我的问题说清楚,但由于我的英语水平不高,我不得不绕道几步:)如果需要的话,我会多解释。

    1 回复  |  直到 16 年前
        1
  •  2
  •   deceze    16 年前

    array('controller' => 'foo', 'action' => 'bar', 'baz', 'admin' => true) /admin/foo/bar/baz )或者调度员需要的信息( array('named' => array(), 'pass' => array(), …) ),具体取决于URL的使用位置。

    也许你可以用一个例子来解释为什么你需要把这三种形式从一种转换成另一种?

    推荐文章