Сохранение информации в “вспомогательной” модели в CakePHP
-
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.Я не знаю об этой части.:)