Dans la structuration MVC d'une application, l'idéal est de séparer le plus possible les taches entre les divers composants (Modèle, Vue, Controlleur). Nous avons souvent tendance à surcharger le controlleur de différentes opérations qui devraient être gérées par les autre composants.
Prenons un exemple, les dates. Moi je stocke mes dates en base de données sous forme de timestamp. La conversion de ces dates en un format lisible est effectué, non par le controlleur, mais par la vue. C'est là que j'utilise une aide de vue (view helper en anglais), comme suit :
/**
* Formate une valeur avant de l'afficher
* ex : timestamp -> date
*
* @license http://creativecommons.org/licenses/by-sa/3.0/
* @author Fotso Teketchuet Stéphane <www.lesauf-design.net>
*/
class Zend_View_Helper_Format
{
/**
* Formate une valeur reçue
*
* @param $value mixed
* @param $format type de valeur attendue
* @return formatted value
*/
public function format($value, $format)
{
$class = 'Fast_Formatter_' . ucfirst($format);
if (class_exists($class)) {
$class = new $class;
$value = $class->format($value);
return $value;
}
}
Comme vous le voyez, le helper 'format' instancie un object. Pour une date, ce sera 'Fast_Formatter_Date', dont le code suit :
/**
* Mascker
*
* LICENSE
*
* This source file is subject to the new BSD license
* It is available through the world-wide-web at this URL:
* http://www.petala-azul.com/bsd.txt
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to geral@petala-azul.com so we can send you a copy immediately.
*
* @package Fast
* @copyright Copyright (c) Mascker (http://www.petala-azul.com)
* @license http://www.petala-azul.com/bsd.txt New BSD License
* @version 0.1 mascker $
* @author Mascker (Bento Vilas Boas) <geral@petala-azul.com >
* Fotso Teketchuet Stephane <contact@lesauf-design.net>
*/
class Fast_Formatter_Date
{
/**
*
* @param int $value timestamp
* @return formatted date
*/
public function format($value)
{
if ($value) {
$date = new Fast_Date($value);
// conversion
return $date->toString();
} else {
return null;
}
}
}
Ainsi, le controlleur se contentera de faire suivre les données du modèle vers la vue, en précisant leur format. Dans la pratique je stocke cela dans un fichier de configuration ini pour chacun de mes controlleurs. Pour UserControlleur j'aurais par exemple :
[grid]
;datagrid config
pseudo = Pseudo
nom = Nom
prenom = Prénom
email = Adresse email
pays = Pays
ville = Ville
date.title = Date d'inscription
date.format = date <-- Format
roleId = Group
Bien, j'espère que ceci vous aura aidé à un peut mieux utiliser les aides de vue sous Zend. N'hésiter pas à me faire vos remarques.