This PR was merged into the 4.4 branch.
Discussion
----------
[WebProfilerBundle] Decoupling TwigBundle and using the new ErrorRenderer mechanism
| Q | A
| ------------- | ---
| Branch? | 4.4
| Bug fix? | no
| New feature? | yes
| BC breaks? | no
| Deprecations? | yes
| Tests pass? | yes
| Fixed tickets | https://github.com/symfony/symfony/pull/31398#discussion_r303213713
| License | MIT
| Doc PR | -
Commits
-------
846d3e0e58
Decoupling TwigBundle and using the new ErrorRenderer mechanism
6.9 KiB
UPGRADE FROM 4.3 to 4.4
Cache
- Added argument
$prefix
toAdapterInterface::clear()
Debug
- Deprecated
FlattenException
, use theFlattenException
of theErrorRenderer
component - Deprecated the whole component in favor of
ErrorHandler
component
DependencyInjection
-
Deprecated support for short factories and short configurators in Yaml
Before:
services: my_service: factory: factory_service:method
After:
services: my_service: factory: ['@factory_service', method]
-
Deprecated
tagged
in favor oftagged_iterator
Before:
services: App\Handler: tags: ['app.handler'] App\HandlerCollection: arguments: [!tagged app.handler]
After:
services: App\Handler: tags: ['app.handler'] App\HandlerCollection: arguments: [!tagged_iterator app.handler]
-
Passing an instance of
Symfony\Component\DependencyInjection\Parameter
as class name toSymfony\Component\DependencyInjection\Definition
is deprecated.Before:
new Definition(new Parameter('my_class'));
After:
new Definition('%my_class%');
Filesystem
- Support for passing a
null
value toFilesystem::isAbsolutePath()
is deprecated.
Form
- Using
int
orfloat
as data for theNumberType
when theinput
option is set tostring
is deprecated.
FrameworkBundle
- Deprecated booting the kernel before running
WebTestCase::createClient()
. - Deprecated support for
templating
engine inTemplateController
, use Twig instead - The
$parser
argument ofControllerResolver::__construct()
andDelegatingLoader::__construct()
has been deprecated. - The
ControllerResolver
andDelegatingLoader
classes have been marked asfinal
. - The
controller_name_converter
andresolve_controller_name_subscriber
services have been deprecated. - Deprecated
routing.loader.service
, userouting.loader.container
instead.
HttpClient
- Added method
cancel()
toResponseInterface
HttpFoundation
ApacheRequest
is deprecated, useRequest
class instead.
HttpKernel
- Implementing the
BundleInterface
without implementing thegetPublicDir()
method is deprecated. This method will be added to the interface in 5.0. - The
DebugHandlersListener
class has been marked asfinal
Lock
- Deprecated
Symfony\Component\Lock\StoreInterface
in favor ofSymfony\Component\Lock\BlockingStoreInterface
andSymfony\Component\Lock\PersistingStoreInterface
. Factory
is deprecated, useLockFactory
instead
Messenger
- Deprecated passing a
ContainerInterface
instance as first argument of theConsumeMessagesCommand
constructor, pass aRoutableMessageBus
instance instead.
MonologBridge
- The
RouteProcessor
has been marked final.
Process
- Deprecated the
Process::inheritEnvironmentVariables()
method: env variables are always inherited.
PropertyAccess
- Deprecated passing
null
as 2nd argument ofPropertyAccessor::createCache()
method ($defaultLifetime
), pass0
instead.
Routing
- Deprecated
ServiceRouterLoader
in favor ofContainerLoader
. - Deprecated
ObjectRouteLoader
in favor ofObjectLoader
.
Security
- Implementations of
PasswordEncoderInterface
andUserPasswordEncoderInterface
should add a newneedsRehash()
method
Stopwatch
- Deprecated passing
null
as 1st ($id
) argument ofSection::get()
method, pass a valid child section identifier instead.
TwigBridge
- Deprecated to pass
$rootDir
and$fileLinkFormatter
as 5th and 6th argument respectively to theDebugCommand::__construct()
method, swap the variables position.
TwigBundle
-
Deprecated default value
twig.controller.exception::showAction
of thetwig.exception_controller
configuration option, set it tonull
instead. This will also change the default error response format according to https://tools.ietf.org/html/rfc7807 forjson
,xml
,atom
andtxt
formats:Before:
{ "error": { "code": 404, "message": "Sorry, the page you are looking for could not be found" } }
After:
{ "title": "Not Found", "status": 404, "detail": "Sorry, the page you are looking for could not be found" }
-
Deprecated the
ExceptionController
and all built-in error templates, use the error renderer mechanism of theErrorRenderer
component -
Deprecated loading custom error templates in non-html formats. Custom HTML error pages based on Twig keep working as before:
Before (
templates/bundles/TwigBundle/Exception/error.jsonld.twig
):{ "@id": "https://example.com", "@type": "error", "@context": { "title": "{{ status_text }}", "code": {{ status_code }}, "message": "{{ exception.message }}" } }
After (
App\ErrorRenderer\JsonLdErrorRenderer
):class JsonLdErrorRenderer implements ErrorRendererInterface { public static function getFormat(): string { return 'jsonld'; } public function render(FlattenException $exception): string { return json_encode([ '@id' => 'https://example.com', '@type' => 'error', '@context' => [ 'title' => $exception->getTitle(), 'code' => $exception->getStatusCode(), 'message' => $exception->getMessage(), ], ]); } }
Configure your rendering service tagging it with error_renderer.renderer
.
Validator
- Deprecated passing an
ExpressionLanguage
instance as the second argument ofExpressionValidator::__construct()
. - Deprecated using anything else than a
string
as the code of aConstraintViolation
, astring
type-hint will be added to the constructor of theConstraintViolation
class and to theConstraintViolationBuilder::setCode()
method in 5.0. - Deprecated passing an
ExpressionLanguage
instance as the second argument ofExpressionValidator::__construct()
. Pass it as the first argument instead. - The
Length
constraint expects theallowEmptyString
option to be defined when themin
option is used. Set it totrue
to keep the current behavior andfalse
to reject empty strings. In 5.0, it'll become optional and will default tofalse
.
WebProfilerBundle
- Deprecated the
ExceptionController
class in favor ofExceptionErrorController
- Deprecated the
TemplateManager::templateExists()
method
WebServerBundle
- The bundle is deprecated and will be removed in 5.0.