CakePHP: передача $this - >данных в представление от контроллера
Я использую CakePHP 1.2, и мне просто интересно, есть ли какой-либо побочный эффект при передаче данных $this - >В представление от контроллера.
Ex:
// inside PostsController, I have this code:
$this->data['Posts'] = $this->Post->find('all');
вместо :
$posts = $this->Post->find('all');
$this->set(compact('posts'));
// inside the /posts/view, I access it like this:
<?php foreach ($this->data['Posts'] as $post) {....};?>
делая это, я пропустил $this - >set () из контроллера все вместе. Нарушает ли это какой-либо шаблон MVC или любую проблему безопасности, которую я мог бы упустить? Я видел, что с помощью компонента Auth $this - >data содержит [_Token] матрица.
спасибо
5 ответов
вы должны знать о различных местах, которые торт помощники автоматически искать данные, так как это было это имеет реальное значение. Помощник по форме будет автоматически заполнять поля на основе содержимого $this->data
. Вот как данные формы сохраняются при сбое проверки. OTOH, a <select>
массив параметров элементов автоматически берется из имени множественного поля,
например,$form->select('Model.foo_id')
примет свои варианты от $foos
если установить.
в таком виде $this->data
имеет особое место и не должно использоваться легко, так же как именованные переменные имеют свое использование и не должны игнорироваться. Используйте оба по мере необходимости. Если вы не хотите автоматически устанавливать содержимое помощника формы, set()
переменные. IMHO также более читаемо назначить имя переменной, которое намекает на содержащиеся в ней данные. Все ваши взгляды работают на $this->data
менее ясно, чем один вид работает на $foo
и еще один на $bar
.
В CakePHP 2.x вы должны использовать простой $this->data
, в противном случае вы можете получить эту ошибку:
косвенная модификация перегруженного представления свойств::$data не влияет
$controller->data
предназначен для данных, размещенных в элементе управления из файла представления.
$view->data
для общих данных.
Я бы избегал этого, чтобы сохранить себя в здравом уме. кроме того, вы печатаете больше в поле зрения.
нет никаких оснований для установки $this - > data напрямую, кроме как при работе с формами.
Почему конвенции брейк - контроллер:набор есть причина. Если вы хотите передать данные в представление для отображения или отображения логических целей, вы должны использовать предоставленную функцию, а не пытаться кооптировать Controller:data для непреднамеренных целей.
все проще изнутри CakePHP, если вы следуете правилам и делаете вещи ожидаемым, правильным способом.