Contexte : Construire une application web (comme introduction à CakePHP) qui permet aux utilisateurs de gérer un salon. Un salon est composé d'un blog, de contacts, d'un calendrier, etc. Chaque salon est associé à un sous-domaine (ainsi jcotton.lounger.local vous amènerait à mon salon). La racine du site, utilisée pour créer de nouveaux salons, enregistrer des utilisateurs, etc. est hébergée sur lounger.local. J'utilise Cake 2.0.
Questions :
-
Je voulais pouvoir séparer les actions et les vues associées au site racine (lounger.local) des salons individuels (sous-domaines de lounger.local). Après de nombreuses recherches, j'ai opté pour la solution suivante. J'ai créé une route préfixe "lounge" et j'ai ajouté le code suivant dans routes.php. Les actions (et les vues) associées à un salon contiennent toutes le préfixe lounge (ex : lounge_index()). Comment gérer cela ?
if(preg_match('/^([^.]+)\.lounger\.local$/',env("HTTP_HOST"),$matches)){ $prefix = "lounge"; Router::connect('/', array('controller' => 'loungememberships','action' => 'index', 'prefix' => $prefix, $prefix => true)); /* Not currently using plugins Router::connect("/:plugin/:controller", array('action' => 'index', 'prefix' => $prefix, $prefix => true)); Router::connect("/:plugin/:controller/:action/*", array('prefix' => $prefix, $prefix => true)); */ Router::connect("/:controller", array('action' => 'index', 'prefix' => $prefix, $prefix => true)); Router::connect("/:controller/:action/*", array('prefix' => $prefix, $prefix => true)); unset($prefix); }
-
Chaque fois qu'un utilisateur effectue une action dans un salon, comme poster un commentaire dans le blog, ajouter un contact, etc, il est nécessaire de rechercher le lounge_id (basé sur le sous-domaine) ; ceci est nécessaire pour vérifier que l'utilisateur est autorisé à effectuer cette action et pour associer les données correspondantes avec le bon salon. J'ai implémenté cela via la fonction beforeFilter dans AppController. Chaque fois qu'une requête est reçue avec un sous-domaine, une recherche est effectuée et le lounge_id est écrit dans une variable de session. Chaque contrôleur charge ensuite CakeSession et lit le lounge_id correspondant. Est-ce mieux que d'appeler ClassRegistry::Init('Lounge') et de faire la recherche dans chaque contrôleur ? Existe-t-il une meilleure solution ?
Merci d'avance pour votre aide