В CakePHP размещение строки запроса в URL-адресе не приводит к ее автоматическому синтаксическому анализу и разделению, как это обычно бывает при прямом вызове контроллера.
Например:
$this->testAction('/testing/post?company=utCompany', array('return' => 'vars')) ;
приведет к:
[url] => /testing/post?company=utCompany
При вызове URL-адреса напрямую через веб-браузер происходит следующее:
[url] => Array
(
[url] => testing/post
[company] => utCompany
)
Есть ли способ разделить строку запроса при запуске модульных тестов без редактирования источника CakePHP?






У меня есть либо хакерский метод (т.е. может не работать в будущих выпусках CakePHP), либо недокументированная функция.
Если второй параметр testAction включает именованный массив с именем 'url', тогда значения будут помещены в объект $ this-> params в контроллере. Это дает тот же чистый результат, что и при прямом вызове контроллера.
$data = array ('company' => 'utCompany') ;
$result = $this->testAction('/testing/post', array
(
'return' => 'vars',
'method' => 'get',
'url' => $data)
) ;
Я доволен этим методом для того, что мне нужно делать. Вскоре я открою вопрос сообществу, чтобы в будущем можно было дать лучший ответ.
CakePHP действительно обеспечивает некоторый уровень разделения URL-адресов, но кажется, что он работает только в конфигурации времени выполнения, а не в тестовой конфигурации. Я свяжусь с CakePHP, если это сделано намеренно.
Я предлагаю вашему парсеру строки запроса использовать функцию PHP взорваться.
Я считаю, что вы можете сделать что-то вроде этого:
$result = explode ('&', $queryString, -1) ;
который предоставит вам ваши пары ключей в отдельных слотах массива, по которым вы можете выполнить итерацию и выполнить второй взрыв следующим образом:
$keyPair = explode ('=', $result[n], -1) ;
Однако, несмотря на все это, было бы лучше заглянуть под капот CakePHP и посмотреть, что они делают.
То, что я ввел выше, не будет правильно обрабатывать ситуации, когда ваша строка запроса содержит экранированные символы html (с префиксом &), а также не будет обрабатывать строки URL-адресов в шестнадцатеричной кодировке.
используйте _GET ['parmname'];
Ни один из этих ответов не будет работать в Cake 1.3. Вместо этого вы должны установить следующее перед вызовом testAction:
$this->__savedGetData['company'] = 'utcompany';
Это не будет работать в Cake 1.3. Перед вызовом testAction необходимо установить следующее:
$this->__savedGetData['company'] = 'utcompany';