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, если вы следуете правилам и делаете вещи ожидаемым, правильным способом.


на cakephp версия 2.* , ошибка возникает при попытке установить данные на $this->data