Как передать строку запроса в testAction в CakePHP 1.2?

В 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?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
5
0
4 583
4

Ответы 4

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

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

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

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

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

Это не будет работать в Cake 1.3. Перед вызовом testAction необходимо установить следующее: $this->__savedGetData['company'] = 'utcompany';

Joel Moss 09.02.2011 18:49

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';

Другие вопросы по теме