flags = $flags; } /** * {@inheritdoc} */ public function registerBundles(): iterable { $bundles = [ new FrameworkBundle(), new TwigBundle(), new SensioFrameworkExtraBundle(), new ApiPlatformBundle(), new NelmioApiDocBundle(), new TestBundle(), new FOSRestBundle(), ]; if ($this->flags & self::USE_JMS) { $bundles[] = new JMSSerializerBundle(); if ($this->flags & self::USE_BAZINGA) { $bundles[] = new BazingaHateoasBundle(); } } return $bundles; } /** * {@inheritdoc} */ protected function configureRoutes($routes) { $this->import($routes, __DIR__.'/Resources/routes.yaml', '/', 'yaml'); if (class_exists(SerializedName::class)) { $this->import($routes, __DIR__.'/Controller/SerializedNameController.php', '/', 'annotation'); } if ($this->flags & self::USE_JMS) { $this->import($routes, __DIR__.'/Controller/JMSController.php', '/', 'annotation'); } if ($this->flags & self::USE_BAZINGA) { $this->import($routes, __DIR__.'/Controller/BazingaController.php', '/', 'annotation'); try { new \ReflectionMethod(Embedded::class, 'getType'); $this->import($routes, __DIR__.'/Controller/BazingaTypedController.php', '/', 'annotation'); } catch (\ReflectionException $e) { } } if ($this->flags & self::ERROR_ARRAY_ITEMS) { $this->import($routes, __DIR__.'/Controller/ArrayItemsErrorController.php', '/', 'annotation'); } } /** * BC for sf < 5.1. */ private function import($routes, $resource, $prefix, $type) { if ($routes instanceof RoutingConfigurator) { $routes->withPath($prefix)->import($resource, $type); } else { $routes->import($resource, $prefix, $type); } } /** * {@inheritdoc} */ protected function configureContainer(ContainerBuilder $c, LoaderInterface $loader) { $framework = [ 'assets' => true, 'secret' => 'MySecretKey', 'test' => null, 'validation' => null, 'form' => null, 'serializer' => ['enable_annotations' => true], 'property_access' => true, ]; $c->loadFromExtension('framework', $framework); $c->loadFromExtension('twig', [ 'strict_variables' => '%kernel.debug%', 'exception_controller' => null, ]); $c->loadFromExtension('sensio_framework_extra', [ 'router' => [ 'annotations' => false, ], ]); $c->loadFromExtension('api_platform', [ 'mapping' => ['paths' => ['%kernel.project_dir%/Tests/Functional/Entity']], ]); $c->loadFromExtension('fos_rest', [ 'format_listener' => [ 'rules' => [ [ 'path' => '^/', 'fallback_format' => 'json', ], ], ], ]); // If FOSRestBundle 2.8 if (class_exists(\FOS\RestBundle\EventListener\ResponseStatusCodeListener::class)) { $c->loadFromExtension('fos_rest', [ 'exception' => [ 'enabled' => false, 'exception_listener' => false, 'serialize_exceptions' => false, ], 'body_listener' => false, 'routing_loader' => false, ]); } // Filter routes $c->loadFromExtension('nelmio_api_doc', [ 'documentation' => [ 'servers' => [ // from https://github.com/nelmio/NelmioApiDocBundle/issues/1691 [ 'url' => 'https://api.example.com/secured/{version}', 'variables' => ['version' => ['default' => 'v1']], ], ], 'info' => [ 'title' => 'My Default App', ], 'paths' => [ // Ensures we can define routes in Yaml without defining OperationIds // See https://github.com/zircote/swagger-php/issues/1153 '/api/test-from-yaml' => ['get' => [ 'responses' => [ 200 => ['description' => 'success'], ], ]], '/api/test-from-yaml2' => ['get' => [ 'responses' => [ 200 => ['description' => 'success'], ], ]], ], 'components' => [ 'schemas' => [ 'Test' => [ 'type' => 'string', ], // Ensures https://github.com/nelmio/NelmioApiDocBundle/issues/1650 is working 'Pet' => [ 'type' => 'object', ], 'Cat' => [ 'allOf' => [ ['$ref' => '#/components/schemas/Pet'], ['type' => 'object'], ], ], 'AddProp' => [ 'type' => 'object', 'additionalProperties' => false, ], ], 'parameters' => [ 'test' => [ 'name' => 'id', 'in' => 'path', 'required' => true, ], ], 'responses' => [ '201' => [ 'description' => 'Awesome description', ], ], ], ], 'areas' => [ 'default' => [ 'path_patterns' => ['^/api(?!/admin)'], 'host_patterns' => ['^api\.'], ], 'test' => [ 'path_patterns' => ['^/test'], 'host_patterns' => ['^api-test\.'], 'documentation' => [ 'info' => [ 'title' => 'My Test App', ], ], ], ], 'models' => [ 'names' => [ [ 'alias' => 'PrivateProtectedExposure', 'type' => PrivateProtectedExposure::class, ], [ 'alias' => 'JMSPicture_mini', 'type' => JMSPicture::class, 'groups' => ['mini'], ], [ 'alias' => 'BazingaUser_grouped', 'type' => BazingaUser::class, 'groups' => ['foo'], ], [ 'alias' => 'JMSComplex', 'type' => JMSComplex::class, 'groups' => [ 'list', 'details', 'User' => ['list'], ], ], [ 'alias' => 'JMSComplexDefault', 'type' => JMSComplex::class, 'groups' => null, ], ], ], ]); $def = new Definition(VirtualTypeClassDoesNotExistsHandlerDefinedDescriber::class); $def->addTag('nelmio_api_doc.model_describer'); $c->setDefinition('nelmio.test.jms.virtual_type.describer', $def); } /** * {@inheritdoc} */ public function getCacheDir(): string { return parent::getCacheDir().'/'.$this->flags; } /** * {@inheritdoc} */ public function getLogDir(): string { return parent::getLogDir().'/'.$this->flags; } public function serialize() { return serialize($this->useJMS); } public function unserialize($str) { $this->__construct(unserialize($str)); } }