This PR was merged into the 4.4 branch.
Discussion
----------
[Validator] Add a Length::$allowEmptyString option to reject empty strings
| Q | A
| ------------- | ---
| Branch? | 4.4 <!-- see below -->
| Bug fix? | no
| New feature? | yes <!-- please update src/**/CHANGELOG.md files -->
| BC breaks? | no <!-- see https://symfony.com/bc -->
| Deprecations? | yes <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files -->
| Tests pass? | yes <!-- please add some, will be required by reviewers -->
| Fixed tickets | N/A <!-- #-prefixed issue number(s), if any -->
| License | MIT
| Doc PR | Todo (change the warning on top of https://symfony.com/doc/current/reference/constraints/Length.html)
which defaults to `true` in 4.4 but will trigger a deprecation if not set explicitly
in order to make the default `false` in 5.0.
While it could be solved now thanks to #29641 by using both `@Length(min=1)` & `@NotBlank(allowNull=true)` constraints,
as expressed in https://github.com/symfony/symfony/issues/27876#issuecomment-403307783 and following comments, the `@Length(min=1)` behavior doesn't match our expectations when reading it: it feels logical to invalidate empty strings, but it actually doesn't.
Hence the proposal of making the behavior of rejecting empty strings the default in 5.0.
In my opinion, the flag could even be removed later.
Commits
-------
e113e7f812
[Validator] Add a Length::$allowEmptyString option to reject empty strings
2.8 KiB
2.8 KiB
UPGRADE FROM 4.3 to 4.4
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]
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 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.
HttpClient
- Added method
cancel()
toResponseInterface
HttpFoundation
ApacheRequest
is deprecated, useRequest
class instead.
HttpKernel
- The
DebugHandlersListener
class has been marked asfinal
Messenger
- Deprecated passing a
ContainerInterface
instance as first argument of theConsumeMessagesCommand
constructor, pass aRoutableMessageBus
instance instead.
MonologBridge
- The
RouteProcessor
has been marked final.
PropertyAccess
- Deprecated passing
null
as 2nd argument ofPropertyAccessor::createCache()
method ($defaultLifetime
), pass0
instead.
Security
- Implementations of
PasswordEncoderInterface
andUserPasswordEncoderInterface
should add a newneedsRehash()
method
TwigBridge
- Deprecated to pass
$rootDir
and$fileLinkFormatter
as 5th and 6th argument respectively to theDebugCommand::__construct()
method, swap the variables position.
Validator
- 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
.