Vues


1Présentation

La vue est la couche logicielle qui s'occupe de mettre en forme les données qui sont renvoyées par le serveur après les traitements.

Par défaut, Temma utilise le moteur de template Smarty, ce qui permet de générer très facilement des pages HTML à partir des données exportées par les contrôleurs.

Temma fournit aussi nativement une vue servant à générer des flux JSON, ce qui peut s'avérer très pratique dans le cadre de communications AJAX, ainsi que des vues offrant des exports CSV, RSS, INI et iCal.


2Utilisation d'une vue avec template

Certaines vues utilisent des templates pour traiter les données et générer les flux sortants. Comme vu dans l'introduction, Temma va chercher un fichier dont le nom correspond à celui de l'action demandée (avec l'extension ".tpl"), placé dans un répertoire dont le nom est celui du contrôleur exécuté ; le tout placé dans le répertoire templates/ du projet.

Pour contourner ce comportement automatique, une action peut spécifier le template à utiliser :

class User extends \Temma\Web\Controller {
    public function list($type=null) {
        // traitements...

        // redéfinition du template dans un cas particulier
        if ($type == 'all')
            $this->_template('user/listAll.tpl');
        // dans les autres cas, le template sera "user/list.tpl"
    }
}

3Définition de la vue

Il est possible de spécifier la vue à utiliser, individuellement pour chaque action.

Voici un exemple d'action dont les données sont exportées au format JSON :

class User extends \Temma\Web\Controller {
    public function get($id) {
        // traitements...

        // enregistrement des données qui vont être
        // envoyées dans le flux JSON
        $this['json'] = $data;

        // définition de la vue à utiliser
        $this->_view('\Temma\Views\Json');
    }
}

Lorsque la vue utilisée est une vue standard (fournie par Temma), il est possible de raccourcir son écriture en utilisant le caractère tilde (~) pour remplacer le préfixe \Temma\Views\ :

class User extends \Temma\Web\Controller {
    public function get($id) {
        // traitements...
        $this->_view('~Json');
    }
}

Temma offre aussi l'attribut \Temma\Attributes\View qui permet de définir facilement la vue à utiliser pour toutes les actions d'un contrôleur et/ou pour des actions spécifiques :

use \Temma\Attributes\View as TµView;

// contrôleur qui utilise la vue JSON par défaut
#[TµView('~Json')]
class User extends \Temma\Web\Controller {
    // action qui utilise la vue JSON définie au niveau du contrôleur
    public function get($id) {
        // traitement...
    }

    // action qui utilise spécifiquement la vue RSS
    #[TµView('~Rss')]
    public function stream() {
        // traitement...
    }
}

4Configuration de la vue par défaut

Vous avez la possibilité de changer la vue par défaut, en modifiant le fichier de configuration etc/temma.php.

Par exemple, si vous créez un webservice, vous n'allez jamais envoyer du HTML, mais toujours du JSON. Vous voudrez alors utiliser la vue \Temma\Views\Json à la place de la vue Smarty habituelle, il faut ajouter la directive defaultView dans le fichier etc/temma.php :

<php

return [
    'application' => [
        // configuration habituelle (dsn, defaultController, ...)

        // configuration de la vue par défaut
        'defaultView' => '\Temma\Views\Json',
    ]
]

Comme vu précédemment, il est possible de remplacer le préfixe \Temma\Views\ par le caractère tilde (~) :

<php

return [
    'application' => [
        // configuration de la vue par défaut
        'defaultView' => '~Json',
    ]
]