Skip to content

Latest commit

 

History

History
576 lines (443 loc) · 22.6 KB

CHANGELOG.md

File metadata and controls

576 lines (443 loc) · 22.6 KB

CHANGELOG

3.0.3

  • fixed being able to configure exception codes and messages based on interfaces (e.g. Throwable)

3.0.2

  • fixed the ViewHandler to not override an already set status_code in the serialization context
  • fixed embedding status codes in the response body when a mapping of exception classes to status codes is configured

3.0.1

  • fixed handling requests without a content type inside the RequestBodyParamConverter
  • FlattenExceptionNormalizer does no longer implement the CacheableSupportsMethodInterface to ensure compatibility with older versions of the Symfony Serializer component

3.0.0

Features

  • added support for Symfony 5 compatibility

BC Breaks

  • the route generation feature was removed, setting it to another value than false leads to an exception

  • support for serializing exceptions was removed, setting the fos_rest.exception.serialize_exceptions option to anything else than false leads to an exception

  • support for returning anything other than string or null from resolve() when implementing the VersionResolverInterface was removed

  • removed support for passing version numbers as integers to Context::setVersion()

  • removed the isFormatTemplating(), renderTemplate(), and prepareTemplateParameters() methods from the ViewHandler class and the ViewHandlerInterface

  • the constructor of the ViewHandler class is private now, use the static create() factory method instead

  • removed the setTemplateVar(), setPopulateDefaultVars(), getTemplateVar(), and isPopulateDefaultVars() methods from the Controller\Annotations\View class

  • removed the setEngine(), setTemplate(), setTemplateData(), setTemplateVar(), getEngine(), getTemplate(), getTemplateData(), and getTemplateVar() methods from the View\View class

  • changed the default value of the fos_rest.body_listener option to false

  • removed the setMaxDepth()/getMaxDepth() methods from the Context class, use enableMaxDepth()/disableMaxDepth() instead

  • dropped support for Symfony components < 4.4

  • removed the following options:

    • fos_rest.access_denied_listener
    • fos_rest.exception.exception_controller
    • fos_rest.exception.exception_listener
    • fos_rest.exception.service
    • fos_rest.service.inflector
    • fos_rest.service.router
    • fos_rest.service.templating
    • fos_rest.view.default_engine
    • fos_rest.view.force_redirects
    • fos_rest.view.templating_formats
  • removed the following classes and interfaces:

    • FOS\RestBundle\Controller\Annotations\NamePrefix
    • FOS\RestBundle\Controller\Annotations\NoRoute
    • FOS\RestBundle\Controller\Annotations\Prefix
    • FOS\RestBundle\Controller\Annotations\RouteResource
    • FOS\RestBundle\Controller\Annotations\Version
    • FOS\RestBundle\Controller\ExceptionController
    • FOS\RestBundle\Controller\TemplatingExceptionController
    • FOS\RestBundle\Controller\TwigExceptionController
    • FOS\RestBundle\EventListener\AccessDeniedListener
    • FOS\RestBundle\EventListener\ExceptionListener
    • FOS\RestBundle\Inflector\DoctrineInflector
    • FOS\RestBundle\Inflector\InflectorInterface
    • FOS\RestBundle\Routing\Loader\DirectoryRouteLoader
    • FOS\RestBundle\Routing\Loader\Reader\RestActionReader
    • FOS\RestBundle\Routing\Loader\Reader\RestControllerReader
    • FOS\RestBundle\Routing\Loader\RestRouteLoader
    • FOS\RestBundle\Routing\Loader\RestRouteProcessor
    • FOS\RestBundle\Routing\Loader\RestXmlCollectionLoader
    • FOS\RestBundle\Routing\Loader\RestYamlCollectionLoader
    • FOS\RestBundle\Routing\ClassResourceInterface
    • FOS\RestBundle\Routing\RestRouteCollection
    • FOS\RestBundle\Serializer\Normalizer\ExceptionHandler
    • FOS\RestBundle\Serializer\Normalizer\ExceptionNormalizer
  • removed the following services and aliases:

    • fos_rest.access_denied_listener
    • fos_rest.exception_listener
    • fos_rest.exception.controller
    • fos_rest.exception.twig_controller
    • fos_rest.inflector
    • fos_rest.router
    • fos_rest.routing.loader.controller
    • fos_rest.routing.loader.directory
    • fos_rest.routing.loader.processor
    • fos_rest.routing.loader.reader.controller
    • fos_rest.routing.loader.reader.action
    • fos_rest.routing.loader.xml_collection
    • fos_rest.routing.loader.yaml_collection
    • fos_rest.serializer.exception_normalizer.jms
    • fos_rest.serializer.exception_normalizer.symfony
    • fos_rest.templating
  • the following classes are marked as internal (backwards compatibility will no longer be guaranteed):

    • FOS\RestBundle\DependencyInjection\Compiler\HandlerRegistryDecorationPass
    • FOS\RestBundle\DependencyInjection\FOSRestExtension
    • FOS\RestBundle\Form\Extension\DisableCSRFExtension
    • FOS\RestBundle\Form\Transformer\EntityToIdObjectTransformer
    • FOS\RestBundle\Normalizer\CamelKeysNormalizer
    • FOS\RestBundle\Normalizer\CamelKeysNormalizerWithLeadingUnderscore
    • FOS\RestBundle\Serializer\Normalizer\FormErrorHandler
    • FOS\RestBundle\Serializer\Normalizer\FormErrorNormalizer
    • FOS\RestBundle\Util\ExceptionValueMap
  • the following classes are now final:

    • FOS\RestBundle\Decoder\ContainerDecoderProvider
    • FOS\RestBundle\Decoder\JsonDecoder
    • FOS\RestBundle\Decoder\JsonToFormDecoder
    • FOS\RestBundle\Decoder\XmlDecoder
    • FOS\RestBundle\Form\Transformer\EntityToIdObjectTransformer
    • FOS\RestBundle\Negotiation\FormatNegotiator
    • FOS\RestBundle\Request\ParamFetcher
    • FOS\RestBundle\Request\ParamReader
    • FOS\RestBundle\Request\RequestBodyParamConverter
    • FOS\RestBundle\Response\AllowMethodsLoader\AllowedMethodsRouterLoader
    • FOS\RestBundle\Serializer\JMSSerializerAdapter
    • FOS\RestBundle\Serializer\SymfonySerializerAdapter
    • FOS\RestBundle\Version\ChainVersionResolver
    • FOS\RestBundle\Version\Resolver\HeaderVersionResolver
    • FOS\RestBundle\Version\Resolver\MediaTypeVersionResolver
    • FOS\RestBundle\Version\Resolver\QueryParameterVersionResolver
    • FOS\RestBundle\View\JsonpHandler
    • FOS\RestBundle\View\View
    • FOS\RestBundle\View\ViewHandler

2.8.3

  • fixed being able to configure exception codes and messages based on interfaces (e.g. Throwable)

2.8.2

  • fixed the ViewHandler to not override an already set status_code in the serialization context
  • fixed embedding status codes in the response body when a mapping of exception classes to status codes is configured

2.8.1

  • fixed handling requests without a content type inside the RequestBodyParamConverter
  • FlattenExceptionNormalizer does no longer implement the CacheableSupportsMethodInterface to ensure compatibility with older versions of the Symfony Serializer component

2.8.0

Features

  • added a SerializerErrorHandler that leverages the FOS\RestBundle\Serializer\Serializer interface to hook into the error rendering process provided by the ErrorHandler component since Symfony 4.4

  • added a new normalizer (for the Symfony serializer) and a new handler (for the JMS serializer) to serialize FlattenException instances, for backwards compatibility the resulting format by default is the same as was used for exceptions/errors before, use the flatten_exception_format to opt-in to a format compatible with the API Problem spec (RFC 7807):

    fos_rest:
        exception:
            flatten_exception_format: 'rfc7807'
  • added a new ResponseStatusCodeListener that maps exception/error codes to response status codes, enable it by setting the new map_exception_codes option to true

Deprecations

  • the route generation feature is deprecated, disable it explicitly:

    fos_rest:
        routing_loader: false

    You need to configure your routes explicitly, e.g. using the Symfony Core annotations or the FOSRestBundle shortcuts like FOS\RestBundle\Controller\Annotations\Get. You can use bin/console debug:router --show-controllers to help with the migration and compare routes before and after it. Change the routing loading:

    Before:

    Acme\Controller\TestController:
        type: rest
        resource: Acme\Controller\TestController
    

    After:

    Acme\Controller\TestController:
        type: annotation
        resource: Acme\Controller\TestController
    

    When using the Symfony Core route loading, route names might change as the FOSRestBundle used a different naming convention. Mind the .{_format} suffix if you used the fos_rest.routing_loader.include_format option.

    In case you have OpenAPI/Swagger annotations, you can also use OpenAPI-Symfony-Routing which removes the need to have routing information duplicated. It also allows to add the .{_format} suffix automatically as before.

    If migration to explicit routes is not possible or feasible, consider using RestRoutingBundle which extracted the auto-generation of routes in a BC way.

  • deprecated support for serializing exceptions, disable it by setting the serialize_exceptions option to false:

    fos_rest:
        exception:
            serialize_exceptions: false
  • deprecated returning anything other than string or null from resolve() when implementing the VersionResolverInterface.

  • deprecated support for passing version numbers as integers to Context::setVersion() (strings will be enforced as of 3.0)

  • deprecated the isFormatTemplating(), renderTemplate(), and prepareTemplateParameters() methods of the ViewHandler class and the ViewHandlerInterface

  • deprecated the constructor of the ViewHandler class, use the static create() factory method instead

  • deprecated the setTemplateVar(), setPopulateDefaultVars(), getTemplateVar(), and isPopulateDefaultVars() methods of the Controller\Annotations\View class

  • deprecated the setEngine(), setTemplate(), setTemplateData(), setTemplateVar(), getEngine(), getTemplate(), getTemplateData(), and getTemplateVar() methods of the View\View class

  • deprecated not enabling the fos_rest.body_listener option explicitly, it will be disabled by default in 3.0

  • deprecated the following options:

    • fos_rest.access_denied_listener
    • fos_rest.exception.exception_controller
    • fos_rest.exception.exception_listener
    • fos_rest.exception.service
    • fos_rest.service.inflector
    • fos_rest.service.router
    • fos_rest.service.templating
    • fos_rest.view.default_engine
    • fos_rest.view.force_redirects
    • fos_rest.view.templating_formats
  • the following classes and interfaces are marked as deprecated, they will be removed in 3.0:

    • FOS\RestBundle\Controller\Annotations\NamePrefix
    • FOS\RestBundle\Controller\Annotations\NoRoute
    • FOS\RestBundle\Controller\Annotations\Prefix
    • FOS\RestBundle\Controller\Annotations\RouteResource
    • FOS\RestBundle\Controller\Annotations\Version
    • FOS\RestBundle\Controller\ExceptionController
    • FOS\RestBundle\Controller\TemplatingExceptionController
    • FOS\RestBundle\Controller\TwigExceptionController
    • FOS\RestBundle\EventListener\AccessDeniedListener
    • FOS\RestBundle\EventListener\ExceptionListener
    • FOS\RestBundle\Inflector\DoctrineInflector
    • FOS\RestBundle\Inflector\InflectorInterface
    • FOS\RestBundle\Routing\Loader\DirectoryRouteLoader
    • FOS\RestBundle\Routing\Loader\Reader\RestActionReader
    • FOS\RestBundle\Routing\Loader\Reader\RestControllerReader
    • FOS\RestBundle\Routing\Loader\RestRouteLoader
    • FOS\RestBundle\Routing\Loader\RestRouteProcessor
    • FOS\RestBundle\Routing\Loader\RestXmlCollectionLoader
    • FOS\RestBundle\Routing\Loader\RestYamlCollectionLoader
    • FOS\RestBundle\Routing\ClassResourceInterface
    • FOS\RestBundle\Routing\RestRouteCollection
    • FOS\RestBundle\Serializer\Normalizer\ExceptionHandler
    • FOS\RestBundle\Serializer\Normalizer\ExceptionNormalizer
  • the following services and aliases are marked as deprecated, they will be removed in 3.0:

    • fos_rest.access_denied_listener
    • fos_rest.exception_listener
    • fos_rest.exception.controller
    • fos_rest.exception.twig_controller
    • fos_rest.inflector
    • fos_rest.router
    • fos_rest.routing.loader.controller
    • fos_rest.routing.loader.directory
    • fos_rest.routing.loader.processor
    • fos_rest.routing.loader.reader.controller
    • fos_rest.routing.loader.reader.action
    • fos_rest.routing.loader.xml_collection
    • fos_rest.routing.loader.yaml_collection
    • fos_rest.serializer.exception_normalizer.jms
    • fos_rest.serializer.exception_normalizer.symfony
    • fos_rest.templating
  • the following classes are marked as internal (backwards compatibility will no longer be guaranteed starting with FOSRestBundle 3.0):

    • FOS\RestBundle\DependencyInjection\Compiler\HandlerRegistryDecorationPass
    • FOS\RestBundle\DependencyInjection\FOSRestExtension
    • FOS\RestBundle\Form\Extension\DisableCSRFExtension
    • FOS\RestBundle\Form\Transformer\EntityToIdObjectTransformer
    • FOS\RestBundle\Normalizer\CamelKeysNormalizer
    • FOS\RestBundle\Normalizer\CamelKeysNormalizerWithLeadingUnderscore
    • FOS\RestBundle\Serializer\Normalizer\FormErrorHandler
    • FOS\RestBundle\Serializer\Normalizer\FormErrorNormalizer
    • FOS\RestBundle\Util\ExceptionValueMap
  • the following classes are marked as final (extending them will not be supported as of 3.0):

    • FOS\RestBundle\Decoder\ContainerDecoderProvider
    • FOS\RestBundle\Decoder\JsonDecoder
    • FOS\RestBundle\Decoder\JsonToFormDecoder
    • FOS\RestBundle\Decoder\XmlDecoder
    • FOS\RestBundle\Form\Transformer\EntityToIdObjectTransformer
    • FOS\RestBundle\Negotiation\FormatNegotiator
    • FOS\RestBundle\Request\ParamFetcher
    • FOS\RestBundle\Request\ParamReader
    • FOS\RestBundle\Request\RequestBodyParamConverter
    • FOS\RestBundle\Response\AllowMethodsLoader\AllowedMethodsRouterLoader
    • FOS\RestBundle\Serializer\JMSSerializerAdapter
    • FOS\RestBundle\Serializer\SymfonySerializerAdapter
    • FOS\RestBundle\Version\ChainVersionResolver
    • FOS\RestBundle\Version\Resolver\HeaderVersionResolver
    • FOS\RestBundle\Version\Resolver\MediaTypeVersionResolver
    • FOS\RestBundle\Version\Resolver\QueryParameterVersionResolver
    • FOS\RestBundle\View\JsonpHandler
    • FOS\RestBundle\View\View
    • FOS\RestBundle\View\ViewHandler

2.7.4

  • fixed compatibility with JMS Serializer with explicitly disabled max depth checks (#2060)
  • fixed config validation when mapping Throwable instances of classes that do not extend PHP's Exception class (#2131)

2.7.3

  • harden the JsonToFormDecoder to not error on non-array input (#2145)

2.7.2

  • fixed serializing Error instances when the Symfony Serializer is used (#2110)
  • fixed serializing Error instances when JMS Serializer is used (#2105)
  • fixed compatibility with null owner returned by SensioFrameworkExtraBundle (#2097)
  • completely fixed handling Throwable objects in ExceptionController::showAction(), continues #2093 (#2096)

2.7.1

  • fixed handling all Throwable objects in ExceptionController::showAction() (#2093)
  • fixed ViewHandlerInterface alias definition (#2085)

2.7.0

  • ignore SessionInterface and UserInterface controller action arguments
  • fixed ExceptionListener deprecation warning
  • fixed ControllerNameParser deprecation warning
  • fixed DisableCSRFExtension::getExtendedTypes() return type
  • improved EngineInterface error message in ViewHandler
  • improved Symfony 4.4 compatibility
  • automatically use Twig as templating engine when available

2.6.0

  • ensure compatibility with the FlattenException from the new ErrorRenderer component
  • fix handling the serialize_null option with the Symfony serializer
  • added support for using multiple constraints for the requirements option of the @RequestParam annotation
  • drop support for PHP 5.5, 5.6 and 7.0
  • drop support for SF 4.0, 4.1 and 4.2 (3.4 LTS is still supported)
  • deprecated using the ParamFetcher class without passing a validator as the third argument, this argument will become mandatory in 3.0
  • fix compatiblity without the deprecated templating in Symfony 4.3; see #2012 on how to configure the FOSRestBundle
  • removed symfony/templating from the dependencies; if you still use it you need to require it in your app

2.5.0

  • compatibility with Symfony 4.2
  • deprecated the FOSRestController base class, use the new AbstractFOSRestController instead
  • dropped support for Symfony 2.7 to 3.3
  • compatibility with JMS Serializer 2 and JMSSerializerBundle 3
  • overwrite rules when they are defined in different config files instead of throwing exceptions
  • fixed using the nullable option of the param annotations when the map option is enabled
  • ensure a predictable order of routes by sorting controllers by name when loading classes from a directory
  • reset the internal state of the view handler to fix compatibility with PHP-PM
  • fix different bugs related to the handling of API versions (see #1491, #1529, #1691)

2.4.0

  • [BC BREAK] The @Route annotation and all its children no longer extend SensioFrameworkExtraBundle's annotation. The main effect is that @Route::$service is no longer available. Instead, define your controllers using the FQCN as service IDs or create an alias in the container using the FQCN.

2.3.1

  • improved Symfony 4 compatibility

  • manually decorate the core JMS handler registry

  • run checks after SensioFrameworkExtraBundle

  • made the view handler alias public

  • check for definitions before they might be removed

  • added Yaml routing resource support

  • refactored several unit tests

2.3.0

  • added support for file paths to the directory route loader

  • added support for context factories when using JMS Serializer

  • the RequestBodyParamConverter ignores unrelated controller arguments to not conflict with Symfony's built-in argument resolver

  • made the bundle compatible with SensioFrameworkExtraBundle 4.x

  • added some interface aliases to support by ID autowiring

  • added support for custom keys for groups when using JMSSerializerBundle

  • allow to load FOSRestBundle inside the kernel before JMSSerializerBundle

  • added the fos_rest.routing_loader.prefix_methods option to disable method name prefixes in generated route names

  • removed newline characters from exception messages

1.8.0

  • added a new InvalidParameterException as a specialization of the BadRequestHttpException

  • deprecated the FOS\RestBundle\Util\ViolationFormatter class and the FOS\RestBundle\Util\ViolationFormatterInterface

  • deprecated the ViolationFormatterInterface argument of the ParamFetcher class constructor

  • deprecated the RedirectView and RouteRedirectView classes, use View::createRedirect() and View::createRouteRedirect() instead

  • added a fos_rest.exception.debug config option that defaults to the kernel.debug container parameter and can be turned on to include the caught exception message in the exception controller's response

  • introduced the concept of REST zones which makes it possible to disable all REST listeners when a request matches certain attributes

  • fixed that serialization groups are always passed to the constructor as an array

  • added annotations to support additional HTTP methods defined by RFC 2518 (WebDAV)

  • added a new loader that allows to extract REST routes from all controller classes from a directory

  • introduced a serializer adapter layer to ease the integration of custom serialization implementations

  • deprecated the getter methods of the ViewHandler class

  • fixed an issue that prevented decoration of the TemplateReferenceInterface from the Symfony Templating component

  • fixed: no longer overwrite an explicitly configured template in the view response listener

  • added support for API versioning in URL parameters, the Accept header or using a custom header

  • marked some classes and methods as internal, do no longer use them in your code as they are likely to be removed in future releases

  • deprecated the DoctrineInflector class and the InflectorInterface from the FOS\RestBundle\Util\Inflectorin favor of their replacements in the FOS\RestBundle\Inflector namespace

  • deprecated the FormatNegotiator class and the FormatNegotiatorInterface from the FOS\RestBundle\Util namespace in favor of the new FOS\RestBundle\Negotiation\FormatNegotiator class

  • deprecated the FOS\RestBundle\Util\MediaTypeNegotiatorInterface which should no longer be used

1.7.9

  • handle \Throwable instances in the ExceptionController

  • fixed that the default exclusion strategy groups for the serializer are not the empty string

  • fixed a BC break that prevented the CamelKeysNormalizer from removing leading underscores

  • fixed the AllowedMethodsRouteLoader to work with Symfony 3.0

1.7.8

  • removed uses of the reflection API in favor of faster solutions when possible

  • fixed the configuration to use serialization groups and versions at the same time

1.7.7

  • when using Symfony 3.x, the bundle doesn't call methods anymore that have been deprecated in Symfony 2.x and were removed in Symfony 3.0

  • the ViewResponseListener does not overwrite explicitly configured templates anymore

  • fixed the ParamFetcher class to properly handle sub requests

1.7.6

  • added a CamelKeysNormalizerWithLeadingUnderscore that keeps leading underscores when converting snake case to camel case (for example, leaving _username unchanged)

1.7.5

CAUTION: Accidentally, this patch release was never published.

1.7.4

  • removed some code from the ViewResponseListener class that was already present in the parent TemplateListener class

1.7.3

  • made it possible to use the bundle with Symfony 3.x and fixed some compatibility issues with Symfony 3.0

  • fixed the exception controller to return a 406 (Not Acceptable) response when the format negotiator throws an exception

1.7.2

  • fixed loading XML schema definition files in case the paths contain special characters (like spaces)

  • return the FQCN in the form type extension's getExtendedType() method to be compatible with Symfony >= 2.8

  • added the extended-type attribute to the form.type_extension tag to be compatible with Symfony >= 2.8

  • fixed some code examples in the documentation

  • fixed exception message when using non-numeric identifiers (like UUID or GUID)

  • allow version 1.x of jms/serializer and jms/serializer-bundle

  • allow to use the Symfony serializer even if the JMS serializer is present

1.7.1

  • fix regression when handling methods in @Route annotations