2009-06-25 5 views
1

Pardonner le titre de la question; passé 20 minutes à essayer d'écrire quelque chose de cohérent (douteux si réussi).Cakephp: maintien des relations hasMany/belongsTo dans les actions du contrôleur

Quoi qu'il en soit, en utilisant un blog comme un exemple, nos modèles ressemblent à ceci:

Message hasMany Commentaire Commentaire belongsTo Poster

Disons que je veux ajouter un commentaire: lors de l'enregistrement du commentaire, je besoin d'inclure la clé étrangère au Post parent (Post.id) dans le tableau de données avant d'appeler save.

Parce que je veux garder la relation dans le contexte de l'utilisateur - je ne veux pas avoir à choisir un poste d'un champ de sélection pour associer le commentaire avec - voici deux options que je vois:

1) Placez le formulaire de commentaire dans la vue de la publication.

2) passer l'identifiant de publication comme argument (via GET) à l'action Comment.add (ou écrire/lire de/à partir de la session); enregistrer et rediriger vers le parent Post.view.

L'option 1 est idéale pour un blog, mais pas pour un profil d'utilisateur, qui peut être trop long d'un formulaire à inclure dans la vue utilisateur.

L'option 2 fonctionne je suppose, mais je devrais écrire des conditions post-spécifiques d'affichage/de redirection à l'action Comments.add, et cela ne semble pas correct; d'après ce que j'ai lu, je dois essayer de maintenir une relation 1: 1 entre les contrôleurs et les modèles.

Le numéro 2 est-il acceptable en tant que meilleure pratique Web MVC? ou y a-t-il une autre option que je néglige?

Répondre

1

J'ai souvent fait les deux ensemble. J'ai mis le formulaire dans la vue pour le poste (probablement en utilisant un élément, si vous voulez le mettre ailleurs aussi), mais l'a soumis à l'action d'ajout de son contrôleur (commentaires, dans ce cas) et passer le id de la poste. Juste une note - si vous avez besoin d'implémenter des messages privés, etc, il serait préférable d'avoir la vérification dans l'action d'ajout du contrôleur de commentaires quand il vient aussi.

0

Les deux options me semblent bien.

  1. Si la forme est trop longue, il suffit de coller une vue partielle.
  2. Je ne vois pas de problème avec l'utilisation d'un modèle dans plusieurs contrôleurs. Vous ne devriez pas utiliser chaque modèle dans chaque contrôleur, bien sûr, mais si vous avez besoin des deux modèles, pourquoi pas?
Questions connexes