2013-07-20 26 views
3

我已經隱藏我的收件人字段的形式,現在我想明白的地方控制器我可以告訴收件人FOSMessageBundle - 如何發送消息,而不場形狀收件人

MessageController的價值:

/** 
* Create a new message thread 
* 
* @return Response 
*/ 
public function newThreadAction() 
{ 
    $form = $this->container->get('fos_message.new_thread_form.factory')->create(); 
    $formHandler = $this->container->get('fos_message.new_thread_form.handler'); 

    if ($message = $formHandler->process($form)) { 
     return new RedirectResponse($this->container->get('router')->generate('fos_message_thread_view', array(
      'threadId' => $message->getThread()->getId() 
     ))); 
    } 

    return $this->container->get('templating')->renderResponse('FOSMessageBundle:Message:newThread.html.twig', array(
     'form' => $form->createView(), 
     'data' => $form->getData() 
    )); 
} 

$形式的數學知識:

class NewThreadMessageFormFactory extends AbstractMessageFormFactory 
{ 
    /** 
    * Creates a new thread message 
    * 
    * @return Form 
    */ 
    public function create() 
    { 
     $message = $this->createModelInstance(); 

     return $this->formFactory->createNamed($this->formName, $this->formType, $message); 
    } 
} 

$ formHandler比賽:

class NewThreadMessageFormHandler extends AbstractMessageFormHandler 
{ 
    /** 
    * Composes a message from the form data 
    * 
    * @param AbstractMessage $message 
    * @return MessageInterface the composed message ready to be sent 
    * @throws InvalidArgumentException if the message is not a NewThreadMessage 
    */ 
    public function composeMessage(AbstractMessage $message) 
    { 
     if (!$message instanceof NewThreadMessage) { 
      throw new \InvalidArgumentException(sprintf('Message must be a NewThreadMessage instance, "%s" given', get_class($message))); 
     } 

     return $this->composer->newThread() 
        ->setSubject($message->getSubject()) 
        ->addRecipient($message->getRecipient()) 
        ->setSender($this->getAuthenticatedParticipant()) 
        ->setBody($message->getBody()) 
        ->getMessage(); 
    } 
} 

我希望有一些解決方案!

非常感謝!

+0

你想做什麼?爲什麼你需要在控制器中設置收件人t? – Mick

+0

,因爲我不希望視圖中的字段接收者 – Aymeric

回答

1

創建表單後,您可以設置表單的表單數據。 我的形式通過以下方式解決:

在你newThreadAction:

$form = $this->getFormForNewThreadAction($account); 

請記住,$帳戶在我的例子ParticipantInterface。

在你MessageController:

/** 
* @param ParticipantInterface $account 
* @return \FOS\MessageBundle\FormFactory\Form|FormInterface 
*/ 
private function getFormForNewThreadAction(ParticipantInterface $account) 
{ 
    $form = $this->getNewThreadFormFactory()->create(); 
    $preSetFormData = $this->getPreSetFormData($account, $form); 
    $form->setData($preSetFormData); 

    return $form; 
} 

/** 
* @param ParticipantInterface $account 
* @param Form $form 
* @return NewThreadMessage 
*/ 
private function getPreSetFormData(ParticipantInterface $account, Form $form) 
{ 
    $recipients = new ArrayCollection(); 
    $recipients->add($account); 

    /** @var NewThreadMessage $newThreadMessage */ 
    $newThreadMessage = $form->getData(); 
    $newThreadMessage->setRecipients($recipients); 

    return $newThreadMessage; 
} 

形式需要他NewThreadMessage數據和可以在此設置你的收件人。就這些了。

相關問題