"Ответить" на сообщение в формах 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

Другие вопросы по тегам