Разъяснение 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');
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);
Оба достигают одного и того же.
Compact возвращает массив. так что, по-видимому, set проверяет свои параметры, и если это массив, он знает, что он из compact. а если нет, то он ожидает другого параметра, значения переменной.