rootController et URL racine

46 views
Skip to first unread message

Thomas

unread,
Sep 11, 2013, 4:20:55 PM9/11/13
to fineme...@googlegroups.com
Bonjour à tous,

Tout d'abord, bravo à l'équipe derrière Temma.
La philosophie du framework m’intéresse énormément, à mi-chemin entre le framework "lourd" et le micro-framework.
Le mélange semble réussi.

Je souhaiterai avoir plus d'information sur un comportement particulier :
J'ai défini, dans la config, un rootController appelé "RootController".
Dans ce contrôleur, j'ai crée une méthode "execIndex".

En partant du principe que mon install Temma est situé à l'adresse : http://127.0.0.1
Quand j'appel "http://127.0.0.1" la méthode RootController::execIndex est bien appelé, l'action cherche la vue "templates/RootController/index.tpl"
Par contre, quand j'appel "http://127.0.0.1/root/", l'action cherche la vue "templates/root/index.tpl"

Pourquoi appeler deux vues différentes pour une même action ?


J'ai surement loupé quelque chose, merci de m'éclairer.
Thomas

Amaury Bouchard

unread,
Sep 12, 2013, 2:48:44 PM9/12/13
to fineme...@googlegroups.com
Bonjour Thomas,

Merci pour les félicitations  :-)

Ta remarque est vraie. En fait, quand tu appelles ton RootController pour la racine ("http://blabla.com/"), le framework ne s'amuse pas à calculer ce qu'aurait été le nom court du contrôleur s'il avait été appelé sur l'URL. C'est pour cette raison qu'il cherche un répertoire "RootController" dans les templates.

Ensuite, si tu utilises ce contrôleur comme n'importe quel autre, en donnant son nom dans l'URL, le framework utilise le nom court fourni, puis calcule à partir de là le nom de l'objet à utiliser, mais garde le nom court pour trouver les templates.

Voilà toute l'explication. Je n'ai pas trop envie d'ajouter des traitements au moment de gérer le RootController ; la page d'accueil est souvent la plus visitée d'un site, ce serait dommage de perdre de la performance.

Au final, j'ai 2 solutions :
  1. Tu utilises le RootController uniquement pour traiter la racine, et jamais autre chose (et donc tu crées un répertoire "templates/RootController/").
  2. Tu fais un lien symbolique "templates/root" qui pointe sur "templates/RootController/".

Amaury

Thomas

unread,
Oct 6, 2013, 2:17:20 PM10/6/13
to fineme...@googlegroups.com
Je me disais bien qu'il y avait une raison derrière tout ça.

Merci !

Pierre DUOT

unread,
Apr 16, 2014, 6:44:42 AM4/16/14
to fineme...@googlegroups.com
Salut,

Je suis bien sûr tombé sur le même "problème".
Je suis parti du principe qu'il doit toujours y avoir un controller et une action.
J'ai donc modifié Request.php :
$this->_controller = array_shift($chunkedUri);
if (! $this->_controller) $this->_controller = 'main';
$this->_action = array_shift($chunkedUri);
if (! $this->_action) $this->_action = 'index';

Je suis bien conscient que ce n'est pas la meilleur solution. J'impose 'main' comme controller par défaut.

Pierre
Reply all
Reply to author
Forward
0 new messages