/** * Adds a message. * * @ApiDoc( * input={"class"="sonata_notification_api_form_message", "name"="", "groups"={"sonata_api_write"}}, * output={"class"="Sonata\NotificationBundle\Model\Message", "groups"={"sonata_api_read"}}, * statusCodes={ * 200="Returned when successful", * 400="Returned when an error has occurred while message creation" * } * ) * * @Route(requirements={"_format"="json|xml"}) * * @param Request $request A Symfony request * * @return MessageInterface */ public function postMessageAction(Request $request) { $message = null; $form = $this->formFactory->createNamed(null, 'sonata_notification_api_form_message', $message, array('csrf_protection' => false)); $form->bind($request); if ($form->isValid()) { $message = $form->getData(); $this->messageManager->save($message); $view = FOSRestView::create($message); $serializationContext = SerializationContext::create(); $serializationContext->setGroups(array('sonata_api_read')); $serializationContext->enableMaxDepthChecks(); $view->setSerializationContext($serializationContext); return $view; } return $form; }
/** * {@inheritdoc} */ public function handle(MessageInterface $message, EventDispatcherInterface $dispatcher) { $event = new ConsumerEvent($message); try { $message->setStartedAt(new \DateTime()); $message->setState(MessageInterface::STATE_IN_PROGRESS); $this->messageManager->save($message); $dispatcher->dispatch($message->getType(), $event); $message->setCompletedAt(new \DateTime()); $message->setState(MessageInterface::STATE_DONE); $this->messageManager->save($message); return $event->getReturnInfo(); } catch (\Exception $e) { $message->setCompletedAt(new \DateTime()); $message->setState(MessageInterface::STATE_ERROR); $this->messageManager->save($message); throw new HandlingException('Error while handling a message', 0, $e); } }