Attribut View


1Présentation

Temma propose un attribut permettant de spécifier la vue utilisée par un contrôleur en général et/ou par une action (ou plusieurs) en particulier.


2Paramètre

L'attribut prend un seul paramètre optionnel, qui est le nom de l'objet de vue à utiliser.

Ce paramètre peut être vide ou nul, et dans ce cas c'est la valeur defaultView du fichier etc/temma.php qui est utilisée (si cette valeur n'est pas définie, c'est la vue Smarty qui est utilisée).

Le paramètre peut aussi prendre la valeur false, ce qui a pour effet de désactiver l'utilisation de la vue.

Si la chaîne passée en paramètre commence par le caractère tilde (~), cela veut dire que la suite de la chaîne contient le nom d'une vue standard fournie par Temma. Ainsi, le préfixe \Temma\Views\ lui sera ajouté.
Par exemple : ~Json sera interprété comme \Temma\Views\Json


3Exemples

Pour que toutes les actions d'un contrôleur utilisent la vue JSON :

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

#[TµView('~Json')]
class MyController extends \Temma\Web\Controller {
    // ...
}

Pour qu'une action spécifique utilise la vue RSS (les autres actions utilisant la vue par défaut, comme d'habitude) :

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

class MyController extends \Temma\Web\Controller {
    #[TµView('~Rss')]
    public function myAction() {
        // ...
    }
}

Pour que toutes les actions utilisent la vue Json, sauf une action spécifique qui utilise la vue RSS, et une autre qui utilise la vue par défaut :

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

#[TµView('~Json')]
class MyController extends \Temma\Web\Controller {
    // cette action utilise la vue JSON
    public function firstAction() {
        // ...
    }

    // cette action utilise aussi la vue JSON
    public function secondAction() {
        // ...
    }

    // cette action utilise la vue RSS
    #[TµView('~Rss)]
    public function thirdAction() {
        // ...
    }

    // cette action utilise la vue par défaut
    #[TµView]
    public function fourthAction() {
        // ...
    }
}

Pour qu'aucune vue ne soit utilisée pour une action :

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

class MyController extends \Temma\Web\Controller {
    // aucune vue n'est exécutée après cette action
    #[TµView(false)]
    public function ditBonjour() {
        print('Bonjour');
    }
}

4Vue conditionnelle

Dans le cas où la vue à utiliser ne peut pas être déterminée à l'avance, il faut utiliser la méthode _view() du contrôleur pour définir la vue :

class MyController extends \Temma\Web\Controller {
    public function myAction() {
        if ($this['responseType'] == 'api') {
            $this->_view('~Json');
        }
        // ...
    }
}

Il est évidemment possible de mélanger l'attribut et la méthode _view() :

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

#[TµView('~Json')]
class MyController extends \Temma\Web\Controller {
    public function myAction() {
        if ($this['il_faut_utiliser_smarty'] == true) {
            $this->_view('~Smarty');
        }
        // ...
    }
}