Bonjour,
J'ai un peu de mal avec le framework concernant l'architecture
Je souhaite sur mon site avoir une barre de menu ou chaque intitulé d'onglet est récupéré en BDD.

J'ai donc créé un MenusControlleur avec ma requete dedans.($this->set('menus', $this->Menu->find('all'));)
Puis j'ai créé un élément menu.ctp avec le code de mon menu. Affichage des données <li><?php foreach ($menus as $menu): ?>
<?php echo $menu'Menu']'nom_menu']; ?>
<?php endforeach; ?></li>
Afin qu'ils apparaissent sur toutes les pages je veux l'intégrer au fichier default.ctp.
<?php echo $this->element('menu'); ?>

Mais lorsque je test j'ai une erreur comme quoi la variable menus est undefined dans menu.ctp?
Je comprend pas du tout d'ou ça vient.
de plus je trouve ça pas trés pratique que ca soit compliqué d'effectuer et d'afficher le resultat d'une simple requete. Ou alors c'est moi qui m'y prend mal, ce qui est aussi probable.

Merci a tous

2 réponses


ker0x
Réponse acceptée

Le problème vient du fait que tu récupère tes menus dans un seul controller (MenusController) et non dans tous, donc dés que tu exécute une action définit dans un autre controller, automatiquement tu perdra ton menu.

Pour résoudre çà, il faut que tu récupères ton menu dans la fonction beforeFilter (ou beforeRender à voir) de ton AppController

public function beforeFilter {
    $this->loadModel('Menu');
    $this->set('menus', $this->Menu->find('all');
}

Le AppController étant le controller "maitre" de ton application, il sera automatiquement appelé avant n'importe quel autre controller.

alex8276
Auteur

Merci GyZmO ça marche !!