2008-10-14 10 views
5

En CakePHP poner una cadena de consulta en la url no hace que se analice automáticamente y se divida como lo hace normalmente cuando se invoca directamente el controlador.¿Cómo pasar querystring a testAction en CakePHP 1.2?

Por ejemplo:

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

se traducirá en:

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

Invocando la url directamente a través de los resultados del navegador web en:

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

Sin editar la fuente de CakePHP, ¿Hay alguna forma de dividir la querystring cuando se ejecutan pruebas unitarias?

Respuesta

3

Tengo lo que es un hack (es decir, podría no funcionar para futuras versiones de CakePHP) o una característica no documentada.

Si el segundo parámetro testAction incluye una matriz llamada llamada 'url', los valores se colocarán en el objeto $ this-> params en el controlador. Esto nos da el mismo resultado neto que cuando el controlador se invoca directamente.

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

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

Estoy satisfecho con este método para lo que tengo que hacer. Abriré la pregunta a la comunidad en breve para que en el futuro se pueda proporcionar una mejor respuesta.

+0

Esto no funcionará en Cake 1.3. Debe configurar lo siguiente antes de realizar la llamada de Prueba de prueba: '$ this -> __ savedGetData ['company'] = 'utcompany';' –

0

CakePHP proporciona cierto nivel de división de URL, pero parece que solo funciona en la configuración en tiempo de ejecución y no en la configuración de prueba. Me pondré en contacto con CakePHP si esto es intencional.

Sugerencia para su analizador de querystring sería utilizar la función de PHP explode.

Creo que se puede hacer algo como esto:

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

que le daría sus principales pares de ranuras de matriz separadas sobre la cual se puede iterar y llevar a cabo una segunda explotar este modo:

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

Sin embargo, dicho esto, sería mejor echar un vistazo bajo el capó de CakePHP y ver lo que están haciendo.

Lo que escribí arriba no manejará correctamente las situaciones en las que su cadena de consulta contiene caracteres html escapados (con el prefijo &), ni manejará las cadenas url codificadas hexadecimales.

-1

use _GET ['parmname'];

1

Ninguna de estas respuestas fallará en Cake 1.3. En su lugar debe establecer lo siguiente antes de su llamada testAction:

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

Cuestiones relacionadas