CakePHP уточнение при использовании set() и compact() вместе. Будет работать только с компактным()

Я знаю, что 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');

Ответы

Ответ 1

Согласно API CakePHP:

Параметры:

смешанный $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);

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

Ответ 2

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