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


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

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

$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');
Author: OldWest, 2011-03-29

2 answers

В соответствии с 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);

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

 38
Author: tokes, 2011-03-29 21:17:13

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

 3
Author: Headshota, 2011-03-29 20:05:56