2009-11-12 17 views
8

Estoy usando CakePHP 1.2 y me pregunto si hay algún efecto secundario al pasar los datos $ this-> a la Vista desde el Controlador.

Ex:

// inside PostsController, I have this code: 
$this->data['Posts'] = $this->Post->find('all'); 

en lugar de:

$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) {....};?> 

Al hacer esto, yo saltamos los $ this-> set() desde el controlador de todos juntos. ¿Viola esto algún patrón de MVC o cualquier problema de seguridad que pueda haber pasado por alto? Vi que usando el componente Auth, $ this-> data contiene la matriz [_Token].

Gracias

Respuesta

14

Debe tener en cuenta los diferentes lugares donde Cake Helpers busca automágicamente datos, ya que es allí donde hace una gran diferencia. El Ayudante de formularios completará los campos automáticamente según el contenido de $this->data. Así es como los datos de formulario persisten cuando falla la validación. OTOH, una matriz de opciones de elementos <select> se toma automáticamente del nombre de campo pluralizado,
, p. $form->select('Model.foo_id') tomará sus opciones desde $foos si está configurado.

Como tal, $this->data tiene su lugar especial y no debe usarse a la ligera, al igual que las variables con nombre tienen su uso y no deben ignorarse. Use ambos como sea apropiado. Si no desea configurar automáticamente el contenido de Form Helper, set() sus variables. En mi humilde opinión también es más legible para asignar un nombre de variable que insinúa los datos que contiene. Todas las vistas que operan en $this->data son menos claras que una vista que funciona en $foo y otra en $bar.

3

$controller->data es para los datos publicados en el control del archivo de vista.

$view->data es para datos generales.

Evitaría hacerlo para mantenerme sano. Además, estás escribiendo más a la vista.

+1

Estoy de acuerdo con Funky Amigo - $ this-> data, donde $ este es un modelo, controlador, vista u otro objeto, creo que debe ser para datos enviados desde un formulario o leídos desde un registro en el PP . Creo que su versión es mucho menos legible y va en contra de la convención a la que todos los demás están acostumbrados, por lo que es mucho menos portátil. Pero si realmente quiere guardar una línea: $ this-> set ('publicaciones', $ this-> Post-> find ('all')); – neilcrookes

2

No hay una buena razón para establecer $ this-> data directamente excepto cuando se trabaja con formularios.

Por qué romper la convención - Controlador: el conjunto está ahí por una razón. Si desea pasar datos a la vista para mostrar o mostrar la lógica, debe usar la función proporcionada en lugar de tratar de cooptar Controller: datos para fines no intencionados.

Todo es más fácil desde CakePHP si sigues las reglas y haces las cosas de la manera esperada y correcta.

2

En cakephp versión 2. *, el error se produce cuando intenta establecer datos en $this->data

7

En CakePHP 2.x se debe utilizar en su lugar si $this->request->data llanura $this->data, de lo contrario podría terminar encima de conseguir este error:

Indirect modification of overloaded property View::$data has no effect

Cuestiones relacionadas