2008-10-14 4 views
5

CakePHP에서 urer에 쿼리 문자열을 두어도 컨트롤러가 직접 호출되었을 때처럼 자동으로 구문 분석되고 분할되지 않습니다. 예를 들어CakePHP 1.2에서 querystring을 testAction에 전달하는 방법은 무엇입니까?

:에서 웹 브라우저를 결과를 통해 직접 URL을 호출하는 동안

[url] => /testing/post?company=utCompany 

:

$this->testAction('/testing/post?company=utCompany', array('return' => 'vars')) ; 

가 발생합니다 CakePHP의 소스를 편집하지 않고

[url] => Array 
    (
     [url] => testing/post 
     [company] => utCompany 
    ) 

, 유닛 테스트를 실행할 때 쿼리 스트링을 분할 할 수있는 방법이 있습니까?

답변

3

해킹 (즉, 향후 CakePHP 릴리스에서 작동하지 않을 수 있음) 또는 문서화되지 않은 기능이 있습니다.

두 번째 testAction 매개 변수에 'url'이라는 명명 된 배열이 있으면 컨트롤러의 $ this-> params 객체에 값이 저장됩니다. 이렇게하면 컨트롤러가 직접 호출 될 때와 동일한 결과를 얻을 수 있습니다.

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

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

내가해야 할 일에 대해이 방법에 만족합니다. 나는 커뮤니티에 곧 질문을 열어 미래에 더 나은 대답을 제공 할 수 있도록 할 것입니다.

+0

. testAction 호출 전에 다음을 설정해야합니다 :'$ this -> __ savedGetData [ 'company'] = 'utcompany';' –

0

CakePHP는 몇 가지 수준의 URL 분할을 제공하지만 테스트 구성이 아닌 런타임 구성에서만 작동하는 것처럼 보입니다. 의도적이라면 CakePHP에 연락 할 것입니다.

귀하의 쿼리 문자열 파서에 대한 제안은 PHP 함수 explode을 사용하는 것입니다.

난 당신이 뭔가를 할 수 있다고 생각 :

$keyPair = explode ('=', $result[n], -1) ; 
: 당신과 같이 폭발 반복하고 두 번째를 수행 할 수있는시 별도의 배열 슬롯에 당신에게 당신의 키 쌍을 줄 것이다

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

그러나이 모든 것이 CakePHP의 두려움을 들여다보고 그들이하는 일을 보는 것이 더 낫다고 말합니다.

쿼리 문자열에 html 이스케이프 문자 (접두사 &)가 들어있는 상황을 제대로 처리하지 못하거나 16 진수로 인코딩 된 URL 문자열을 처리하지 않습니다.

-1

사용 _GET [ 'parmname'];

1

이러한 답변 중 어느 것도 케이크 1.3에서 작동하지 않습니다. 대신 당신의 testAction 호출하기 전에 다음과 같은 설정해야합니다 :이 케이크 1.3에서 작동하지 않습니다

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

관련 문제