2010-05-18 6 views
0

Je travaille sur une application Web, en utilisant le framework CAKEPHP. Pour cela, j'ai besoin de demander une variable sur plusieurs pages (toutes les pages ont des contrôleurs différents). il est évident que j'obtiens une erreur sur plusieurs pages, puisque la variable n'est pas déclarée dans tous les différents contrôleurs.une variable et plusieurs contrôleurs

est-il une solution pour cela? J'ai déjà essayé l'app :: import pour importer un contrôleur dans un autre contrôleur, mais cela ne semble pas fonctionner (toujours une erreur de variable indéfinie).

Thnx pour votre coopération!

Cordialement, Simon

+0

quelle version de cakephp utilisez-vous? –

Répondre

2

Duplicate question, mais je pense qu'il est formulé un peu mieux, donc je vais coller ma réponse ici:

debout sur les épaules du commentaire de deceze et la réponse de DavidYell, je pense ils ont réussi à dégager une vue décente de ce que vous essayez d'obtenir. Peut être. Donc, avec cette compréhension lâche de ce que vous voyez et ce que vous avez ...

Par défaut, la méthode PagesController::display() génère l'affichage de la page d'accueil (home.ctp). Je suppose que c'est de cela que vous parlez. Cela dit, la variable que vous définissez dans une méthode de votre SectionsController ne sera pas disponible sur votre page d'accueil qui est créée par une méthode différente dans un autre contrôleur. Si vous voulez une variable disponible à toutes il y a plusieurs choses que vous pouvez faire:

  1. Vous pouvez définir la variable dans votre fichier config/core.php (généralement pas recommandé)
  2. Vous pouvez le mettre en si elle est une constante . Par cela, je veux dire que c'est une valeur que vous allez coder en dur, pas quelque chose généré dynamiquement. Si vous créez la variable comme une constante n'a pas d'importance.
  3. Vous pouvez définir dans votre AppController dans une méthode beforeFilter() ou beforeRender(). Tous vos contrôleurs personnalisés (en supposant que vous avez suivi le protocole) héritent du AppController. Si vous choisissez ce chemin, faites une copie de cake/libs/controller/app_controller.php et placez-le dans votre répertoire app/.

Ce sont les moyens qui, selon moi, répondront le mieux à vos besoins.

+0

Eh bien, j'ai essayé toutes les trois solutions, mais pas un pourrait travailler pour moi .. :( – Simon

+0

Peut-être que vous pouvez être plus précis sur le scénario de votre application, alors? Tout cela rendra les données variables disponibles pour une vue. , alors nous avons probablement besoin de plus d'informations. –

0

Une façon de vous assurer que la variable est disponible sur toutes les pages est de définir sur le contrôleur avant (normalement index.php) ou tout autre fichier toujours inclus (comme configs global), une autre option pourrait consister à utiliser le $_SESSION super global.

0

Vous pouvez youse le beforeRender() ou beforeFilter()callback methods de votre AppController. :)

Elles seront appelées à chaque demande de page.:)

0

Si vous souhaitez accéder à une valeur à partir de différents contrôleurs, vous devez enregistrer cette valeur dans un enregistrement de base de données pour pouvoir y accéder par les différentes méthodes du contrôleur. Chaque appel de contrôleur existe dans son propre contexte et ne peut partager que des données stockées à l'extérieur des scripts.

Dans des situations comme celle-ci, j'ai créé une table de préférences (avec des champs comme, id, nom et valeur). Ajoutez ensuite une valeur $ uses à app_controller pour la rendre disponible à tous les contrôleurs. Enfin, prenez-le avec un appel de recherche. (c'est-à-dire $ foo = $ this-> Préférences-> find ('first', array ('conditions' => array ('nom' = 'foo')));

Questions connexes