Lemon\RestBundle\Serializer\ConstructorFactory::create PHP Method

create() public method

public create ( $alias = 'default' )
    public function create($alias = 'default')
    {
        if (!isset($this->objectConstructorMap[$alias])) {
            throw new \RuntimeException("No ObjectConstructor was configured for alias \"{$alias}\"");
        }
        return new Serializer($this->factory, $this->handlerRegistry, $this->objectConstructorMap[$alias], $this->serializationVisitors, $this->deserializationVisitors, $this->eventDispatcher);
    }

Usage Example

Beispiel #1
0
 /**
  * @param Request $request
  * @param Response $response
  * @param string $resource
  * @param \Closure $callback
  * @return Response
  */
 public function handle(Request $request, Response $response, $resource, $callback)
 {
     $accept = $this->negotiator->getBest($request->headers->get('Accept'));
     $format = $this->negotiator->getFormat($accept->getValue());
     if ($format == 'html') {
         $format = 'json';
     }
     $response->headers->set('Content-Type', $accept->getValue());
     try {
         $manager = $this->managerFactory->create($resource);
         $context = new DeserializationContext();
         $context->enableMaxDepthChecks();
         $object = null;
         $content = $request->getContent();
         if (!empty($content)) {
             $object = $this->serializer->create($request->isMethod('patch') ? 'doctrine' : 'default')->deserialize($request->getContent(), $manager->getClass(), $format, $context);
         }
         $data = $this->envelopeFactory->create($callback($manager, $object))->export();
     } catch (InvalidException $e) {
         $response->setStatusCode(400);
         $data = array("code" => 400, "message" => $e->getMessage(), "errors" => $e->getErrors());
     } catch (NotFoundException $e) {
         $response->setStatusCode(404);
         $data = array("code" => 404, "message" => $e->getMessage());
     } catch (UnsupportedMethodException $e) {
         $response->setStatusCode(405);
         $data = array("code" => 405, "message" => $e->getMessage());
     } catch (HttpException $e) {
         $response->setStatusCode($e->getStatusCode());
         $data = array("code" => $e->getStatusCode(), "message" => $e->getMessage());
     } catch (\Exception $e) {
         $this->logger->critical($e);
         $response->setStatusCode(500);
         $data = array("code" => 500, "message" => $e->getMessage());
     }
     $groups = array('Default', 'lemon_rest', 'lemon_rest_' . $resource, 'lemon_rest_' . $resource . '_' . strtolower($request->getMethod()));
     if (is_object($data)) {
         $groups[] = 'lemon_rest_' . $resource . '_view';
     } else {
         $groups[] = 'lemon_rest_' . $resource . '_list';
     }
     $context = SerializationContext::create()->enableMaxDepthChecks();
     $context->setGroups($groups);
     if ($accept->hasParameter('version')) {
         $context->setVersion($accept->getParameter('version'));
     }
     $output = $this->serializer->create('default')->serialize($data, $format, $context);
     $response->setContent($output);
     return $response;
 }