"Ответить" на сообщение в формах Symfony
Я использую Symfony 1.4.11 с Doctrine. У меня есть личные сообщения на моем сайте, и я хочу, чтобы пользователь мог "ответить" за сообщение. Я пытаюсь изменить метод "редактирования", но я не думаю, что это хорошая идея. Как это сделать? Теперь у меня есть
$this->forward404Unless(
$messages = Doctrine_Core::getTable('Messages')->find(array($request->getParameter('id'))),
sprintf('Object messages does not exist (%s).', $request->getParameter('id'))
);
$messages->setMessage('') ;
$messages->setTitle('Re:'.$messages->getTitle()) ;
$messages->setRecipientId($messages->getSenderId()) ;
$this->form = new MessagesForm($messages);
Но это не создает новое сообщение, это только редактировать...
2 ответа
Решение
Добавить ответное действие:
public function executeReply(sfWebRequest $request)
{
$originalMessage = Doctrine_Core::getTable('Messages')->find(array($request['id']));
$this->forward404Unless($originalMessage, sprintf('Object messages does not exist (%s).', $request['id']));
$reply = new Message();
$reply->setTitle('Re:'.$originalMessage->getTitle());
$reply->setRecipientId($originalMessage->getSenderId());
$this->form = new MessagesForm($reply);
}
Дополнительные примечания:
- Вы можете изменить существующее новое действие и добавить проверку, чтобы увидеть, предоставляется ли исходный идентификатор сообщения.
- Это соглашение с базой данных, чтобы всегда называть ваши объекты в единственном числе. Таким образом, ваша модель должна называться "Сообщение", а не "Сообщения".
- Если есть много свойств исходного сообщения, которые должны быть скопированы, вы можете использовать
copy
метод наDoctrine_Record
вместо того, чтобы делать новый. - Возможно, вы захотите добавить самоотношение, как упомянуто dxb, чтобы вы могли отслеживать, на что ответно сообщение. Вы можете отслеживать как ветку, так и ответ, в зависимости от ваших требований.
Возможно, вам нужно создать табличное сообщение с собственной ссылкой: ответ - это новое сообщение, которое ссылается на предыдущее.
http://www.doctrine-project.org/projects/orm/1.2/docs/manual/defining-models/ru