Bonjour à tous,

Je m’explique :
J’ai un système de pages/onglets gérés par une BDD que je viens lire avec une fonction « display » dans PagesController.
Sur mon layout, j’ai aussi un boutton de connexion qui ouvre un formulaire de connexion et qui est géré par un controller dans « userscontroller ».

Le truc, c’est que j’aimerai pouvoir afficher cette page de connexion dans un modal qui s’ouvre sur la page en cours… et c’est là que je bloque.

L’URL est bien sûr monopolisée par la gestion de la vue de la page en cours. Je ne trouve absolument pas le moyen de « combiner » plusieurs vue et plusieurs contrôleurs. PHP le permet-il ? Comment feriez-vous dans mon cas ?

4 réponses


Si tu fait un requestAction($url, $option); avec la clé "return" presente dans les options, alors la fonction te retourne un rendu de l'url que tu demande, tu peux donc faire

$this->requestAction(array('controller'=>'users', 'action' => 'login'), array('return'=>true));

regarde ce que ça te retourne et dis nous si ça convient.

Pour ce genre de chose, je travaille plutôt avec un framework js, comme Angular ou autre. Tu utilises CakePHP comme api seulement. L'avantage de cette méthode, c'est que tu géreras mieux la plupart des éléments (validation de formulaire, envoi/réception de données, affichage d'informations/d'erreurs).

PS : Sympa ton avatar Snap ! j'adore cette série.

Merci !
En effet, requestAction devrait repondre parfaitement à mon problème… mais je n’arrive pas a le faire fonctionner (retourne une erreur fatal avec une liste callStack longue comme le bras…)… même avec un debug() ?!

Bon, ceci dit, j’ai réalisé que la lecture de ma BDD pour l’affichage des pages/onglets doit être systématique (je veux toujours afficher la liste des onglets et sa page correspondante + éventuellement d’autre vue). Je m’y suis donc pris autrement :

Dans une fonction beforefilter de mon AppController, je lis le controller passé dans l’URL ($this->request->params). Je fais ensuite une recherche dans la BDD pour mettre à jour la liste des onglets. J’envoie les infos à mon layout et j’enregistre aussi le dernier onglet actif dans une variable de session.
Comme c’est un Before filter, le controlleur demandé par l’URL s’exécutera après. Si ce controller et un controller ‘pages’(contrôleur demandé quand on clique sur un onglet), je prends le paramètre passé (qui correspond au slug de la page) et l’utilise pour mettre à jour mes infos sur l’onglet actif…
Voilà, j’espère avoir été a peu près claire. Merci pour votre aide.

Utiliser le js c'est plutôt pas mal aussi pour le formulaire de connexion (moi je préfère le cacher à la fin du body).

Si tu affiche toujours la liste des onglets (dans un élément), c'est pas mal de faire un requestAction() pour lire dans ta BDD et de mettre en cache l'element (c'est plutôt facile à faire dans les options de element()).

@prbaron : ouai elle est super cool ^^!!