/** * Tries to serialize data that are not API resources (e.g. the entrypoint or data returned by a custom controller). * * @param GetResponseForControllerResultEvent $event * @param Request $request * @param object $controllerResult * * @throws RuntimeException */ private function serializeRawData(GetResponseForControllerResultEvent $event, Request $request, $controllerResult) { if (!$request->attributes->get('_api_respond')) { return; } if (is_object($controllerResult)) { $event->setControllerResult($this->serializer->serialize($controllerResult, $request->getRequestFormat())); return; } if (!$this->serializer instanceof EncoderInterface) { throw new RuntimeException(sprintf('The serializer instance must implements the "%s" interface.', EncoderInterface::class)); } $event->setControllerResult($this->serializer->encode($controllerResult, $request->getRequestFormat())); }
/** * @param GetResponseForControllerResultEvent $event */ protected function decorateView(GetResponseForControllerResultEvent $event) { $params = $event->getRequest()->attributes; array_walk($this->decorators, function (DecoratorInterface $decorator) use($event, $params) { $event->setControllerResult($decorator->decorate($params, $event->getControllerResult())); }); }
/** * Persists, updates or delete data return by the controller if applicable. * * @param GetResponseForControllerResultEvent $event * * @return mixed */ public function onKernelView(GetResponseForControllerResultEvent $event) { if (!$event->isMasterRequest()) { return; } $request = $event->getRequest(); if (!in_array($request->getMethod(), [Request::METHOD_POST, Request::METHOD_PUT, Request::METHOD_DELETE])) { return; } $resourceType = $request->attributes->get('_resource_type'); if (!$resourceType) { return; } $controllerResult = $event->getControllerResult(); if (null === ($objectManager = $this->getManager($resourceType, $controllerResult))) { return $controllerResult; } switch ($request->getMethod()) { case Request::METHOD_POST: $objectManager->persist($controllerResult); break; case Request::METHOD_DELETE: $objectManager->remove($controllerResult); $event->setControllerResult(null); break; } $objectManager->flush(); }
/** * Persists, updates or delete data return by the controller if applicable. * * @param GetResponseForControllerResultEvent $event * * @return mixed */ public function onKernelView(GetResponseForControllerResultEvent $event) { $request = $event->getRequest(); if ($request->isMethodSafe()) { return; } $resourceClass = $request->attributes->get('_api_resource_class'); if (null === $resourceClass) { return; } $controllerResult = $event->getControllerResult(); if (null === ($objectManager = $this->getManager($resourceClass, $controllerResult))) { return; } switch ($request->getMethod()) { case Request::METHOD_POST: $objectManager->persist($controllerResult); break; case Request::METHOD_DELETE: $objectManager->remove($controllerResult); $event->setControllerResult(null); break; } $objectManager->flush(); }
/** * Converts an HtmlFragment into an HtmlPage. * * @param \Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent $event * The Event to process. */ public function onHtmlFragment(GetResponseForControllerResultEvent $event) { $fragment = $event->getControllerResult(); if ($fragment instanceof HtmlFragment && !$fragment instanceof HtmlPage) { $page = $this->fragmentRenderer->render($fragment); $event->setControllerResult($page); } }
/** * Handles Kernel View events * * @param GetResponseForControllerResultEvent $event */ public function onKernelView(GetResponseForControllerResultEvent $event) { $request = $event->getRequest(); $response = $event->getResponse(); $parameters = $event->getControllerResult(); if (!$response instanceof Response && ($template = $request->attributes->get('_template'))) { return $event->setControllerResult($this->templating->render($template, $parameters)); } }
public function onKernelView(GetResponseForControllerResultEvent $event) { $result = $event->getControllerResult(); if (!$result instanceof SuccessResult) { return; } $metadata = $result->getMetadata(); $response = empty($metadata) ? new Response('', 204) : new JsonResponse($metadata, 200); $event->setControllerResult($response); }
public function onKernelView(GetResponseForControllerResultEvent $event) { $result = $event->getControllerResult(); $request = $event->getRequest(); if (!$result instanceof ResourceCreatedResult) { return; } $transformerKey = $request->attributes->get('_rest[transform]', null, true); $transformedData = $this->transformer->transform($transformerKey, $result->getResource()); $transformedData = $this->setMetadata($transformedData, $result); $event->setControllerResult(new JsonResponse($transformedData, 201)); }
public function onKernelView(GetResponseForControllerResultEvent $event) { $request = $event->getRequest(); if (!$request->attributes->has('_rest') || $event->getControllerResult() instanceof Response) { return; } $config = $this->normalizeConfig($request->attributes->get('_rest', array(), true)); $includes = $request->query->get('include', null); $data = $event->getControllerResult(); $transformedData = $this->transformResult($config, $data, $includes, $request); $event->setControllerResult($transformedData); }
/** * @param GetResponseForControllerResultEvent $event */ public function onKernelView(GetResponseForControllerResultEvent $event) { $_route = $event->getRequest()->attributes->get('_route'); if ('oro_shortcut_actionslist' == $_route) { $controllerResult = $event->getControllerResult(); foreach ($controllerResult['actionsList'] as $route => $data) { if (!$this->whitelistProvider->isItemWhitelisted($route)) { unset($controllerResult['actionsList'][$route]); } } $event->setControllerResult($controllerResult); } }
public function __invoke(GetResponseForControllerResultEvent $event) { $controllerResult = $event->getControllerResult(); $callback = $this->app['callback_resolver']->resolveCallback($this->callback); if (!$this->shouldRun($callback, $controllerResult)) { return; } $response = call_user_func($callback, $controllerResult, $event->getRequest()); if ($response instanceof Response) { $event->setResponse($response); } elseif (null !== $response) { $event->setControllerResult($response); } }
/** * @param GetResponseForControllerResultEvent $event */ public function onKernelView(GetResponseForControllerResultEvent $event) { $_route = $event->getRequest()->attributes->get('_route'); if ('oro_config_configuration_system' !== $_route) { return; } $result = $event->getControllerResult(); /** @var AbstractNodeDefinition $data */ $data = clone $result['data']; $this->cleanTree($data); $form = clone $result['form']; $this->clearForm($form); $result['data'] = $data; $result['form'] = $form; $event->setControllerResult($result); }
/** * Persists, updates or delete data return by the controller if applicable. * * @param GetResponseForControllerResultEvent $event */ public function onKernelView(GetResponseForControllerResultEvent $event) { $user = $event->getControllerResult(); if (!$user instanceof UserInterface) { return; } switch ($event->getRequest()->getMethod()) { case Request::METHOD_POST: case Request::METHOD_PUT: $this->userManager->updateUser($user, false); break; case Request::METHOD_DELETE: $this->userManager->deleteUser($user); $event->setControllerResult(null); break; } }
/** * @param GetResponseForControllerResultEvent $event */ public function onKernelView(GetResponseForControllerResultEvent $event) { $response = $event->getControllerResult(); if ($response instanceof Response) { // If it's a response, just continue return; } $request = $event->getRequest(); if ($request->attributes->has('_template')) { //template is already set return; } $nodeTranslation = $request->attributes->get('_nodeTranslation'); if ($nodeTranslation) { $entity = $request->attributes->get('_entity'); $url = $request->attributes->get('url'); $nodeMenu = $request->attributes->get('_nodeMenu'); $parameters = $request->attributes->get('_renderContext'); if ($request->get('preview') === true) { $version = $request->get('version'); if (!empty($version) && is_numeric($version)) { $nodeVersion = $this->em->getRepository('KunstmaanNodeBundle:NodeVersion')->find($version); if (!is_null($nodeVersion)) { $entity = $nodeVersion->getRef($this->em); } } } $renderContext = array('nodetranslation' => $nodeTranslation, 'slug' => $url, 'page' => $entity, 'resource' => $entity, 'nodemenu' => $nodeMenu); if (is_array($parameters) || $parameters instanceof \ArrayObject) { $parameters = array_merge($renderContext, (array) $parameters); } else { $parameters = $renderContext; } if (is_array($response)) { // If the response is an array, merge with rendercontext $parameters = array_merge($parameters, $response); } //set the rendercontext with all params as response, plus the template in the request attribs //the SensioFrameworkExtraBundle kernel.view will handle everything else $event->setControllerResult((array) $parameters); $template = new Template(array()); $template->setTemplate($entity->getDefaultView()); $request->attributes->set('_template', $template); } }
/** * Persists, updates or delete data return by the controller if applicable. * * @param GetResponseForControllerResultEvent $event */ public function onKernelView(GetResponseForControllerResultEvent $event) { $request = $event->getRequest(); try { RequestAttributesExtractor::extractAttributes($request); } catch (RuntimeException $e) { return; } $user = $event->getControllerResult(); if (!$user instanceof UserInterface || $request->isMethodSafe(false)) { return; } switch ($request->getMethod()) { case Request::METHOD_DELETE: $this->userManager->deleteUser($user); $event->setControllerResult(null); break; default: $this->userManager->updateUser($user); break; } }
/** * @param GetResponseForControllerResultEvent $event */ public function onKernelView(GetResponseForControllerResultEvent $event) { $request = $event->getRequest(); $document = $this->documentRepository->get($request->attributes->get('_definition')); switch ($document->getDefinition()->info->version) { case '2.0.0': $result = $event->getControllerResult(); if (!$result instanceof Resource && !$result instanceof Document) { $result = new Resource($result, $this->serializer); } if ($result instanceof Resource) { $result = new Document($result); } if ($result instanceof Document) { $result->addLink('self', $event->getRequest()->getPathInfo()); $event->setControllerResult($result->toArray()); } break; default: //noop } }
/** * Replaces any temporary images with actual instances of the configured UploadedFile collection. * * Automatically extracts the proper setters and getters from the metadata and instantiates the correct * UploadedFile child class. * * @param GetResponseForControllerResultEvent $event The event */ public function replaceTemporaryFile(GetResponseForControllerResultEvent $event) { $data = $event->getControllerResult(); if (!is_object($data)) { return; } $classReflection = new \ReflectionClass($data); foreach ($classReflection->getProperties() as $property) { $propertyAnnotationCollection = $this->reader->getPropertyAnnotation($property, 'PartKeepr\\UploadedFileBundle\\Annotation\\UploadedFileCollection'); $propertyAnnotation = $this->reader->getPropertyAnnotation($property, 'PartKeepr\\UploadedFileBundle\\Annotation\\UploadedFile'); $manyToOneAnnotation = $this->reader->getPropertyAnnotation($property, 'Doctrine\\ORM\\Mapping\\OneToMany'); $oneToOneAnnotation = $this->reader->getPropertyAnnotation($property, 'Doctrine\\ORM\\Mapping\\OneToOne'); if ($propertyAnnotationCollection !== null || $propertyAnnotation !== null) { if ($manyToOneAnnotation !== null) { $collection = $this->propertyAccessor->getValue($data, $property->getName()); foreach ($collection as $key => $item) { if ($item instanceof TempUploadedFile || $item instanceof TempImage) { $targetEntity = $manyToOneAnnotation->targetEntity; $newFile = $this->setReplacementFile($targetEntity, $item, $data); $collection[$key] = $newFile; } } $this->propertyAccessor->setValue($data, $property->getName(), $collection); } if ($oneToOneAnnotation !== null) { $item = $this->propertyAccessor->getValue($data, $property->getName()); if ($item instanceof TempUploadedFile || $item instanceof TempImage) { $targetEntity = $oneToOneAnnotation->targetEntity; $newFile = $this->setReplacementFile($targetEntity, $item, $data); $this->propertyAccessor->setValue($data, $property->getName(), $newFile); } else { $item = $this->propertyAccessor->getValue($data, $property->getName()); if ($item !== null && $item->getReplacement() !== null) { /** * @var UploadedFile */ $tempImage = $this->iriConverter->getItemFromIri($item->getReplacement()); $this->replaceFile($item, $tempImage); } } } } } $event->setControllerResult($data); }