Ho fatto bene?

Dovevo realizzare una pagina semplice semplice che mostrasse l’elenco delle macchine usate presenti in archivio così ho pensato di fare in questo modo. Vorrei sapere se per voi è concettualmente corretto.




<?php $this->pageTitle=Yii::app()->name; ?>

<?php $this->breadcrumbs = array("Cerca auto usate"); ?>

<?php $model = Automobili::model()->findAll(new CDbCriteria(array(

  'select' => '*',

  'condition' => 'stato=:stato',

  'params' => array(':stato' => 'usato'),

))); ?>

<?php foreach($model as $k => $v): ?>

  <?php $this->renderPartial('view',array(

    'model'=>$model[$k],

  )); ?>

<?php endforeach; ?>



Colgo l’occasione per chiedere un altro consiglio:

Ho modificato un template, ma ho anche lasciato dentro al template le queries. SBAGLIATO!!! Ora mi ritrovo con un template aggiornato e l’altro tutto statico. Cattivo sensorario!

Ragioniamo: io potrei creare dei miei piccoli pezzettini di layout dove all’interno faccio le mie query. Ma questo non è MVC. Per rispettare il pattern, devo forse creare tanti piccoli controller actionBlablabla() e solo eventualmente i relativi template dentro protected/views/ …?

Sono sicuro che con il tempo la risposta verrà da se.

Se non vuoi fare tanti metodi nel controller, le query le puoi mettere dentro al model… tralaltro e li il loro posto

per esempio nel model Automobili agiungi una metod getAll() che puoi poi chiamare con Automobili::model()->getAll() oppure Automobili::model()->all




public function getAll()

{

   return $this->model()->findAll(new CDbCriteria(array(

      'select' => '*',

      'condition' => 'stato=:stato',

      'params' => array(':stato' => 'usato'),

   )));

}



e poi nella view usi




<?php $model=Automobili::model()->all ?>



Prova a dare un occhiata a questo articolo, ti dara’ delle dritte su come seguire piu’ fedelmente il paradigma MVC.

Letto, anche il tuo commento zaccaria =). Vedo di sistemare un po’ di codice in giro …

Il fatto e’ che tanti parlano in termini molto astratti tipo “business logic” e “application level”, ma non e’ molto chiaro cosa deve stare dove.

Ragionando in termini di query - $_POST - html e’ tutto piu’ facile.