2010-11-06 5 views
1

Ma question est celle avec un exemple. Je dois montrer toutes les catégories de livres et avec des cases à cocher dans une page que je veux être posté à la prochaine vue sans interagir avec DB et là je veux les stocker dans un champ caché dans une chaîne séparée par des virgules.gâteau php 1.3? Puis-je utiliser un modèle dans un contrôleur et des vues?

En fait, j'ai un onglet pour trouver un livre. l'utilisateur clique dessus et il a une liste de catégories de livres listés que je reçois du modèle des catégories et des catégories utilisées. Je veux afficher les catégories sélectionnées par l'utilisateur à la prochaine vue, comme où je vais prendre plus d'informations concernant la filtration des utilisateurs pour les livres, il vient d'un autre modèle et un contrôleur.

en fait je veux savoir ce que je dois faire je veux développer ce trouver une fonction de livre. Si j'avais un modèle pour cela et un contrôleur qu'ils utilisent une table pour trouver un livre ou puis-je utiliser un modèle n'importe quel contrôleur pour cette fonction.

+1

En fait, qu'est-ce que vous demandez? – erjiang

+0

S'il vous plaît ne pas poster plusieurs messages de la même question. Vous avez déjà posté cette question exacte sur: http://stackoverflow.com/questions/4112744/cake-php-1-3-can-i-use-any-model-in-any-controller-and-views/4131538 # 4131538 – Ashok

Répondre

2

Outre chargement du modèle lui-même, Vous pouvez utiliser un modèle dans un contrôleur autre que le sien tant qu'il existe une relation entre les deux modèles. Par exemple, considérons la relation suivante:

"Books" Model BelongsTo "Category" Model 

Dans ce scénario, vous pouvez utiliser

$this->Book->Category->find() inside BooksController 
as well as 
$this->Category->Book->find() inside CategoriesController 

En venant à votre cas, il serait utile si vous postez votre schéma de base de données. Néanmoins, pour trouver un livre, je suppose que vous utilisez certains paramètres comme Catégories, Genres, Éditeurs, etc.En supposant que chaque paramètre aura son propre table de base de données et le modèle, vos sauts de recherche seraient les suivantes:

Page 1: Liste des catégories avec cases à cocher pour la sélection

  • Fonction - Catégorie index de contrôleur()
  • View -/app/views/catégories/index
  • Laissez-passer à - la recherche de Genres Controller()

page 2: Liste des Genres avec cases à cocher pour la sélection

  • Fonction - la recherche de Genre Controller()
  • View -/app/views/genres/recherche
  • Laissez-passer à - la recherche de contrôleur Publishers()

Page 3: Liste des éditeurs avec Cochez les cases pour la sélection

  • Fonction - la recherche de contrôleur Editeur()
  • View -/app/views/éditeurs/recherche
  • Laissez-passer à - résultats du contrôleur Livres()

Page 4: Liste des Livres filtrés selon les paramètres donnés

  • Fonction - Livre du Contrôleur résultats()
  • View -/app/views/livres/résultats
  • Laissez-passer à - Aucun

J'ai essayé d'être aussi guidant que possible, laissez un commentaire si vous ne savez toujours pas comment procéder pour chercher des livres. Si vous avez besoin d'aide pour transmettre des données d'un contrôleur à un autre, lisez le Manuel CakePHP (http://book.cakephp.org/view/57/Controller-Methods) ou Google en utilisant "cakephp transmettant les données d'un contrôleur à un autre" comme mots clés.

+0

Merci amis Je vais essayer de mon mieux pour tirer le meilleur parti de toutes vos bonnes suggestions. – janjua

1

En ce qui concerne la question dans le titre:

Oui, vous pouvez utiliser un modèle dans un contrôleur. Réglez le

var $uses = array("Model_1", "Model_2", ...); 

Et l'objet modèle devrait être accessible

$this->Model_1->find(...); 
+0

merci je l'ai fait, cela a fonctionné pour moi merci encore. – janjua

3

suggestion Matiasf fonctionne, mais ce n'est pas la méthode recommandée de faire les choses. Si vous ajoutez des modèles à la propriété $ uses, vous chargez ces modèles pour chaque action de votre contrôleur, ce qui nécessite plus de puissance de traitement et peut avoir un effet négatif sur les performances de votre site.

Vous pouvez en savoir plus sur les raisons pour lesquelles ce n'est pas une bonne idée dans the CakePHP documentation.

La meilleure option consiste à utiliser la méthode de contrôleur loadModel().

Par exemple:

BooksController extends AppController { 
    function index() { 
     $this->loadModel('Category'); 
     $this->set('categories', $this->Category->find('all')); 
    } 
} 

Vous trouverez de plus amples informations sur la méthode loadModel dans la documentation: book.cakephp.org/view/977/Controller-Methods#loadModel-992

+0

1Up. La propriété $ uses est d'utiliser un modèle qui n'est pas nommé selon la dénomination conventionnelle de Cake ou d'utiliser un modèle étroitement couplé à la logique du contrôleur existant. – Ashok

Questions connexes