在CakePHP中,在URL中放置查询字符串不会导致它被自动解析和拆分,就像通常在直接调用控制器时一样。
例如:
$this->testAction('/testing/post?company=utCompany', array('return' => 'vars')) ;
将导致:
[url] => /testing/post?company=utCompany
通过网络浏览器直接调用网址会导致:
[url] => Array
(
[url] => testing/post
[company] => utCompany
)
在不编辑CakePHP源代码的情况下,运行单元测试时是否有某种方法可以将查询字符串拆分?
答案 0 :(得分:3)
我有什么是黑客(即可能不适用于未来的CakePHP版本)或未记录的功能。
如果第二个testAction参数包含一个名为'url'的命名数组,那么这些值将放在控制器中的$ this-> params对象中。这给了我们与直接调用控制器时相同的净结果。
$data = array ('company' => 'utCompany') ;
$result = $this->testAction('/testing/post', array
(
'return' => 'vars',
'method' => 'get',
'url' => $data)
) ;
我对这个方法感到满意,因为我需要做什么。我将很快向社区公开这个问题,以便将来能够提供更好的答案。
答案 1 :(得分:1)
这些答案都不适用于Cake 1.3。您应该在testAction调用之前设置以下内容:
$this->__savedGetData['company'] = 'utcompany';
答案 2 :(得分:0)
CakePHP确实提供了一定级别的url拆分,但它似乎只适用于运行时配置而不是测试配置。如果是故意的话,我会联系CakePHP。
我建议您的查询字符串解析器使用PHP函数explode。
我相信你可以这样做:
$result = explode ('&', $queryString, -1) ;
它可以在单独的数组插槽中为您提供密钥对,您可以在其上迭代并执行第二次爆炸,如下所示:
$keyPair = explode ('=', $result[n], -1) ;
然而,所有这一切都被认为最好在CakePHP的引擎盖下偷看,看看他们在做什么。
上面输入的内容无法正确处理查询字符串包含html转义字符(以&为前缀)的情况,也不会处理十六进制编码的url字符串。
答案 3 :(得分:-1)
使用_GET ['parmname'];