«Ответить» на сообщение в формах Symfony - PullRequest
0 голосов
/ 04 июля 2011

Я использую 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 ]

3 голосов
/ 04 июля 2011

Добавить ответное действие:

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, чтобы вы могли отслеживать, на что ответно сообщение. Вы можете отслеживать как ветку, так и ответ, в зависимости от ваших требований.
1 голос
/ 04 июля 2011

Возможно, вам нужно создать табличное сообщение с собственной ссылкой: ответ - это новое сообщение, которое ссылается на предыдущее.

http://www.doctrine -project.org / projects / orm / 1.2 / docs/ ручные / задающая-модель / RU # отношения: нарисуйте табличную-ассоциацию: автореферентное-гнездование отношения: равная-гнездовые-отношения

...