Как передать строку запроса в testAction в CakePHP 1.2? - PullRequest
5 голосов
/ 14 октября 2008

В 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, есть ли способ разделить строку запроса при выполнении модульных тестов?

Ответы [ 4 ]

3 голосов
/ 14 октября 2008

У меня есть то, что является взломом (то есть может не работать для будущих выпусков CakePHP) или недокументированная функция.

Если второй параметр testAction включает в себя именованный массив с именем 'url', тогда значения будут помещены в объект $ this-> params в контроллере. Это дает нам тот же чистый результат, что и при непосредственном вызове контроллера.

$data = array ('company' => 'utCompany') ;

$result = $this->testAction('/testing/post', array
(
    'return' => 'vars', 
    'method' => 'get', 
    'url' => $data)
) ; 

Я удовлетворен этим методом для того, что мне нужно сделать. Вскоре я открою вопрос сообществу, чтобы в будущем можно было дать лучший ответ.

1 голос
/ 09 февраля 2011

Ни один из этих ответов не появится в Cake 1.3. Вместо этого вы должны установить следующее перед вызовом testAction:

$this->__savedGetData['company'] = 'utcompany';

0 голосов
/ 03 ноября 2009

использовать _GET ['parmname'];

0 голосов
/ 14 октября 2008

CakePHP обеспечивает некоторый уровень разделения URL-адресов, но кажется, что он работает только в конфигурации во время выполнения, а не в тестовой конфигурации. Я свяжусь с CakePHP, если это намеренно.

Я предлагаю для вашего анализатора строк запросов использовать PHP-функцию explode .

Полагаю, вы можете сделать что-то вроде этого:

$result = explode ('&', $queryString, -1) ;

, который даст вам ваши пары ключей в отдельных слотах массива, на которых вы можете выполнить итерацию и выполнить второе разнесение следующим образом:

$keyPair = explode ('=', $result[n], -1) ;

Однако, несмотря на это, было бы лучше заглянуть под капот CakePHP и посмотреть, что они делают.

То, что я напечатал выше, не будет правильно обрабатывать ситуации, когда ваша строка запроса содержит html экранированные символы (с префиксом &), и не будет обрабатывать строки URL с шестнадцатеричным кодированием.

...