Я не эксперт 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
);
$scaffold
создает приложение CRUD для вас, поэтому, когда вы переходите к / комментариям в вашем браузере, вы можете c reate, r ead, u pdate и d elete комментарии. Так что, как вы видите, здесь не так уж и много. Все, что вам нужно, это ваши таблицы базы данных и немного логики, чтобы обеспечить 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();
?>
А в ваших комментариях контроллер:
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. Я не знаю об этой части. :)