This PR was squashed before being merged into the 5.2-dev branch.
Discussion
----------
[Messenger] add redeliveredAt in RedeliveryStamp construct
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | no
| Deprecations? | no
| Tickets | -
| License | MIT
| Doc PR | -
---
this would allows one to correctly unserialize a RedeliveryStamp with a custom serializer not using the php serialize function
Commits
-------
64d26836da [Messenger] add redeliveredAt in RedeliveryStamp construct
This PR was merged into the 5.2-dev branch.
Discussion
----------
[EventDispatcher] Minor: Avoid not needed null check in dispatch()
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | no
| Deprecations? | no
| License | MIT
| Doc PR | -
Just found a not needed null check in the heavyly called EventDispatcher::dispatch() method - the $eventName get's always a string now - no null anymore, as it gets the class name instead.
Commits
-------
0d36c11f28 [EventDispatcher] Avoid not needed null check in dispatch()
This PR was merged into the 5.2-dev branch.
Discussion
----------
[Validator] Add Isin validator constraint
Co-Authored-By: Yannis Foucher <33806646+YaFou@users.noreply.github.com>
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | yes
| Deprecations? | no
| Tickets | Fix#36362
| License | MIT
| Doc PR | symfony/symfony-docs#13960
Rebase of https://github.com/symfony/symfony/pull/36368
I asked him by mail and he didn't have time to finish the PR and allowed me to do it.
Commits
-------
8e1ffc8b99 Feature #36362 add Isin validator constraint
This PR was squashed before being merged into the 5.2-dev branch.
Discussion
----------
[Mailer] Prevent MessageLoggerListener from leaking in env=prod
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | yes
| Deprecations? | yes
| License | MIT
I was trying to send a batch of emails with `--env=prod` when I noticed that `MessageLoggerListener` was still collecting all the messages and leaking the memory. I tried to do `$this->getApplication()->reset()`, but it didn't work because `MessageLoggerListener` was not tagged (now fixed in #37705).
In this PR I propose to move the declaration of `MessageLoggerListener` to `mailer_debug.php` since the only service depending on it is `mailer.data_collector` from `mailer_debug.php`. If a developer needs to collect sent emails, a custom listener could be implemented on the project side.
- [x] deprecate the service
- [x] add a new one to `mailer_debug.php`
- [ ] add a line to CHANGELOG.md
- [ ] add a line to UPGRADE-5.2.md
Commits
-------
e226775d97 [Mailer] Prevent MessageLoggerListener from leaking in env=prod
This PR was squashed before being merged into the 5.2-dev branch.
Discussion
----------
[Lock] downgrade log.info to log.debug
| Q | A
| ------------- | ---
| Branch? | master for features / 3.4, 4.4 or 5.1 for bug fixes <!-- see below -->
| Bug fix? | yes/no
| New feature? | no <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files -->
| Tickets | Fix#37710
| License | MIT
| Doc PR | symfony/symfony-docs#... <!-- required for new features -->
we changed log behavior see issue for more details
<!--
Replace this notice by a short README for your feature/bugfix. This will help people
understand your PR and can be used as a start for the documentation.
Additionally (see https://symfony.com/releases):
- Always add tests and ensure they pass.
- Never break backward compatibility (see https://symfony.com/bc).
- Bug fixes must be submitted against the lowest maintained branch where they apply
(lowest branches are regularly merged to upper ones so they get the fixes too.)
- Features and deprecations must be submitted against branch master.
-->
Commits
-------
eea41d9655 [Lock] downgrade log.info to log.debug
This PR was merged into the 5.2-dev branch.
Discussion
----------
[Console] Add signal event
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | yes <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no
| Tickets | Fix#33411
| License | MIT
| Doc PR | symfony/symfony-docs#... <!-- required for new features -->
This new feature allows to set a listener for performing some actions after the console command get a signal.
Usage:
```php
use Symfony\Component\Console\Application;
use Symfony\Component\Console\ConsoleEvents;
use Symfony\Component\Console\Event\ConsoleSignalEvent;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\SignalRegistry\SignalRegistry;
use Symfony\Component\Console\Command\Command;
class HelloWorldCommand extends Command {
protected static $defaultName = 'app:hello-world';
protected function execute(InputInterface $input, OutputInterface $output) {}
}
$application = new Application();
$dispatcher = new EventDispatcher();
// Function that will handle signals
$dispatcher->addListener(ConsoleEvents::SIGNAL, function (ConsoleSignalEvent $event) {
echo 'Handled signal #' . $event->getHandlingSignal() . PHP_EOL;
});
$application->setDispatcher($dispatcher);
$application->setSignalRegistry(new SignalRegistry());
// List of POSIX signals for handling
$application->addHandlingSignals(SIGINT, SIGUSR1);
$application->add(new HelloWorldCommand());
$application->run();
```
Commits
-------
859b692240 [Console] add console.signal event
This PR was merged into the 5.2-dev branch.
Discussion
----------
[Validator] Added support for cascade validation on typed properties
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | yes
| Deprecations? | no
| Tickets | ~
| License | MIT
| Doc PR | TODO
This PR leverages PHP 7.4 property types to "guess" typed object members and enable default cascade validation on nested objects.
Before:
```php
use Symfony\Component\Validator\Constraints as Assert;
class Composite
{
/**
* @var self[]
*
* @Assert\Valid
*/
public array $children;
/**
* @Assert\Valid
*/
public ?self $parent;
/**
* @Assert\Valid
*/
public static ?self $root;
}
```
After:
```php
use Symfony\Component\Validator\Constraints as Assert;
/**
* @Assert\Cascade
*/
class Composite
{
/*
* @var self[]
*/
public array $children;
public ?self $parent;
public static ?self $root;
}
```
The constraint can also be used in xml, yaml, and of course raw PHP.
___________
Question: is the naming ok, maybe we could use `CascadeValid` to be more explicit?
Commits
-------
f4679ef08a [Validator] Added support for cascade validation on typed properties
This PR was squashed before being merged into the 5.2-dev branch.
Discussion
----------
[DependencyInjection] Resolve parameters in tag arguments
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | yes
| Deprecations? | no
| Tickets | Fix#35337
| License | MIT
| Doc PR | None, yet, will follow if this is accepted
Arguably this could be a BC break if people are actively relying on parameters not being resolved in tag parameters, although I can't come up with a sensible use case for that scenario.
Commits
-------
3dba1fe7bf [DependencyInjection] Resolve parameters in tag arguments
This PR was merged into the 5.2-dev branch.
Discussion
----------
[Console] added info method to symfony style
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | no
| Deprecations? | no
| Tickets |
| License | MIT
| Doc PR |
It would be nice to have an info method as part of the SymfonyStyle class. This would prevent having to use the \<INFO\> tag, and it is consistent with other methods like warning and error (similar to the types available in monolog)
Commits
-------
4cf1a1e8e6 fixed docblock
204cd739d3 added info method to symfony style
This PR was merged into the 5.2-dev branch.
Discussion
----------
[FrameworkBundle] Deprecate some public services to private
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | no
| Deprecations? | yes
| Tickets | -
| License | MIT
| Doc PR | -
Now that we can deprecate public services to private, here is a first pass on the FWB. I think all those services don't need to be public, ie we never need to access them directly in Symfony's code (except in some tests that I had to modify accordingly). I think most of theses services needed to be public before we hooked the AbstractController with a service subscriber. There are definitely more of them that can be deprecated (ie: created workflows and state machines are public but don't need to be ?) but let's start with the easy ones.
Commits
-------
87868baacb [FrameworkBundle] Deprecate some public services to private
This PR was merged into the 5.2-dev branch.
Discussion
----------
Added a FrenchInflector for the String component
I read in [this blog post](https://symfony.com/blog/new-in-symfony-5-1-deprecated-the-inflector-component) this sentence
> Symfony Inflector component converts words between their singular and plural forms (**for now, only in English**)
So I created a FrenchInflector class implementing the InflectorInterface from the String component. This inflector uses regular expressions and it is tested in the FrenchInflectorTest with a lot of the french exceptions.
| Q | A
| ------------- | ---
| Branch | master
| Bug fix | no
| New feature | yes
| Deprecations | no
| License | MIT
| Doc PR | Not yet
Changelog has been updated, but I'm not sure I did it in the good paragraph.
I don't know if I should update the symfony/symfony-docs, but I have created an example and I could create a PR with it, if you want.
```php
<?php
use Symfony\Component\String\Inflector\FrenchInflector;
$inflector = new FrenchInflector();
$result = $inflector->singularize('dents'); // ['dent']
$result = $inflector->singularize('souris'); // ['souris']
$result = $inflector->singularize('messieurs'); // ['monsieur']
$result = $inflector->pluralize('cinquante'); // ['cinquante']
$result = $inflector->pluralize('pou'); // ['poux']
$result = $inflector->pluralize('cheval'); // ['chevaux']
```
**fabbot.io** is detecting a typo, but this is not. The patch done by fabpot suggests to replace the french 'embarras' word by 'embarrass'. I shall not remove or replace it, because "embarras" is an invariant word.
Commits
-------
d903d9a757 Added a FrenchInflector for the String component French inflector implements InflectorInterface, it uses regexp and it is tested in the FrenchInflectorTest
This PR was squashed before being merged into the 5.2-dev branch.
Discussion
----------
Add the name of the env to RuntimeException
| Q | A
| ------------- | ---
| Branch? | master for features
| Bug fix? | yes
| New feature? | no
| Deprecations? | no
| Tickets |
| License | MIT
| Doc PR
if you have the name of the env in the exception message it is much easier to find the error
from -> https://github.com/symfony/dependency-injection/pull/20
Commits
-------
00ab757cbb Add the name of the env to RuntimeException
This PR was merged into the 5.2-dev branch.
Discussion
----------
[Security] Use NullToken while checking authorization
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | yes
| Deprecations? | no
| Tickets | Fix#37523
| License | MIT
| Doc PR | tbd
This allows voters to grant access to unauthenticated users. E.g. some objects can be viewed by anyone, in this case the voter has to be able to grant access to unauthenticated users.
This *does break* the interface PHPdoc of `TokenInterface`: `getUser()` returns `null` instead of `string|UserInterface`. This is only true when using the new system, so not a real BC break. I think the only thing we can do to "guide" users is to add some custom handling for type errors related to `null` and `UserInterface` methods ("Did you forgot to check for `null` in the Voter?"). Is this something I should add to this PR?
Commits
-------
e37091541c Use NullToken while checking authorization
This PR was squashed before being merged into the 5.2-dev branch.
Discussion
----------
[Router] allow to use \A and \z as regex start and end
| Q | A
| ------------- | ---
| Branch? | master <!-- see below -->
| Bug fix? | yes
| New feature? | yes <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files -->
| Tickets | —
| License | MIT
| Doc PR | symfony/symfony-docs#... <!-- required for new features -->
Some people are using `\A` and `\z` as alternative for `^` and `$` for route requirements.
E.g.: UUID pattern in ramsey/uuid (many routes broke after updating the lib):
569e93ac4e (diff-23c8536f7d61e7d839fd1c93ce0dd354L30-R31)
References:
https://www.rexegg.com/regex-anchors.html#Ahttps://www.rexegg.com/regex-anchors.html#z
P.S.: It is my first PR into Symfony. Maybe I should fix something, just let me know.
Commits
-------
f752eeeaa6 [Router] allow to use \A and \z as regex start and end
This PR was squashed before being merged into the 5.2-dev branch.
Discussion
----------
Update StopwatchPeriod.php
Adding `__toString()`, analogous to [`StopwatchEvent`](https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Stopwatch/StopwatchEvent.php#L242)
| Q | A
| ------------- | ---
| Branch? | master for features
| Bug fix? | no
| New feature? | yes
| Deprecations? | no
| Tickets |
| License | MIT
| Doc PR | none
Commits
-------
d3c2911f46 Update StopwatchPeriod.php
This PR was merged into the 5.2-dev branch.
Discussion
----------
Fix getTranslationNodeVisitor() return type
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | yes
| New feature? | no
| Deprecations? | no
| Tickets | Fix#37686
| License | MIT
| Doc PR | -
When constructing the `TranslationExtension` with any `NodeVisitorInterface` other than `TranslationNodeVisitor`, you will get a type error when calling `getTranslationNodeVisitor()`. This PR fixes that by extracting a new `TranslationNodeVisitorInterface`.
Commits
-------
c1344257f1 Fix getTranslationNodeVisitor() return type
This PR was merged into the 5.2-dev branch.
Discussion
----------
[Routing] Allow inline definition of requirements and defaults for host
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | yes
| Deprecations? | no
| Tickets | -
| License | MIT
| Doc PR | https://github.com/symfony/symfony-docs/pull/14007
This PR extends the support of inline routing requirements and defaults to the host part, which can also contain parameters.
Commits
-------
1501476d52 [Routing] Allow inline definition of requirements and defaults for host
* 5.1:
reduce column length for MySQL 5.6 compatibility
Minor improvement
Removed redundant strtolower in ConsumeMessagesCommand
getContainer cannot return null anymore
HttpClient profiler error
Fix RedisStore constructor signature
Bump Symfony version to 5.1.4
Update VERSION for 5.1.3
Update CHANGELOG for 5.1.3
Bump Symfony version to 4.4.12
Update VERSION for 4.4.11
Update CHANGELOG for 4.4.11
Bump Symfony version to 3.4.44
updated VERSION for 3.4.43
update CONTRIBUTORS for 3.4.43
updated CHANGELOG for 3.4.43
Fix author for class CachePoolClearerCacheWarmer
This PR was merged into the 5.1 branch.
Discussion
----------
Fix author for class CachePoolClearerCacheWarmer
| Q | A
| ------------- | ---
| Branch? | 5.1
| Bug fix? | no
| New feature? | no
| Deprecations? | no
| Tickets | Fix https://github.com/symfony/symfony/pull/35109#discussion_r363985644
| License | MIT
| Doc PR | symfony/symfony-docs#...
Commits
-------
b3d0812976 Fix author for class CachePoolClearerCacheWarmer
* 4.4:
reduce column length for MySQL 5.6 compatibility
Minor improvement
Removed redundant strtolower in ConsumeMessagesCommand
Fix RedisStore constructor signature
Bump Symfony version to 4.4.12
Update VERSION for 4.4.11
Update CHANGELOG for 4.4.11
Bump Symfony version to 3.4.44
updated VERSION for 3.4.43
update CONTRIBUTORS for 3.4.43
updated CHANGELOG for 3.4.43
This PR was merged into the 5.1 branch.
Discussion
----------
HttpClient profiler error
| Q | A
| ------------- | ---
| Branch? | 5.1
| Bug fix? | yes
| New feature? | no
| Deprecations? | no
| Tickets | Fix
| License | MIT
| Doc PR | symfony/symfony-docs
When no error occurs making http request, the span was red, it is wierd
Commits
-------
5199f1f9f3 HttpClient profiler error
This PR was squashed before being merged into the 3.4 branch.
Discussion
----------
Minor improvement
| Q | A
| ------------- | ---
| Branch? | 3.4
| Bug fix? | no
| New feature? | no
| Deprecations? | no
| Tickets |
| License | MIT
| Doc PR |
Related to https://symfony.com/releases
Commits
-------
e80dfe7c67 Minor improvement
This PR was merged into the 4.4 branch.
Discussion
----------
Removed redundant strtolower in ConsumeMessagesCommand
| Q | A
| ------------- | ---
| Branch? | 4.4
| Bug fix? | no
| New feature? | no
| Deprecations? | no
| Tickets | no
| License | MIT
| Doc PR | no
Commits
-------
e288834cda Removed redundant strtolower in ConsumeMessagesCommand
This PR was merged into the 5.1 branch.
Discussion
----------
KernelBrowser::getContainer cannot return null anymore
| Q | A
| ------------- | ---
| Branch? | 5.1
| Bug fix? | no
| New feature? | no
| Deprecations? | no
| License | MIT
This is a pedantic change.
In symfony 4.4, getContainer could return null.
Since symfony 5.0, this is the implementation:
```
public function getContainer()
{
if (!$this->container) {
throw new \LogicException('Cannot retrieve the container from a non-booted kernel.');
}
return $this->container;
}
```
So I updated the phpdoc.
Commits
-------
257549e9c8 getContainer cannot return null anymore
This PR was merged into the 4.4 branch.
Discussion
----------
Fix RedisStore constructor signature
| Q | A
| ------------- | ---
| Branch? | 4.4
| Bug fix? | yes
| New feature? | no
| Deprecations? | no
| Tickets | no
| License | MIT
| Doc PR | no
This is a fix for a regression from #37590
Commits
-------
6831271feb Fix RedisStore constructor signature