2

シンプルなものがありCakePHP site (1.2)ます。個人を編集して保存できるページがあります。だから私はPersonモデルとコントローラーを持っています。

コメントテーブルには、各人のコメントはありません。したがって、コメントモデルがあり、PersonモデルとCommentモデルにhasManyの関連付けがあります。ビューはうまく機能しています。

私の質問は、「個人の表示」ページに「コメントの追加」ボタンがあるということです。これはどのように機能する必要がありますか?Personコントローラーにコメントレコードの保存を含めることを期待する必要がありますか、それともコメントコントローラーを作成して、Personの関連付けの外部に保存する必要がありますか?

私はPHPの経験がありますが、Cakeは初めてです。

何か案は?明らかな何かが欠けていると思いますが、どうしたらよいかわかりません。これがPHPコメント追加フォームでPerson_idを参照し、別のコントローラーを使用する場合のように感じますが、コメントはPersonレコードのコンテキストでのみ編集されるため、単純なモデルのコントローラーは役に立たないように感じます。 。

アイデア?

4

1 に答える 1

1

私は CakePHP の専門家ではありませんが、独自のコントローラーを持つことは理にかなっていると思います。それらの CakePHP ブログ チュートリアルの 1 つを行ったときに覚えていることは、コメント モデルでコメントと投稿をリンクする必要があるということです。これは私が持っているコードの一部です:

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

次に、コントローラー (comments_controller.php) が必要です。

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

いくつかの 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
);

はCRUD$scaffoldアプリケーションを作成するので、ブラウザで /comments に移動すると、コメント作成、読み取り、更新、および削除を行うことができます。したがって、ご覧のとおり、ここではあまり関与していません。必要なのは、データベース テーブルと、person_id を提供するための小さなロジックだけです。

コメントを保存するには (Person/view で):

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

そしてあなたのコメントコントローラーで:

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

基本的に、Cake が自動的に追加する標準の add アクションを上書きします。それが今、理にかなっていることを願っています。また、/comments/add/ID を取得するためのルートが必要になる場合もあります。この部分についてはわかりません。:)

于 2008-09-21T12:12:44.497 に答える