这是我在这里发表的第一篇文章:)
我在处理网址和参数方面遇到了一些困难。我一遍又一遍地浏览路由器类api文档,没有发现任何有用的东西。
首先,我想知道CakePHP(1.3)中是否存在用于处理网址的“通用”格式。我目前正在处理我的所有url作为简单数组(以Router :: url和$ html->链接接受的格式)并且它很容易,只要我只需要将它们作为参数传递给cake自己的方法。如果我需要其他东西,通常会变得棘手。
主要是我将字符串网址转换为基本数组格式时出现问题。 假设我想将$ 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] =>
) */
这似乎是很多代码,可以做一些简单的事情来转换2种核心格式。另请注意,$ parsed仍然与$ arrayUrl不同。当然我可以手动调整$解析,实际上我已经做了几次作为一个快速补丁,但我想深究这一点。
我还注意到,当使用前缀路由时,控制器中的$ this-> params在操作中嵌入了前缀(即[action] =>'admin_edit'),并且Router :: parse()的结果确实如此不。两者当然都有自己的密钥前缀。
总结一下,如何在正确的方式之间转换这3个(或4个,如果你包含前缀的东西)格式之间的网址? 当然,通过这种方式很容易破解我的方式,但我仍然相信蛋糕是由一群比我更有经验和洞察力的人开发的,所以我猜这是好的这种“被认为是错误行为”的原因。
我试图尽我所能地提出我的问题,但由于我生锈的英语技巧,我不得不走了几步:)我会在需要时解释更多。
答案 0 :(得分: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(作为字符串)只是在Web上下文中实现此目的的必要之物。您不应该使用Dispatcher格式。在指定URL时也不应使用字符串表示法,因为如果您想要更改URL方案,则不能对它们进行反向路由。
也许您可以用一个例子来解释为什么需要将这三种形式从一种形式转换为另一种形式?