/** * {@inheritDoc} */ public function finishView(FormView $view, FormInterface $conversationForm, array $options) { $conversation = $this->conversationContext->getConversation(); if ($conversation !== null && !$view->parent && $options['compound']) { $conversationForm = $conversationForm->getConfig()->getAttribute('conversation_factory')->createNamed($this->conversationContext->getConversationParameterName(), 'hidden', $conversation->getConversationId(), array('mapped' => false)); $conversationFormView = $conversationForm->createView($view); $conversationFormView->vars['full_name'] = $this->conversationContext->getConversationParameterName(); $view->children[$this->conversationContext->getConversationParameterName()] = $conversationFormView; } }
/** * @param \Symfony\Component\HttpKernel\Event\FilterResponseEvent $event */ public function onKernelResponse(FilterResponseEvent $event) { if ($event->getRequestType() == HttpKernelInterface::MASTER_REQUEST) { $conversation = $this->conversationContext->getConversation(); if ($conversation !== null) { if ($conversation->getCurrentState()->isEndState()) { $conversation->end(); $this->conversationRepository->remove($conversation); $conversationalController = $this->conversationContext->getConversationalController(); $reflectionConversationalController = $this->conversationContext->getReflectionConversationalController(); if ($conversationalController !== null && $reflectionConversationalController !== null) { foreach ($reflectionConversationalController->getStatefulProperties() as $statefulProperty) { /* @var $statefulProperty \ReflectionProperty */ if ($conversation->attributes->has($statefulProperty->getName())) { $conversation->attributes->remove($statefulProperty->getName()); } } } } else { $conversationalController = $this->conversationContext->getConversationalController(); $reflectionConversationalController = $this->conversationContext->getReflectionConversationalController(); if ($conversationalController !== null && $reflectionConversationalController !== null) { foreach ($reflectionConversationalController->getStatefulProperties() as $statefulProperty) { /* @var $statefulProperty \ReflectionProperty */ if (!$statefulProperty->isPublic()) { $statefulProperty->setAccessible(true); } $conversation->attributes->set($statefulProperty->getName(), $statefulProperty->getValue($conversationalController)); if (!$statefulProperty->isPublic()) { $statefulProperty->setAccessible(false); } } } } } } }