Question

J'ai un simple site CakePHP (1.2) . J'ai une page où vous pouvez éditer et sauvegarder une personne. J'ai donc un modèle et un contrôleur Personne.

Chaque personne n'a pas ou plus de commentaires dans la table de commentaires. J'ai donc un modèle Comment et une association hasMany sur mon modèle Person et sur le modèle Comment. La vue fonctionne très bien.

Ma question est la suivante: sur la page Afficher une personne, j'ai un bouton Ajouter un commentaire. Comment cela devrait-il fonctionner? Devrais-je m'attendre à ce que le contrôleur de personnes 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?

J'ai de l'expérience avec PHP, mais c'est tout nouveau pour Cake.

Des idées? Je pense que je manque juste quelque chose d’évident, mais je ne sais pas quoi faire. J'ai l'impression que s'il s'agissait de PHP , je ferais référence à Person_id dans mon formulaire d'ajout de commentaire et utiliserais donc un contrôleur séparé, mais j'ai l'impression qu'il est inutile d'avoir un contrôleur pour un modèle simple, car les commentaires ne sont que des commentaires. édité dans le contexte d'un enregistrement Personne.

Des idées?

Était-ce utile?

La solution

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

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

Ensuite, 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. Ainsi, lorsque vous accédez à / commentaires dans votre navigateur, vous pouvez c créer, r . ead, u pdate et d supprimez les commentaires. Donc, comme vous le voyez, il n’ya pas grand-chose à faire ici. Tout ce dont vous avez besoin, ce sont vos tables de base de données et un peu de logique pour fournir person_id.

Pour enregistrer un commentaire (dans votre personne / votre 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 fondamentalement l’action d’ajout standard, que Cake ajoute elle-même. J'espère que cela a du sens maintenant. En outre, vous aurez peut-être besoin d'un itinéraire pour qu'il prenne / commentaires / ajouter / ID. Je ne sais pas pour cette partie. :)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top