CakePHP разъяснение по использованию set () и compact () вместе. Будет работать только с компактным () - PullRequest
15 голосов
/ 29 марта 2011

Я знаю, что compact () - это стандартная функция php. И set () - это метод, специфичный для торта.

Я выполняю простой тест передачи значения в представление, сгенерированное с помощью ajax (user render () в моем контроллере), и оно передает значение только из контроллера в представление, если мои настройки выглядят так:

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

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

Из прочтения руководства видно, что set () должен работать без компактов.

Может кто-нибудь объяснить, почему set () не будет работать в одиночку? Как

$this->set('variable_name_to_pass');

Ответы [ 2 ]

41 голосов
/ 30 марта 2011

В соответствии с CakePHP API :

Параметры:

смешанный $one требуется

Строка или массив данных.

смешанный $two необязательный NULL

Значение в случае, если $one является строкой (которая затем работает как ключ). Не используется, если $one является ассоциативным массивом , в противном случае служат значениями для ключей $one.

Функция compact возвращает ассоциативный массив, построенный путем взятия имен, указанных во входном массиве, использования их в качестве ключей, и взятия значений переменных, на которые ссылаются эти имена, и присвоения им этих значений. Например:

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

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

Поэтому, когда вы используете compact в сочетании с set, вы используете форму одного параметра функции set, передавая ей ассоциативный массив пар ключ-значение.

Если у вас есть только одна переменная, которую вы хотите установить в представлении, и вы хотите использовать форму с одним параметром, вы должны вызвать set таким же образом:

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

В противном случае можно использовать двухпараметрическую форму set:

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

Оба достигают одного и того же.

3 голосов
/ 30 марта 2011

Compact возвращает массив. Итак, очевидно, set проверяет его параметры и, если это массив. Он знает, что это из компактных. Если нет, то ожидается другой параметр, значение переменной.

...