CakePHP: передача данных $ this-> в представление из контроллера - PullRequest
8 голосов
/ 12 ноября 2009

Я использую 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 Component, $ this-> data содержит массив [_Token].

Спасибо

Ответы [ 5 ]

14 голосов
/ 13 ноября 2009

Вы должны знать о различных местах, в которых Cake Helpers автоматически ищут данные, поскольку именно в этом они действительно имеют значение. Помощник по формам будет заполнять поля автоматически на основе содержимого $this->data. Вот как данные формы сохраняются при сбое проверки. OTOH, массив опций <select> elements автоматически берется из имени поля во множественном числе,
например $form->select('Model.foo_id') примет его параметры от $foos, если установлено.

Таким образом, $this->data занимает свое особое место и не должен использоваться легкомысленно, точно так же, как именованные переменные имеют свое использование и не должны игнорироваться. Используйте оба по мере необходимости. Если вы не хотите автоматически устанавливать содержимое помощника по формам, set() свои переменные. ИМХО, также более читабельно назначать имя переменной, которая намекает на данные, которые она содержит. Все ваши представления, работающие на $this->data, менее ясны, чем одно представление, работающее на $foo, а другое на $bar.

7 голосов
/ 18 июня 2012

В CakePHP 2.x вы должны использовать $this->request->data вместо простого $this->data, иначе вы можете получить эту ошибку:

Косвенная модификация перегруженного свойства View :: $ data не действует

3 голосов
/ 12 ноября 2009

$controller->data предназначено для данных, публикуемых в элемент управления из файла представления.

$view->data для общих данных.

Я бы избегал этого, чтобы оставаться в здравом уме. кроме того, вы печатаете больше на виду.

2 голосов
/ 06 января 2012

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

2 голосов
/ 13 ноября 2009

Нет веских причин для непосредственной установки $ this-> data, кроме случаев работы с формами.

Зачем нарушать соглашение - Контроллер: набор существует по причине. Если вы хотите передать данные в представление для отображения или отображения логических целей, вам следует использовать предоставленную функцию вместо попытки выбрать контроллер: данные для непреднамеренных целей.

В CakePHP все проще, если вы следуете правилам и делаете все ожидаемым, правильным образом.

...