Frage

Ich habe eine einfache CakePHP site (1.2) bekommt. Ich habe eine Seite bekommt, wo Sie bearbeiten können, und eine Person speichern. Also ich habe eine Person Modell und Controller.

Jede Person hat keine weiteren Kommentare mehr im Kommentartabelle. So habe ich einen Kommentar Modell, und ich habe eine hasMany Assoziation auf meiner Person-Modell auf das Kommentar-Modell. Ansicht arbeitet groß.

Meine Frage ist, auf der Ansicht Person Seite, ich habe einen Kommentar hinzufügen Schaltfläche. Wie soll das funktionieren? Sollte ich die Person Controller erwarten ein Speichern für den Kommentar Datensatz umfassen, oder einen Kommentar Controller erstellen und speichern Sie es außerhalb der es Vereinigung für eine Person?

Ich bin mit PHP erlebt, aber brandneu Kuchen.

Irgendwelche Ideen? Ich glaube, ich bin nur fehlt etwas offensichtlich, aber ich bin nicht sicher, was zu tun ist. Ich fühle mich wie wenn diese PHP war ich die person_id in meinem Kommentar hinzufügen Form verweisen würde und damit einen separaten Controller verwenden, aber ich fühle mich wie eine Steuerung für ein einfaches Modell mit nutzlos ist, da Kommentare nur im Zusammenhang mit einer Person bearbeitet werden Rekord.

Ideen?

War es hilfreich?

Lösung

Ich bin kein CakePHP Experte, aber ich denke immer noch, würde es Sinn machen, eine eigenen Controller zu haben. Von dem, was ich zu tun, einer jener CakePHP Blog Tutorials erinnern ist, dass Sie die Kommentare und die Post im Kommentar Modell verknüpfen müssen. Dies ist ein Teil des Code, den ich von ihm habe:

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

Und dann brauchen Sie einen Controller (comments_controller.php):

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

Einige 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
);

Die $scaffold erstellt eine CRUD Anwendung für Sie, so dass, wenn Sie gehen zu / Kommentare in Ihrem Browser können Sie c reate, r ead, u pdate und d elete Kommentare. So, wie Sie sehen, gibt es nicht viel hier beteiligt. Alles was Sie brauchen ist Ihre Datenbanktabellen und ein wenig Logik person_id zu liefern.

Um einen Kommentar zu speichern (in Ihrer Person / Ansicht):

<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();
?>

Und in Ihrem 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());
    }
  }
}

So können Sie im Grunde die Standard-Add Aktion überschreiben, die Kuchen fügt sich. Hoffe, das macht jetzt Sinn. Auch Sie können eine Route benötigen, damit es aufgreift / Kommentare / hinzufügen / ID. Ich weiß nicht, über diesen Teil. :)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top