public function __invoke(RoutingContextInterface $context) { $match = $context->getRouteMatch(); $identifier = (string) $match->getParameter('identifier'); $pipeline = $this->manager->findPipeline($identifier); $pipeHash = $pipeline->getHash(); $etag = new EntityTag($pipeHash); $ttl = $pipeline->getTtl(); $expires = new \DateTimeImmutable('@' . (time() + $ttl)); $response = $context->getRequest()->evaluatePreconditions($etag); if ($response !== NULL) { $response->setHeader('Cache-Control', sprintf('public, max-age=%u', $ttl)); $response->setHeader(new ExpiresHeader($expires)); return $response; } if (is_dir($this->cachePath)) { foreach (glob($this->cachePath . '/' . $identifier . '-*', GLOB_NOSORT) as $file) { @unlink($file); } } $response = new HttpResponse(); $response->setHeader('Content-Type', sprintf('%s; charset="%s"', $pipeline->getMediaType(), $pipeline->getEncoding())); $response->setHeader('Access-Control-Allow-Origin', '*'); $response->setHeader('Cache-Control', sprintf('public, max-age=%u', $ttl)); $response->setHeader('ETag', $etag); $response->setHeader(new ExpiresHeader($expires)); if (is_dir($this->cachePath)) { $file = $this->cachePath . '/' . $identifier . '-' . $pipeHash; Filesystem::writeFile($file, $pipeline->dump($this->publisher)); $response->setEntity(new FileEntity(new \SplFileInfo($file))); } else { $response->setEntity((string) $pipeline->dump($this->publisher)); } return $response; }
public function readEntity(RoutingContextInterface $context, \ReflectionClass $ref, &$isRead) { if ($ref->name !== JsonEntity::class) { return; } $isRead = true; $request = $context->getRequest(); return new JsonEntity(@json_decode($request->getContents(), true)); }
public function readEntity(RoutingContextInterface $context, \ReflectionClass $ref, &$isRead) { if ($ref->name !== \DOMDocument::class) { return; } $request = $context->getRequest(); if (!$request->hasEntity()) { return; } $isRead = true; $builder = new XmlDocumentBuilder(); return $builder->buildFromSource($request->getEntity()->getContents()); }
public function readEntity(RoutingContextInterface $context, \ReflectionClass $ref, &$isRead) { if (!$ref->implementsInterface(EntityInterface::class)) { return; } $request = $context->getRequest(); if (!$request->hasEntity()) { return; } $entity = $request->getEntity(); if ($ref->isInstance($entity)) { $isRead = true; return $entity; } }
/** * Get the HTTP request (shortcut to the context). * * @var HttpRequest */ public function getRequest() { return $this->context->getRequest(); }
/** * Execute WebDAV controller logic. * * @param RoutingContextInterface $context * @return HttpResponse */ public function __invoke(RoutingContextInterface $context) { return $this->invokeHandlers($context->getPathInfo(), $context->getBaseUri(), $context->getRequest()); }
public function transformActionArguments(\ReflectionFunctionAbstract $ref, RoutingContextInterface $context) { $request = $context->getRequest(); $match = $context->getRouteMatch(); $instances = [$context, $request, $match]; $args = []; $resolverNeeded = []; // Merge query params with route params, route params have preceedence. $params = Arrays::mergeDeep($request->getUri()->getQuery(), $match->getParameters()); foreach ($ref->getParameters() as $i => $param) { $paramType = $param->getClass(); if ($paramType) { $isRead = false; foreach ($this->plugins->getEntityReaders() as $reader) { $result = $reader->readEntity($context, $paramType, $isRead); if ($isRead) { $args[$i] = $result; continue 2; } } } if (array_key_exists($param->name, $params)) { $value = $params[$param->name]; $isResolved = false; foreach ($this->plugins->getValueConverters() as $converter) { $result = $converter->resolveInput($value, $context, $isResolved, $paramType); if ($isResolved) { $args[$i] = $result; continue 2; } } if ($paramType !== NULL) { $resolverNeeded[$i] = $param; continue; } $args[$i] = $value; continue; } if ($paramType === NULL) { if (!$param->isOptional()) { throw new \InvalidArgumentException(sprintf('Missing value of parameter "%s"', $param->name)); } $args[$i] = $param->isDefaultValueAvailable() ? $param->getDefaultValue() : NULL; continue; } foreach ($instances as $instance) { if ($paramType->isInstance($instance)) { $args[$i] = $instance; continue 2; } } $resolverNeeded[$i] = $param; } foreach ($resolverNeeded as $i => $param) { $paramType = $param->getClass(); $isResolved = false; foreach ($this->plugins->getValueResolvers() as $resolver) { $result = $resolver->resolve($args, $context, $isResolved, $paramType); if ($isResolved) { $args[$i] = $result; continue 2; } } $args[$i] = $this->get($param); } ksort($args, SORT_NUMERIC); return $args; }