2011-03-29 11 views
13

Sé que compact() es una función php estándar. Y set() es un método específico de torta.Aclaración de CakePHP sobre el uso de set() y compact() juntos. Solo funcionará con compact()

Estoy ejecutando una prueba simple de pasar un valor a una vista generada con ajax (user render() en mi controlador), y solo pasa el valor del controlador a la vista si mi configuración es así:

$variable_name_to_pass = "Passing to the view using set() can compact()"; 

$this->set(compact('variable_name_to_pass')); 

A partir de la lectura del manual, parece que set() debería funcionar junto con w/out compact.

¿Alguien puede explicar por qué set() no funciona solo? Como

$this->set('variable_name_to_pass'); 

Respuesta

37

Según la CakePHP API:

Parámetros:

mixtos $one requieren

Una cadena o una matriz de datos.

mixta $twoopcional NULL

valor en caso de $one es una cadena (que a su vez funciona como la tecla). No utilizado si $one es un arreglo asociativo , de lo contrario sirve como valores para las claves $one.

La función compact devuelve una matriz asociativa, construida mediante la adopción de los nombres especificados en la matriz de entrada, usándolos como llaves, y tomando los valores de las variables referenciados por esos nombres y haciendo los valores. Por ejemplo:

$fred = 'Fred Flinstone'; 
$barney = 'Barney Rubble'; 
$names = compact('fred', 'barney'); 

// $names == array('fred' => 'Fred Flinstone', 'barney' => 'Barney Rubble') 

Así cuando se utiliza compact en conjunción con set, que está utilizando la forma único parámetro de la función set, pasándolo a una matriz asociativa de pares de clave y valor.

Si sólo hay una variable que desea establecer en la vista, y desea utilizar el formulario único parámetro, debe invocar set de la misma manera:

$variable_to_pass = 'Fred'; 
$this->set(compact('variable_to_pass')); 

De lo contrario, la forma de dos parámetros de set se pueden utilizar:

$variable_to_pass = 'Fred'; 
$this->set('variable_to_pass', $variable_to_pass); 

ambos alcanzan la misma cosa.

+0

Tokes, gracias por la aclaración. Estaba un poco inseguro sobre la función exacta de estos trabajando juntos. – OldWest

+0

+1, pero el enlace web tiene "502 Bad Gateway". – Sithu

+0

Cualquier diferencia como compacta es rápida cuando tenemos más variables.En caso de ajuste? – AnNaMaLaI

2

compact devuelve una matriz. por lo que aparentemente establecido es verificar sus parámetros y si se trata de una matriz, sabe que es compacta. y si no espera otro parámetro, el valor de la variable.

+0

Gracias, Shoto:) – OldWest

Cuestiones relacionadas