Сохранение информации в «sub» модели в CakePHP - PullRequest
2 голосов
/ 21 сентября 2008

У меня есть простое CakePHP site (1.2). У меня есть страница, где вы можете редактировать и сохранять человека. Итак, у меня есть модель Person и контроллер.

Каждый человек не имеет ни одного или более комментариев в таблице комментариев. Итак, у меня есть модель Comment, и у меня есть ассоциация hasMany в моей модели Person с моделью Comment. Вид работает отлично.

У меня вопрос: на странице просмотра персоны у меня есть кнопка добавления комментария. Как это должно работать? Стоит ли ожидать, что контроллер Person будет включать сохранение для записи комментария, или создать контроллер комментариев и сохранить его вне связи с человеком?

У меня есть опыт работы с PHP, но я новичок в Cake.

Есть идеи? Я думаю, что просто упускаю что-то очевидное, но я не уверен, что делать. Я чувствую, что если бы это было PHP, я бы сослался на Person_id в форме добавления комментария и, таким образом, использовал бы отдельный контроллер, но мне кажется, что иметь контроллер для простой модели бесполезно, поскольку комментарии редактируются только в контексте Личная запись.

Идеи

1 Ответ

1 голос
/ 21 сентября 2008

Я не эксперт 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. Я не знаю об этой части. :)

...