/** * @SuppressWarnings(PHPMD.UnusedFormalParameter) * * @param InputInterface $input * @param OutputInterface $output * * @return void */ protected function execute(InputInterface $input, OutputInterface $output) { /** @var KernelInterface $kernel */ $kernel = $this->getContainer()->get('kernel'); $bundle = $kernel->getBundle($input->getArgument('bundle')); $document = $this->documentRepository->get($input->getArgument('file')); $this->generator->setSkeletonDirs(__DIR__ . '/../Resources/skeleton'); $this->generator->generate($bundle, $document, $input->getOption('namespace')); }
/** * @param GetResponseEvent $event */ public function onKernelRequest(GetResponseEvent $event) { if (!$event->isMasterRequest()) { return; } $request = $event->getRequest(); $swaggerDocument = $this->schemaRepository->get($request->get('_definition')); $operationDefinition = $swaggerDocument->getOperationDefinition($request->getPathInfo(), $request->getMethod()); $this->processor->process($request, $operationDefinition); }
/** * @param FilterResponseEvent $event */ public function onKernelResponse(FilterResponseEvent $event) { if (!$event->isMasterRequest()) { return; } $request = $event->getRequest(); $headers = $event->getResponse()->headers; $document = $this->documentRepository->get($request->attributes->get('_definition')); switch ($document->getDefinition()->info->version) { case '2.0.0': $headers->set('Content-Type', 'application/vnd.api+json'); break; default: //noop } }
/** * @param GetResponseEvent $event */ public function onKernelRequest(GetResponseEvent $event) { if (!$event->isMasterRequest()) { return; } $request = $event->getRequest(); if ($request->getContent()) { $document = $this->documentRepository->get($request->attributes->get('_definition')); switch ($document->getDefinition()->info->version) { case '2.0.0': if ($request->getContentType() !== 'application/vnd.api+json') { $event->setResponse(new Response('', Response::HTTP_NOT_ACCEPTABLE)); } break; default: //noop } } }
/** * @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 } }
/** * @SuppressWarnings(PHPMD.UnusedFormalParameter) * * @param mixed $resource * @param null $type * * @return RouteCollection */ public function load($resource, $type = null) { $resource = (string) $resource; if (in_array($resource, $this->loadedSpecs)) { throw new \RuntimeException("Resource '{$resource}' was already loaded"); } $document = $this->documentRepository->get($resource); $routes = new RouteCollection(); foreach ($document->getPathDefinitions() as $path => $methods) { $relativePath = ltrim($path, '/'); $resourceName = strpos($relativePath, '/') ? substr($relativePath, 0, strpos($relativePath, '/')) : $relativePath; foreach ($methods as $methodName => $operationSpec) { $operationName = isset($operationSpec['operationId']) ? $operationSpec['operationId'] : $methodName; $defaults = ['_controller' => "swagger.controller.{$resourceName}:{$operationName}", '_definition' => $resource]; $requirements = []; $route = new Route($path, $defaults, $requirements); $route->setMethods($methodName); $routeName = "swagger.{$this->createRouteIdFromPath($path)}.{$operationName}"; $routes->add($routeName, $route); } } $this->loadedSpecs[] = $resource; return $routes; }
/** * @SuppressWarnings(PHPMD.UnusedFormalParameter) * * @param InputInterface $input * @param OutputInterface $output * * @return void */ protected function execute(InputInterface $input, OutputInterface $output) { $document = $this->documentRepository->get($input->getArgument('file')); $this->fixer->fix($document); $document->write($input->getOption('out')); }
/** * @test */ public function canUsePathPrefix() { $repository = new DocumentRepository('src/Tests/Functional/PetStore'); $document = $repository->get('app/petstore.yml'); $this->assertInstanceOf('KleijnWeb\\SwaggerBundle\\Document\\SwaggerDocument', $document); }