0

我将 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);

但它不会创建新消息,它只会编辑...

4

2 回答 2

3

添加回复操作:

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);
}

补充笔记:

  • 您可以修改现有的新操作并添加检查以查看是否提供了原始消息 ID。
  • 始终以单数形式命名对象是一种数据库惯例。所以你的模型应该被称为消息而不是消息。
  • 如果原始消息有很多属性需要复制,可以使用copyon 方法Doctrine_Record而不是新建一个。
  • 您可能想要添加 dxb 提到的自我关系,以便您可以跟踪消息的回复内容。根据您的要求,您可能希望同时跟踪主题和回复。
于 2011-07-04T17:28:53.430 回答
1

也许您必须设计一个自引用表消息:回复是引用以前的新消息。

http://www.doctrine-project.org/projects/orm/1.2/docs/manual/defining-models/ru#relationships:join-table-associations:self-referencing-nest-relations:equal-nest-relations

于 2011-07-04T15:57:50.723 回答