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');
}
// ...
}
}