2008-09-21 7 views
2

J'ai un simple CakePHP site (1.2). J'ai une page où vous pouvez éditer et enregistrer une personne. J'ai donc un modèle Person et un contrôleur.Sauvegarder des informations dans le modèle "sub" dans CakePHP

Chaque personne n'a aucun commentaire ou plus dans la table des commentaires. J'ai donc un modèle Commentaire, et j'ai une association hasMany sur mon modèle Person au modèle Comment. La vue fonctionne très bien.

Ma question est, sur la vue de la page de la personne, j'ai un bouton de commentaire ajouter. Comment cela devrait-il fonctionner? Dois-je m'attendre à ce que le contrôleur Person inclue une sauvegarde pour l'enregistrement de commentaire, ou crée un contrôleur de commentaire et le sauvegarde en dehors de son association pour une personne? Je suis expérimenté avec PHP, mais tout nouveau à Gâteau.

Des idées? Je pense que je manque juste quelque chose d'évident, mais je ne suis pas sûr de ce qu'il faut faire. Je pense que si c'était PHP je referais le Person_id dans mon formulaire de commentaire, et donc j'utiliserais un contrôleur séparé, mais j'ai l'impression d'avoir un contrôleur pour un simple Model, puisque les commentaires ne sont édités que dans le contexte d'une personne record.

Des idées?

Répondre

1

Je ne suis pas un expert CakePHP, mais je pense toujours qu'il serait logique d'avoir votre propre contrôleur. D'après ce que je me souviens de faire un de ces tutoriels de blog CakePHP, vous devez lier les commentaires et la publication dans le modèle de commentaire. Ceci est une partie du code je de lui:

class Comment extends AppModel 
{ 
    var $name = ‘Comment’; 
    var $belongsTo = array(‘Person’); 
} 

Et alors vous avez besoin d'un contrôleur (comments_controller.php):

class CommentsController extends AppController 
{ 
    var $name = ‘Comments’; 
    var $scaffold; 
} 

Certains SQL:

CREATE TABLE comments (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
    author VARCHAR(50), 
    comment TEXT, 
    person_id INT, 
    created DATETIME DEFAULT NULL, 
    modified DATETIME DEFAULT NULL 
); 

Le $scaffold crée une application CRUD pour vous, alors quand vous allez à/commentaires dans votre navigateur, vous pouvez c reate, r ead, u pdate et d elete commentaires. Donc, comme vous le voyez, il n'y a pas beaucoup impliqué ici. Tout ce dont vous avez besoin est de vos tables de base de données et un peu de logique pour fournir person_id.

Pour enregistrer un commentaire (dans votre personne/vue):

<h2>Add comment</h2> 
<?php 
echo $form->create(‘Comment’, array(‘action’=>‘add/’.$person[‘Person’][‘id’]); 
echo $form->input(‘author’); 
echo $form->input(‘content’); 
echo $form->submit(‘Add comment’); 
echo $form->end(); 
?> 

Et dans votre CommentsController:

function add($id = NULL) { 
    if (!empty($this->data)) { 
    $this->data['Comment']['person_id'] = $id; 
    $this->data['Comment']['id'] = ''; 
    if ($this->Comment->save($this->data)) { 
     $this->Session->setFlash('Commented added'); 
     $this->redirect($this->referer()); 
    } 
    } 
} 

donc vous écrasez essentiellement le standard ajouter action, gâteau ajoute par lui-même. J'espère que cela a du sens maintenant. En outre, vous pourriez avoir besoin d'un itinéraire pour qu'il prenne/comments/add/ID. Je ne sais pas pour cette partie. :)

+0

Merci. Je comprends autant. La question que je rencontre est comment référencer le person_id dans mon contrôleur de commentaire. – Justin

+0

J'ai étendu l'exemple, j'espère que cela a du sens. – Till

Questions connexes