1

这是我在这里的第一篇文章 :)

我在处理 url 和参数时遇到了一些困难。我一遍又一遍地浏览了路由器类 api 文档,并没有发现任何有用的东西。

首先,我想知道 CakePHP(1.3) 中是否有用于处理 url 的“通用”格式。我目前将我所有的 url 作为简单数组处理(采用 Router::url 和 $html->link 接受的格式),只要我只需将它们作为参数传递给 cake 自己的方法,这很容易。如果我需要其他东西,通常会变得很棘手。

主要是我在将字符串 url 转换为基本数组格式时遇到问题。假设我想将 $arrayUrl 转换为字符串,然后再转换为 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->params 将前缀嵌入到操作中(即 [action] => 'admin_edit'),而 Router::parse() 的结果没有。两者当然都有自己的密钥中的前缀。

总而言之,我如何以正确的方式在提到的这 3 个(或 4 个,如果包含前缀的东西)格式之间转换 url?当然,破解我的方式很容易,但我仍然愿意相信蛋糕是由一群比我有更多经验和洞察力的人开发的,所以我猜有一个很好的这种“感知到的不当行为”的原因。

我试图尽可能好地提出我的问题,但由于我生疏的英语技能,我不得不走一些弯路:) 如果需要,我会解释更多。

4

1 回答 1

2

Cake URL 的“官方”格式应该是数组表示法array('controller' => 'foo', 'action' => 'bar', 'baz', 'admin' => true)。每当您编写 URL 时,都应该使用这种格式。Router 类会将这些转换为字符串 ( /admin/foo/bar/baz) 或 Dispatcher () 所需的信息array('named' => array(), 'pass' => array(), …),具体取决于使用 URL 的位置。

您应该根据要调用的控制器操作来考虑它。URL(作为字符串)只是在网络环境中完成此任务的必要手段。您应该不需要使用 Dispatcher 格式。指定 URL 时也不应使用字符串表示法,因为如果您想更改 URL 方案,则无法反向路由这些符号。

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

于 2010-06-13T04:15:49.840 回答