Commit Graph

50845 Commits

Author SHA1 Message Date
Wouter de Jong
907ef311bf Lazily load the user during the check passport event 2020-08-27 16:28:46 +02:00
Fabien Potencier
53a8f7d490 Fix tests 2020-08-27 16:13:35 +02:00
Fabien Potencier
d24f040389 feature #37934 [Mailer] Mailjet Add ability to pass custom headers to API (tcheymol)
This PR was squashed before being merged into the 5.2-dev branch.

Discussion
----------

[Mailer] Mailjet Add ability to pass custom headers to API

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       | no
| License       | MIT
| Doc PR        | no

Mailjet mailer now forwards headers from original email removes forbidden headers, and sends them to Maijlet Api

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
-------

7b14ef3678 [Mailer] Mailjet Add ability to pass custom headers to API
2020-08-27 16:08:10 +02:00
Thibaut Cheymol
7b14ef3678 [Mailer] Mailjet Add ability to pass custom headers to API 2020-08-27 16:08:03 +02:00
Fabien Potencier
7da56f31ba bug #37960 [PhpUnit] Add polyfill for assertMatchesRegularExpression() (dunglas)
This PR was squashed before being merged into the 4.4 branch.

Discussion
----------

[PhpUnit] Add polyfill for assertMatchesRegularExpression()

| Q             | A
| ------------- | ---
| Branch?       | 4.4
| Bug fix?      | yes
| New feature?  | yes
| Deprecations? | no
| Tickets       | n/a
| License       | MIT
| Doc PR        | n/a

`assertRegExp()` is now deprecated in favor of `assertMatchesRegularExpression`.

Commits
-------

33eccd2a00 [PhpUnit] Add polyfill for assertMatchesRegularExpression()
2020-08-27 16:03:12 +02:00
Kévin Dunglas
33eccd2a00 [PhpUnit] Add polyfill for assertMatchesRegularExpression() 2020-08-27 16:03:04 +02:00
Fabien Potencier
4d0ebc6b04 minor #37962 Update Notifier bridge DSN in readme (jeremyFreeAgent)
This PR was merged into the 5.1 branch.

Discussion
----------

Update Notifier bridge DSN in readme

| Q             | A
| ------------- | ---
| Branch?       | 5.1
| Bug fix?      | no
| New feature?  | no
| Deprecations? | no
| Tickets       |
| License       | MIT
| Doc PR        |

Add missing DSN documentation in README for 5.1

Commits
-------

17c0784c44 Update Notifier bridge readme
2020-08-27 15:16:49 +02:00
Jérémy Romey
17c0784c44
Update Notifier bridge readme 2020-08-27 14:59:47 +02:00
Grégoire Pineau
891285475e [Semaphore] Added the component
Few years ago, we have introduced the Lock component. This is a very nice component, but sometime it is not enough. Sometime you need semaphore.

This is why I'm introducing this new component.

From wikipedia:

> In computer science, a semaphore is a variable or abstract data type used to control access to a common resource by multiple processes in a concurrent system such as a multitasking operating system. A semaphore is simply a variable. This variable is used to solve critical section problems and to achieve process synchronization in the multi processing environment. A trivial semaphore is a plain variable that is changed (for example, incremented or decremented, or toggled) depending on programmer-defined conditions.

This new component is more than a variable. This is an abstraction on top of different storage.

To make a quick comparison with a lock:

 * A lock allows only 1 process to access a resource;
 * A semaphore allow N process to access a resource.

Basically, a lock is a semaphore where `N = 1`.

PHP exposes some `sem_*` functions like [`sem_acquire`](http://php.net/sem_acquire). This module provides wrappers for the System V IPC family of functions. It includes semaphores, shared memory and inter-process messaging (IPC).

The Lock component has a storage that works with theses functions. It uses it with `N = 1`.

Wikipedia has some [examples](https://en.wikipedia.org/wiki/Semaphore_(programming)#Examples)

But I can add one more commun use case.

If you are building an async system that process user data, you may want to priorise all jobs. You can achieve that by running at maximum N jobs per user at the same time. If the user has more resources, you give him more concurrent jobs (so a bigger `N`).

Thanks to semaphores, it's pretty easy to know if a new job can be run.

I'm not saying the following services are using semaphore, but they may solve the previous problematic with semaphores. Here is some examples:

 * services like testing platform where a user can test N projects concurrently (travis, circle, appveyor, insight, ...)
 * services that ingest lots of data (newrelic, datadog, blackfire, segment.io, ...))
 * services that send email in batch (campaign monitor, mailchimp, ...)
 * etc...

To do so, since PHP is mono-threaded, you run M PHP workers. And in each worker, you look for for the next job. When you grab a job, you try to acquires a semaphore. If you got it, you process the job. If not you try another job.

FTR in other language, like Go, there are no need to run M workers, one is enough.

```php
<?php

use Symfony\Component\Lock\LockFactory;
use Symfony\Component\Lock\Store\RedisStore as LockRedisStore;
use Symfony\Component\Semaphore\SemaphoreFactory;
use Symfony\Component\Semaphore\Store\RedisStore;

require __DIR__.'/vendor/autoload.php';

$redis = new Redis();
$redis->connect('172.17.0.2');

// Internally, Semaphore needs a lock
$lock = (new LockFactory(new LockRedisStore($redis)))->createLock('test:lock', 1);

// Create a semaphore:
// * name = test
// * limit = 3 (it means only 3 process are allowed)
// * ttl = 10 seconds : Maximum expected semaphore duration in seconds
$semaphore = (new SemaphoreFactory($lock, new RedisStore($redis)))->createSemaphore('test', 3, 10);

if (!$semaphore->acquire()) {
    echo "Could not acquire the semaphore\n";
    exit(1);
}

// The semaphore has been acquired

// Do the heavy job
for ($i = 0; $i < 100; ++$i) {
    sleep(1);
    // Before the expiration, refresh the semaphore if the job is not finished yet
    if ($i % 9 === 0) {
        $semaphore->refresh();
    }
}

// Release it when finished
$semaphore->release();
```

I looked at [packagist](https://packagist.org/?query=semaphore) and:

 * most of packages are using a semaphore storage for creating a lock. So there are not relevant here;
 * some packages need an async framework to be used (amphp for example);
 * the only packages really implementing a semaphore, has a really low code quality and some bugs.

1. I initially copied the Lock component since the external API is quite similar;
1. I simplified it a lot for the current use case;
1. I implemented the RedisStorage according the [redis book](https://redislabs.com/ebook/part-2-core-concepts/chapter-6-application-components-in-redis/6-3-counting-semaphores/;)
1. I forced a TTL on the storage.
2020-08-27 14:35:29 +02:00
Fabien Potencier
6d521d4072 feature #37942 [Security] Renamed provider key to firewall name (wouterj)
This PR was merged into the 5.2-dev branch.

Discussion
----------

[Security] Renamed provider key to firewall name

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | no
| Deprecations? | yes
| Tickets       | Fix #15207
| License       | MIT
| Doc PR        | tbd

This fixes the `$providerKey` argument names on the classes that will remain in use, even when the new Security system will take over. @fabpot do you think these changes are worth it?

Officially, all token classes are not marked as `@final`. Do I need to take into account when someone is overriding the `getProviderKey()` method? Also, I couldn't find a way to trigger a deprecation notice for deprecated properties, is this a problem?

Commits
-------

91b276326d Renamed $providerKey to $firewallName
2020-08-26 17:45:58 +02:00
Wouter de Jong
91b276326d Renamed $providerKey to $firewallName 2020-08-26 17:34:05 +02:00
Nicolas Grekas
9c86cd2b4e bug #37941 [TwigBridge] allow null for $message of filter method trans (Flinsch)
This PR was merged into the 5.1 branch.

Discussion
----------

[TwigBridge] allow null for $message of filter method `trans`

| Q             | A
| ------------- | ---
| Branch?       | 5.0
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | Fix #37931
| License       | MIT

With Symfony 5.0, filter method `trans` of Symfony Twig Bridge does not allow null values for `$message` parameter anymore, breaking backward compatibility. See also #37931. The included commit provides a fix to this BC break by allowing null values again.

Commits
-------

039fc80d6c [TwigBridge] Fix #37931: BC break where filter method `trans` did not allow null values for `$message` parameter anymore
2020-08-26 16:33:20 +02:00
Flinsch
039fc80d6c [TwigBridge] Fix #37931: BC break where filter method trans did not allow null values for $message parameter anymore 2020-08-26 16:33:04 +02:00
Fabien Potencier
92cb709222 bug #37622 [PropertyAccess] Fix accessing dynamic properties (andreyserdjuk)
This PR was submitted for the master branch but it was squashed and merged into the 5.1 branch instead.

Discussion
----------

[PropertyAccess] Fix accessing dynamic properties

| Q             | A
| ------------- | ---
| Branch?       | 5.1 (to be switched when merging)
| Bug fix?      | yes
| New feature?  | no <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files -->
| Tickets       | Fix #37026 <!-- prefix each issue number with "Fix #", no need to create an issue if none exist, explain below instead -->
| License       | MIT
| Doc PR        | no <!-- required for new features -->
<!--
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
-------

47bd0180d1 [PropertyAccess] Fix accessing dynamic properties
2020-08-26 15:25:49 +02:00
Andrii Serdiuk
47bd0180d1 [PropertyAccess] Fix accessing dynamic properties 2020-08-26 15:25:42 +02:00
Fabien Potencier
c642b8fb71 Merge branch '5.1'
* 5.1:
  [HttpClient] fix chaining promises returned by HttplugClient
  [DI] fix dumping lazy non-shared services
2020-08-26 13:35:34 +02:00
Fabien Potencier
fc3095ff2f bug #37927 [HttpClient] fix chaining promises returned by HttplugClient (CthulhuDen)
This PR was merged into the 5.1 branch.

Discussion
----------

[HttpClient] fix chaining promises returned by HttplugClient

| Q             | A
| ------------- | ---
| Branch?       | 5.1
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | Fix #37925
| License       | MIT

Guzzle runtime does not play too well with foreign promises, which can be fixed by wrapping them with `promise_for`.
Added failing test case from #37925 and suggested fix.
Should not break BC because `then` callback results get resolved before being passed to next `then` callback or returned from `wait`.

Commits
-------

75043a1fb0 [HttpClient] fix chaining promises returned by HttplugClient
2020-08-26 13:34:52 +02:00
cthulhu
75043a1fb0 [HttpClient] fix chaining promises returned by HttplugClient 2020-08-26 12:50:35 +02:00
Niklas Keller
bf2d1cf6e7 Improve pause handler 2020-08-26 12:30:57 +02:00
Fabien Potencier
885390fbaf bug #37953 [DI] fix dumping lazy non-shared services (nicolas-grekas)
This PR was merged into the 5.1 branch.

Discussion
----------

[DI] fix dumping lazy non-shared services

| Q             | A
| ------------- | ---
| Branch?       | 5.1
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | Fix #37665
| License       | MIT
| Doc PR        | -

Commits
-------

a4f4ca74a7 [DI] fix dumping lazy non-shared services
2020-08-26 11:10:33 +02:00
Nicolas Grekas
a4f4ca74a7 [DI] fix dumping lazy non-shared services 2020-08-26 10:54:37 +02:00
Fabien Potencier
27bb2828e3 Merge branch '5.1'
* 5.1:
  Backport: Improve link script with rollback when using symlink
  fix more numeric cases changing in PHP 8
  Fixed autoLogin() returning null
  [Notifier] add doc for free mobile dsn
2020-08-26 10:31:06 +02:00
Fabien Potencier
216f2fa94e Merge branch '4.4' into 5.1
* 4.4:
  Backport: Improve link script with rollback when using symlink
  fix more numeric cases changing in PHP 8
2020-08-26 10:30:57 +02:00
Fabien Potencier
6d850e04be Merge branch '3.4' into 4.4
* 3.4:
  Backport: Improve link script with rollback when using symlink
  fix more numeric cases changing in PHP 8
2020-08-26 10:30:46 +02:00
Fabien Potencier
a430ccbcf1 minor #37952 Backport: Improve link script with rollback when using symlink (noniagriconomie)
This PR was merged into the 3.4 branch.

Discussion
----------

Backport: Improve link script with rollback when using symlink

| Q             | A
| ------------- | ---
| Branch?       | 3.4 <!-- see below -->
| Bug fix?      | no
| New feature?  | no <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files -->
| Tickets       | N/A <!-- prefix each issue number with "Fix #", no need to create an issue if none exist, explain below instead -->
| License       | MIT
| Doc PR        | N/A

Backports #37915 to 3.4.

Even if it's a new feature, it's a contributors tool that can be used for any version to try out.

Commits
-------

ab92e9f4c3 Backport: Improve link script with rollback when using symlink
2020-08-26 10:30:29 +02:00
noniagriconomie
ab92e9f4c3 Backport: Improve link script with rollback when using symlink 2020-08-26 10:20:55 +02:00
Fabien Potencier
160b5982cf feature #37951 [FrameworkBundle] Make AbstractPhpFileCacheWarmer public (ossinkine)
This PR was submitted for the 3.4 branch but it was merged into the 5.2-dev branch instead.

Discussion
----------

[FrameworkBundle] Make AbstractPhpFileCacheWarmer public

| Q             | A
| ------------- | ---
| Branch?       | 3.4
| Bug fix?      | no
| New feature?  | no
| Deprecations? | no
| License       | MIT

Introducing the PhpArrayAdapter was a great feature. It has proven itself well in the production.
Actually, using the adapter is closely related to warming up the cache for it. FrameworkBundle has an AbstractPhpFileCacheWarmer for conveniently creating a custom warmer.
But using it outside of the FrameworkBundle becomes more complicated because it is marked as internal.
I propose making it public and allow it to be used outside of the FrameworkBundle.

For example, I've proposed to cache Doctrine metadata using PhpArrayAdapter and the implementation uses AbstractPhpFileCacheWarmer https://github.com/doctrine/DoctrineBundle/pull/1196

Commits
-------

a0fb44238e Make AbstractPhpFileCacheWarmer public
2020-08-26 09:58:08 +02:00
Gocha Ossinkine
a0fb44238e Make AbstractPhpFileCacheWarmer public 2020-08-26 09:58:02 +02:00
Fabien Potencier
4a89215db6 feature #30335 [PropertyInfo] ConstructorExtractor which has higher priority than PhpDocExtractor and ReflectionExtractor (karser)
This PR was merged into the 5.2-dev branch.

Discussion
----------

[PropertyInfo] ConstructorExtractor which has higher priority than PhpDocExtractor and ReflectionExtractor

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | yes
| New feature?  | yes
| BC breaks?    | hopefully no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | #30053
| License       | MIT

Supersedes #30056 #30128

In short, when using PhpDocExtractor, it ignores the constructor argument type, although `argument types from the constructor are the only types that are valid for the class instantiation`.

This PR adds a separate extractor - `ConstructorExtractor` which is called first (-999) and it attempts to extract the type from constructor only, either from PhpDoc or using reflection.
I added `getTypesFromConstructor` to `PhpDocExtractor` and `ReflectionExtractor` - they implement `ConstructorArgumentTypeExtractorInterface` interface. `ConstructorExtractor` aggregates those extractors using compiler pass.

So the flow of control looks like this:
```
PropertyInfoExtractor::getTypes:
    - ConstructorExtractor::getTypes
        - PhpDocExtractor::getTypesFromConstructor
        - ReflectionExtractor::getTypesFromConstructor
    - PhpDocExtractor::getTypes
    - ReflectionExtractor::getTypes
```

Commits
-------

5049e25b01 Added ConstructorExtractor which has higher priority than PhpDocExtractor and ReflectionExtractor
2020-08-26 09:35:36 +02:00
karser
5049e25b01 Added ConstructorExtractor which has higher priority than PhpDocExtractor and ReflectionExtractor 2020-08-26 09:35:07 +02:00
Fabien Potencier
12330e8ee6 feature #37926 [lock] Lazy create table in lock PDO store (jderusse)
This PR was merged into the 5.2-dev branch.

Discussion
----------

[lock] Lazy create table in lock PDO store

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       | /
| License       | MIT
| Doc PR        | TODO

With this PR, the table used by PdoStore is automatically created (similar to Cache and Messenger componenents)

Commits
-------

eaa52bae96 Lazy create table in lock PDO store
2020-08-26 09:17:10 +02:00
Fabien Potencier
b98f2afe5e bug #37949 [Yaml] fix more numeric cases changing in PHP 8 (xabbuh)
This PR was submitted for the master branch but it was merged into the 3.4 branch instead.

Discussion
----------

[Yaml] fix more numeric cases changing in PHP 8

| Q             | A
| ------------- | ---
| Branch?       | 3.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | 968ffcfa65 (r41697638)
| License       | MIT
| Doc PR        |

see also https://wiki.php.net/rfc/saner-numeric-strings

Commits
-------

7cd5106041 fix more numeric cases changing in PHP 8
2020-08-26 08:48:07 +02:00
Christian Flothmann
7cd5106041 fix more numeric cases changing in PHP 8 2020-08-26 08:32:27 +02:00
Fabien Potencier
df7950d0e3 bug #37943 [Security] Fixed RememberMeAuthenticator::autoLogin() logic in the authenticator (wouterj)
This PR was merged into the 5.1 branch.

Discussion
----------

[Security] Fixed RememberMeAuthenticator::autoLogin() logic in the authenticator

| Q             | A
| ------------- | ---
| Branch?       | 5.1
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | Fix #37534
| License       | MIT
| Doc PR        | n/a

The `RememberMeAuthenticator` wrongly assumed the implementation details of `AbstractRememberMeServices::autoLogin()`. This means that (a) the authenticator did not work with other - custom - implementations of `RememberMeServicesInterface` and (b) there was a potentional to get an "Call to a member function getUser() on null" error.

This code removes all assumptions of the `autoLogin()` logic, other than that stated in the PHPdoc: 32ca714e93/src/Symfony/Component/Security/Http/RememberMe/RememberMeServicesInterface.php (L43-L53)

Commits
-------

93aea910d9 Fixed autoLogin() returning null
2020-08-25 21:08:41 +02:00
Fabien Potencier
bd26785240 feature #36573 [Notifier] Add Esendex bridge (odolbeau)
This PR was squashed before being merged into the 5.2-dev branch.

Discussion
----------

[Notifier] Add Esendex bridge

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| License       | MIT

Add Esendex notifier bridge.

Commits
-------

34fc8c3fc2 [Notifier] Add Esendex bridge
2020-08-25 21:06:28 +02:00
Olivier Dolbeau
34fc8c3fc2 [Notifier] Add Esendex bridge 2020-08-25 21:06:21 +02:00
Wouter de Jong
93aea910d9 Fixed autoLogin() returning null 2020-08-25 17:26:05 +02:00
Fabien Potencier
efdc35c387 feature #33540 [Serializer] Add special '*' serialization group that allows any group (nrobinaubertin)
This PR was squashed before being merged into the 5.2-dev branch.

Discussion
----------

[Serializer] Add special '*' serialization group that allows any group

| Q             | A
| ------------- | ---
| Branch?       | master for features
| Bug fix?      | no
| New feature?  | yes
| BC breaks?    | yes
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | #32622
| License       | MIT
| Doc PR        | symfony/symfony-docs#... <!-- required for new features -->

Hi,
I added support for a special serialization group: '*'.
This group lets any group serialize the attribute marked with it.

The BC break comes from the fact that someone could have used the '*' group in their code.

Commits
-------

54e24a8999 [Serializer] Add special '*' serialization group that allows any group
2020-08-25 08:52:11 +02:00
Niels Robin-Aubertin
54e24a8999 [Serializer] Add special '*' serialization group that allows any group 2020-08-25 08:52:02 +02:00
Jérémy Derussé
eaa52bae96
Lazy create table in lock PDO store 2020-08-24 00:21:27 +02:00
Fabien Potencier
704c648ba5 feature #37708 Allow Drupal to wrap the Symfony test listener (alexpott)
This PR was squashed before being merged into the 5.2-dev branch.

Discussion
----------

Allow Drupal to wrap the Symfony test listener

| Q             | A
| ------------- | ---
| Branch?       | 5.1
| Bug fix?      | kinda
| New feature?  | no <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files -->
| Tickets       | Fix #... <!-- prefix each issue number with "Fix #", no need to create an issue if none exist, explain below instead -->
| License       | MIT
| Doc PR        | symfony/symfony-docs#... <!-- required for new features -->

Drupal has a test listener that wraps the Symfony listener as we need to manipulate deprecation testing to skip specific deprecations. We've managed to remove some how custom stuff and reaching into Symfony's privates via reflection recently (and fix a bug or two) but now we're getting output like:
```
  2x: a:4:{s:11:"deprecation";s:191:"Calling Drupal\Tests\WebAssert::responseNotMatches with more than one argument is deprecated in drupal:9.1.0 and will throw an exception in drupal:10.0.0. See https://www.drupal.org/node/TODO";s:5:"class";s:52:"Drupal\Tests\comment\Functional\CommentAnonymousTest";s:6:"method";s:13:"testAnonymous";s:15:"triggering_file";s:74:"/Users/alex/dev/sites/drupal8alt.dev/core/tests/Drupal/Tests/WebAssert.php";}
    2x in DrupalListener::endTest from Drupal\Tests\Listeners
```
instead of
```
  2x: Calling Drupal\Tests\WebAssert::responseNotMatches with more than one argument is deprecated in drupal:9.1.0 and will throw an exception in drupal:10.0.0. See https://www.drupal.org/node/TODO
    2x in CommentAnonymousTest::testAnonymous from Drupal\Tests\comment\Functional
```

We can fix this by aliasing and copying the \Symfony\Bridge\PhpUnit\DeprecationErrorHandler\Deprecation class but ideally that class could be a bit more liberal in its implementation.

Commits
-------

91de46da3f Allow Drupal to wrap the Symfony test listener
2020-08-23 19:24:34 +02:00
Alex Pott
91de46da3f Allow Drupal to wrap the Symfony test listener 2020-08-23 19:24:26 +02:00
Fabien Potencier
a435dfeaf2 feature #36211 [Serializer] Adds FormErrorNormalizer (YaFou)
This PR was merged into the 5.2-dev branch.

Discussion
----------

[Serializer] Adds FormErrorNormalizer

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       | Fix #27428
| License       | MIT
| Doc PR        | symfony/symfony-docs#13885
<!--
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.
-->

# Readme
Adds `FormErrorNormalizer` for AJAX forms (see the suggestion: #27428). It was on the [FOSRestBundle](https://github.com/FriendsOfSymfony/FOSRestBundle/blob/master/Serializer/Normalizer/FormErrorNormalizer.php) and now it is implemented in the `Serializer` component.

# Roadmap
- [x] Core of the class
- [x] Output syntax
- [x] Support of the children forms
- [x] Doc

Commits
-------

dcb8d8b05d [Serializer] Adds FormErrorNormalizer
2020-08-23 18:42:14 +02:00
YaFou
dcb8d8b05d
[Serializer] Adds FormErrorNormalizer 2020-08-23 18:18:18 +02:00
Fabien Potencier
9f0eee1cb8 Fix Composer constraint 2020-08-23 12:05:10 +02:00
Fabien Potencier
32ca714e93 minor #37922 [Notifier] backport documentation changes (noniagriconomie)
This PR was merged into the 5.1 branch.

Discussion
----------

[Notifier] backport documentation changes

| Q             | A
| ------------- | ---
| Branch?       | 5.1
| Bug fix?      | no
| New feature?  | no
| Deprecations? | no
| Tickets       |
| License       | MIT
| Doc PR        |

I think #37809 should have been merged into the `5.1` branch.

Commits
-------

ff768fbdd9 [Notifier] add doc for free mobile dsn
2020-08-23 11:47:18 +02:00
Fabien Potencier
7b0d5e3e82 Merge branch '5.1'
* 5.1:
  account for is_numeric() behavior changes in PHP 8
  fix expected exception messages on PHP 8
2020-08-23 11:22:43 +02:00
Fabien Potencier
d24a181e55 Merge branch '4.4' into 5.1
* 4.4:
  account for is_numeric() behavior changes in PHP 8
  fix expected exception messages on PHP 8
2020-08-23 11:22:34 +02:00
Fabien Potencier
77418e712e Merge branch '3.4' into 4.4
* 3.4:
  account for is_numeric() behavior changes in PHP 8
  fix expected exception messages on PHP 8
2020-08-23 11:22:13 +02:00
Fabien Potencier
e0ed56b5f0 Merge branch '5.1'
* 5.1:
  Fix constraint
  [Mailer] Support Return-Path in SesApiAsyncAwsTransport
2020-08-23 11:13:44 +02:00