Сохранение информации в “вспомогательной” модели в CakePHP

StackOverflow https://stackoverflow.com/questions/110825

  •  02-07-2019
  •  | 
  •  

Вопрос

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

У каждого участника нет ни одного или нескольких комментариев в таблице комментариев.Итак, у меня есть модель комментариев, и у меня есть множество ассоциаций моей модели Person с моделью комментариев.Просмотр работает отлично.

Мой вопрос в том, что на странице просмотра пользователя у меня есть кнопка добавить комментарий.Как это должно работать?Должен ли я ожидать, что Person controller включит сохранение для записи комментария, или создать comment controller и сохранить его вне его ассоциации для person?

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

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

Идеи?

Это было полезно?

Решение

Я не эксперт по 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-приложение, поэтому, когда вы переходите в /comments в своем браузере, вы можете cреальный, read, uпдать и dкомментарии элете.Итак, как вы видите, здесь не так уж много задействовано.Все, что вам нужно, - это таблицы вашей базы данных и немного логики для предоставления 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();
?>

И в ваших комментариях Controller:

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top