2

我有一个简单的CakePHP site (1.2). 我有一个页面,您可以在其中编辑和保存人员。所以我有一个 Person 模型和控制器。

在评论表中,每个人都没有或有更多评论。所以我有一个 Comment 模型,并且我的 Person 模型与 Comment 模型有一个 hasMany 关联。视图工作得很好。

我的问题是,在查看人员页面上,我有一个添加评论按钮。这应该如何工作?我应该期望 Person 控制器包含评论记录的保存,还是创建一个评论控制器并将其保存在它与人的关联之外?

我对 PHP 有经验,但对 Cake 是全新的。

有任何想法吗?我想我只是错过了一些明显的东西,但我不知道该怎么做。我觉得如果这是PHP我会在我的添加评论表单中引用 Person_id ,因此使用单独的控制器,但我觉得有一个简单模型的控制器是没用的,因为评论只在个人记录的上下文中编辑.

想法?

4

1 回答 1

1

我不是 CakePHP 专家,但我仍然认为拥有自己的控制器是有意义的。从我做的那些 CakePHP 博客教程之一的记忆中,你需要在评论模型中链接评论和帖子。这是我从中获得的一些代码:

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 的逻辑。

要保存评论(在您的个人/视图中):

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

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

所以你基本上覆盖了标准的添加动作,它是 Cake 自己添加的。希望现在有意义。此外,您可能需要一条路线,以便它获取 /comments/add/ID。我不知道这部分。:)

于 2008-09-21T12:12:44.497 回答