Merge branch '5.0' into 5.1

* 5.0:
  [Mime] Remove unused var
  [HttpClient] fix monitoring timeouts when other streams are active
  [PhpUnitBridge] fix syntax on PHP 5.3
  [PhpUnitBridge] Fix undefined index when output of "composer show" cannot be parsed
  properly cascade validation to child forms
  [PhpUnitBridge] fix undefined var on version 3.4
  Move ajax clear event listener initialization on loadToolbar
  [HttpClient] Throw JsonException instead of TransportException on empty response in Response::toArray()
  take into account the context when preserving empty array objects
  [VarExporter] tfix: s/markAsSkipped/markTestSkipped/
  bumped Symfony version to 5.0.10
  updated VERSION for 5.0.9
  updated CHANGELOG for 5.0.9
  bumped Symfony version to 4.4.10
  updated VERSION for 4.4.9
  updated CHANGELOG for 4.4.9
  bumped Symfony version to 3.4.42
  updated VERSION for 3.4.41
  update CONTRIBUTORS for 3.4.41
  updated CHANGELOG for 3.4.41
This commit is contained in:
Nicolas Grekas 2020-06-07 17:42:22 +02:00
commit 2ea0a147ce
20 changed files with 346 additions and 85 deletions

View File

@ -7,6 +7,68 @@ in 4.4 minor versions.
To get the diff for a specific change, go to https://github.com/symfony/symfony/commit/XXX where XXX is the change hash To get the diff for a specific change, go to https://github.com/symfony/symfony/commit/XXX where XXX is the change hash
To get the diff between two versions, go to https://github.com/symfony/symfony/compare/v4.4.0...v4.4.1 To get the diff between two versions, go to https://github.com/symfony/symfony/compare/v4.4.0...v4.4.1
* 4.4.9 (2020-05-31)
* bug #37008 [Security] Fixed AbstractToken::hasUserChanged() (wouterj)
* bug #36894 [Validator] never directly validate Existence (Required/Optional) constraints (xabbuh)
* bug #37007 [Console] Fix QuestionHelper::disableStty() (chalasr)
* bug #36865 [Form] validate subforms in all validation groups (xabbuh)
* bug #36907 Fixes sprintf(): Too few arguments in form transformer (pedrocasado)
* bug #36868 [Validator] Use Mime component to determine mime type for file validator (pierredup)
* bug #37000 Add meaningful message when using ProcessHelper and Process is not installed (l-vo)
* bug #36995 [TwigBridge] fix fallback html-to-txt body converter (nicolas-grekas)
* bug #36993 [ErrorHandler] fix setting $trace to null in FatalError (nicolas-grekas)
* bug #36987 Handle fetch mode deprecation of DBAL 2.11. (derrabus)
* bug #36974 [Security] Fixed handling of CSRF logout error (wouterj)
* bug #36947 [Mime] Allow email message to have "To", "Cc", or "Bcc" header to be valid (Ernest Hymel)
* bug #36914 Parse and render anonymous classes correctly on php 8 (derrabus)
* bug #36921 [OptionsResolver][Serializer] Remove calls to deprecated ReflectionParameter::getClass() (derrabus)
* bug #36920 [VarDumper] fix PHP 8 support (nicolas-grekas)
* bug #36917 [Cache] Accessing undefined constants raises an Error in php8 (derrabus)
* bug #36891 Address deprecation of ReflectionType::getClass() (derrabus)
* bug #36899 [VarDumper] ReflectionFunction::isDisabled() is deprecated (derrabus)
* bug #36905 [Validator] Catch expected ValueError (derrabus)
* bug #36915 [DomCrawler] Catch expected ValueError (derrabus)
* bug #36908 [Cache][HttpClient] Made method signatures compatible with their corresponding traits (derrabus)
* bug #36906 [DomCrawler] Catch expected ValueError (derrabus)
* bug #36904 [PropertyAccess] Parse php 8 TypeErrors correctly (derrabus)
* bug #36839 [BrowserKit] Raw body with custom Content-Type header (azhurb)
* bug #36896 [Config] Removed implicit cast of ReflectionProperty to string (derrabus)
* bug #35944 [Security/Core] Fix wrong roles comparison (thlbaut)
* bug #36882 [PhpUnitBridge] fix installing under PHP >= 8 (nicolas-grekas)
* bug #36833 [HttpKernel] Fix that the `Store` would not save responses with the X-Content-Digest header present (mpdude)
* bug #36867 [PhpUnitBridge] fix bad detection of unsilenced deprecations (nicolas-grekas)
* bug #36862 [Security] Unserialize $parentData, if needed, to avoid errors (rfaivre)
* bug #36855 [HttpKernel] Fix error logger when stderr is redirected to /dev/null (fabpot)
* bug #36838 [HttpKernel] Bring back the debug toolbar (derrabus)
* bug #36592 [BrowserKit] Allow Referer set by history to be overridden (Slamdunk)
* bug #36823 [HttpClient] fix PHP warning + accept status code >= 600 (nicolas-grekas)
* bug #36824 [Security/Core] fix compat of `NativePasswordEncoder` with pre-PHP74 values of `PASSWORD_*` consts (nicolas-grekas)
* bug #36811 [DependencyInjection] Fix register event listeners compiler pass (X-Coder264)
* bug #36789 Change priority of KernelEvents::RESPONSE subscriber (marcw)
* bug #36794 [Serializer] fix issue with PHP 8 (nicolas-grekas)
* bug #36786 [WebProfiler] Remove 'none' when appending CSP tokens (ndench)
* bug #36743 [Yaml] Fix escaped quotes in quoted multi-line string (ossinkine)
* bug #36777 [TwigBundle] FormExtension does not have a constructor anymore since sf 4.0 (Tobion)
* bug #36716 [Mime] handle passing custom mime types as string (mcneely)
* bug #36747 Queue name is a required parameter (theravel)
* bug #36751 [Mime] fix bad method call on `EmailAddressContains` (Kocal)
* bug #36696 [Console] don't check tty on stdin, it breaks with "data lost during stream conversion" (nicolas-grekas)
* bug #36569 [PhpUnitBridge] Mark parent class also covered in CoverageListener (lyrixx)
* bug #36690 [Yaml] prevent notice for invalid octal numbers on PHP 7.4 (xabbuh)
* bug #36590 [Console] Default hidden question to 1 attempt for non-tty session (ostrolucky)
* bug #36497 [Filesystem] Handle paths on different drives (crishoj)
* bug #36678 [WebProfiler] Do not add src-elem CSP directives if they do not exist (ndench)
* bug #36501 [DX] Show the ParseException message in all YAML file loaders (fancyweb)
* bug #36683 [Yaml] fix parse error when unindented collections contain a comment (wdiesveld)
* bug #36672 [Validator] Skip validation when email is an empty object (acrobat)
* bug #36673 [PhpUnitBridge] fix PHP 5.3 compat again (nicolas-grekas)
* bug #36505 [Translation] Fix for translation:update command updating ICU messages (artemoliynyk)
* bug #36627 [Validator] fix lazy property usage. (bendavies)
* bug #36601 [Serializer] do not transform empty \Traversable to Array (soyuka)
* bug #36606 [Cache] Fixed not supported Redis eviction policies (SerheyDolgushev)
* bug #36625 [PhpUnitBridge] fix compat with PHP 5.3 (nicolas-grekas)
* 4.4.8 (2020-04-28) * 4.4.8 (2020-04-28)
* bug #36536 [Cache] Allow invalidateTags calls to be traced by data collector (l-vo) * bug #36536 [Cache] Allow invalidateTags calls to be traced by data collector (l-vo)

View File

@ -7,6 +7,68 @@ in 5.0 minor versions.
To get the diff for a specific change, go to https://github.com/symfony/symfony/commit/XXX where XXX is the change hash To get the diff for a specific change, go to https://github.com/symfony/symfony/commit/XXX where XXX is the change hash
To get the diff between two versions, go to https://github.com/symfony/symfony/compare/v5.0.0...v5.0.1 To get the diff between two versions, go to https://github.com/symfony/symfony/compare/v5.0.0...v5.0.1
* 5.0.9 (2020-05-31)
* bug #37008 [Security] Fixed AbstractToken::hasUserChanged() (wouterj)
* bug #36894 [Validator] never directly validate Existence (Required/Optional) constraints (xabbuh)
* bug #37007 [Console] Fix QuestionHelper::disableStty() (chalasr)
* bug #36865 [Form] validate subforms in all validation groups (xabbuh)
* bug #36907 Fixes sprintf(): Too few arguments in form transformer (pedrocasado)
* bug #36868 [Validator] Use Mime component to determine mime type for file validator (pierredup)
* bug #37000 Add meaningful message when using ProcessHelper and Process is not installed (l-vo)
* bug #36995 [TwigBridge] fix fallback html-to-txt body converter (nicolas-grekas)
* bug #36993 [ErrorHandler] fix setting $trace to null in FatalError (nicolas-grekas)
* bug #36987 Handle fetch mode deprecation of DBAL 2.11. (derrabus)
* bug #36974 [Security] Fixed handling of CSRF logout error (wouterj)
* bug #36947 [Mime] Allow email message to have "To", "Cc", or "Bcc" header to be valid (Ernest Hymel)
* bug #36914 Parse and render anonymous classes correctly on php 8 (derrabus)
* bug #36921 [OptionsResolver][Serializer] Remove calls to deprecated ReflectionParameter::getClass() (derrabus)
* bug #36920 [VarDumper] fix PHP 8 support (nicolas-grekas)
* bug #36917 [Cache] Accessing undefined constants raises an Error in php8 (derrabus)
* bug #36891 Address deprecation of ReflectionType::getClass() (derrabus)
* bug #36899 [VarDumper] ReflectionFunction::isDisabled() is deprecated (derrabus)
* bug #36905 [Validator] Catch expected ValueError (derrabus)
* bug #36915 [DomCrawler] Catch expected ValueError (derrabus)
* bug #36908 [Cache][HttpClient] Made method signatures compatible with their corresponding traits (derrabus)
* bug #36906 [DomCrawler] Catch expected ValueError (derrabus)
* bug #36904 [PropertyAccess] Parse php 8 TypeErrors correctly (derrabus)
* bug #36839 [BrowserKit] Raw body with custom Content-Type header (azhurb)
* bug #36896 [Config] Removed implicit cast of ReflectionProperty to string (derrabus)
* bug #35944 [Security/Core] Fix wrong roles comparison (thlbaut)
* bug #36882 [PhpUnitBridge] fix installing under PHP >= 8 (nicolas-grekas)
* bug #36833 [HttpKernel] Fix that the `Store` would not save responses with the X-Content-Digest header present (mpdude)
* bug #36867 [PhpUnitBridge] fix bad detection of unsilenced deprecations (nicolas-grekas)
* bug #36862 [Security] Unserialize $parentData, if needed, to avoid errors (rfaivre)
* bug #36855 [HttpKernel] Fix error logger when stderr is redirected to /dev/null (fabpot)
* bug #36838 [HttpKernel] Bring back the debug toolbar (derrabus)
* bug #36592 [BrowserKit] Allow Referer set by history to be overridden (Slamdunk)
* bug #36823 [HttpClient] fix PHP warning + accept status code >= 600 (nicolas-grekas)
* bug #36824 [Security/Core] fix compat of `NativePasswordEncoder` with pre-PHP74 values of `PASSWORD_*` consts (nicolas-grekas)
* bug #36811 [DependencyInjection] Fix register event listeners compiler pass (X-Coder264)
* bug #36789 Change priority of KernelEvents::RESPONSE subscriber (marcw)
* bug #36794 [Serializer] fix issue with PHP 8 (nicolas-grekas)
* bug #36786 [WebProfiler] Remove 'none' when appending CSP tokens (ndench)
* bug #36743 [Yaml] Fix escaped quotes in quoted multi-line string (ossinkine)
* bug #36777 [TwigBundle] FormExtension does not have a constructor anymore since sf 4.0 (Tobion)
* bug #36716 [Mime] handle passing custom mime types as string (mcneely)
* bug #36747 Queue name is a required parameter (theravel)
* bug #36751 [Mime] fix bad method call on `EmailAddressContains` (Kocal)
* bug #36696 [Console] don't check tty on stdin, it breaks with "data lost during stream conversion" (nicolas-grekas)
* bug #36569 [PhpUnitBridge] Mark parent class also covered in CoverageListener (lyrixx)
* bug #36690 [Yaml] prevent notice for invalid octal numbers on PHP 7.4 (xabbuh)
* bug #36590 [Console] Default hidden question to 1 attempt for non-tty session (ostrolucky)
* bug #36497 [Filesystem] Handle paths on different drives (crishoj)
* bug #36678 [WebProfiler] Do not add src-elem CSP directives if they do not exist (ndench)
* bug #36501 [DX] Show the ParseException message in all YAML file loaders (fancyweb)
* bug #36683 [Yaml] fix parse error when unindented collections contain a comment (wdiesveld)
* bug #36672 [Validator] Skip validation when email is an empty object (acrobat)
* bug #36673 [PhpUnitBridge] fix PHP 5.3 compat again (nicolas-grekas)
* bug #36505 [Translation] Fix for translation:update command updating ICU messages (artemoliynyk)
* bug #36627 [Validator] fix lazy property usage. (bendavies)
* bug #36601 [Serializer] do not transform empty \Traversable to Array (soyuka)
* bug #36606 [Cache] Fixed not supported Redis eviction policies (SerheyDolgushev)
* bug #36625 [PhpUnitBridge] fix compat with PHP 5.3 (nicolas-grekas)
* 5.0.8 (2020-04-28) * 5.0.8 (2020-04-28)
* bug #36536 [Cache] Allow invalidateTags calls to be traced by data collector (l-vo) * bug #36536 [Cache] Allow invalidateTags calls to be traced by data collector (l-vo)

View File

@ -23,15 +23,15 @@ Symfony is the result of the work of many people who made the code better
- Johannes S (johannes) - Johannes S (johannes)
- Kris Wallsmith (kriswallsmith) - Kris Wallsmith (kriswallsmith)
- Yonel Ceruto (yonelceruto) - Yonel Ceruto (yonelceruto)
- Hugo Hamon (hhamon)
- Wouter de Jong (wouterj) - Wouter de Jong (wouterj)
- Hugo Hamon (hhamon)
- Thomas Calvet (fancyweb) - Thomas Calvet (fancyweb)
- Alexander M. Turek (derrabus)
- Abdellatif Ait boudad (aitboudad) - Abdellatif Ait boudad (aitboudad)
- Samuel ROZE (sroze) - Samuel ROZE (sroze)
- Romain Neutron (romain) - Romain Neutron (romain)
- Pascal Borreli (pborreli) - Pascal Borreli (pborreli)
- Joseph Bielawski (stloyd) - Joseph Bielawski (stloyd)
- Alexander M. Turek (derrabus)
- Karma Dordrak (drak) - Karma Dordrak (drak)
- Lukas Kahwe Smith (lsmith) - Lukas Kahwe Smith (lsmith)
- Jules Pietri (heah) - Jules Pietri (heah)
@ -60,16 +60,16 @@ Symfony is the result of the work of many people who made the code better
- Alexander Mols (asm89) - Alexander Mols (asm89)
- Konstantin Myakshin (koc) - Konstantin Myakshin (koc)
- Grégoire Paris (greg0ire) - Grégoire Paris (greg0ire)
- Bulat Shakirzyanov (avalanche123)
- Valentin Udaltsov (vudaltsov) - Valentin Udaltsov (vudaltsov)
- Bulat Shakirzyanov (avalanche123)
- Kevin Bond (kbond) - Kevin Bond (kbond)
- Saša Stamenković (umpirsky) - Saša Stamenković (umpirsky)
- Peter Rehm (rpet) - Peter Rehm (rpet)
- Henrik Bjørnskov (henrikbjorn)
- Gabriel Ostrolucký (gadelat) - Gabriel Ostrolucký (gadelat)
- Henrik Bjørnskov (henrikbjorn)
- Gábor Egyed (1ed)
- Miha Vrhovnik - Miha Vrhovnik
- David Maicher (dmaicher) - David Maicher (dmaicher)
- Gábor Egyed (1ed)
- Diego Saint Esteben (dii3g0) - Diego Saint Esteben (dii3g0)
- Jan Schädlich (jschaedl) - Jan Schädlich (jschaedl)
- Titouan Galopin (tgalopin) - Titouan Galopin (tgalopin)
@ -132,6 +132,7 @@ Symfony is the result of the work of many people who made the code better
- Daniel Wehner (dawehner) - Daniel Wehner (dawehner)
- Tugdual Saunier (tucksaun) - Tugdual Saunier (tucksaun)
- excelwebzone - excelwebzone
- Massimiliano Arione (garak)
- Gordon Franke (gimler) - Gordon Franke (gimler)
- Joel Wurtz (brouznouf) - Joel Wurtz (brouznouf)
- Fabien Pennequin (fabienpennequin) - Fabien Pennequin (fabienpennequin)
@ -139,7 +140,6 @@ Symfony is the result of the work of many people who made the code better
- Przemysław Bogusz (przemyslaw-bogusz) - Przemysław Bogusz (przemyslaw-bogusz)
- Eric GELOEN (gelo) - Eric GELOEN (gelo)
- Lars Strojny (lstrojny) - Lars Strojny (lstrojny)
- Massimiliano Arione (garak)
- Jannik Zschiesche (apfelbox) - Jannik Zschiesche (apfelbox)
- Robert Schönthal (digitalkaoz) - Robert Schönthal (digitalkaoz)
- Gregor Harlan (gharlan) - Gregor Harlan (gharlan)
@ -161,6 +161,7 @@ Symfony is the result of the work of many people who made the code better
- Yanick Witschi (toflar) - Yanick Witschi (toflar)
- Arnaud Kleinpeter (nanocom) - Arnaud Kleinpeter (nanocom)
- Guilherme Blanco (guilhermeblanco) - Guilherme Blanco (guilhermeblanco)
- Laurent VOULLEMIER (lvo)
- SpacePossum - SpacePossum
- Pablo Godel (pgodel) - Pablo Godel (pgodel)
- Jérémie Augustin (jaugustin) - Jérémie Augustin (jaugustin)
@ -181,6 +182,7 @@ Symfony is the result of the work of many people who made the code better
- jeremyFreeAgent (jeremyfreeagent) - jeremyFreeAgent (jeremyfreeagent)
- Rouven Weßling (realityking) - Rouven Weßling (realityking)
- Jérôme Parmentier (lctrs) - Jérôme Parmentier (lctrs)
- Ben Davies (bendavies)
- Andreas Schempp (aschempp) - Andreas Schempp (aschempp)
- Clemens Tolboom - Clemens Tolboom
- Helmer Aaviksoo - Helmer Aaviksoo
@ -195,7 +197,7 @@ Symfony is the result of the work of many people who made the code better
- Tyson Andre - Tyson Andre
- GDIBass - GDIBass
- Samuel NELA (snela) - Samuel NELA (snela)
- Ben Davies (bendavies) - Saif (╯°□°)╯ (azjezz)
- James Halsall (jaitsu) - James Halsall (jaitsu)
- Matthieu Napoli (mnapoli) - Matthieu Napoli (mnapoli)
- Florent Mata (fmata) - Florent Mata (fmata)
@ -204,6 +206,7 @@ Symfony is the result of the work of many people who made the code better
- Dmitrii Chekaliuk (lazyhammer) - Dmitrii Chekaliuk (lazyhammer)
- Clément JOBEILI (dator) - Clément JOBEILI (dator)
- Marek Štípek (maryo) - Marek Štípek (maryo)
- Filippo Tessarotto (slamdunk)
- Daniel Espendiller - Daniel Espendiller
- Possum - Possum
- Dorian Villet (gnutix) - Dorian Villet (gnutix)
@ -211,11 +214,11 @@ Symfony is the result of the work of many people who made the code better
- Sergey Linnik (linniksa) - Sergey Linnik (linniksa)
- Richard Miller (mr_r_miller) - Richard Miller (mr_r_miller)
- Albert Casademont (acasademont) - Albert Casademont (acasademont)
- Wouter J
- Mario A. Alvarez Garcia (nomack84) - Mario A. Alvarez Garcia (nomack84)
- Dennis Benkert (denderello) - Dennis Benkert (denderello)
- DQNEO - DQNEO
- Andre Rømcke (andrerom) - Andre Rømcke (andrerom)
- Saif (╯°□°)╯ (azjezz)
- mcfedr (mcfedr) - mcfedr (mcfedr)
- Gary PEGEOT (gary-p) - Gary PEGEOT (gary-p)
- Ruben Gonzalez (rubenrua) - Ruben Gonzalez (rubenrua)
@ -232,7 +235,6 @@ Symfony is the result of the work of many people who made the code better
- Stadly - Stadly
- Stepan Anchugov (kix) - Stepan Anchugov (kix)
- bronze1man - bronze1man
- Filippo Tessarotto (slamdunk)
- sun (sun) - sun (sun)
- Larry Garfield (crell) - Larry Garfield (crell)
- Nikolay Labinskiy (e-moe) - Nikolay Labinskiy (e-moe)
@ -245,7 +247,6 @@ Symfony is the result of the work of many people who made the code better
- fivestar - fivestar
- Dominique Bongiraud - Dominique Bongiraud
- Jeremy Livingston (jeremylivingston) - Jeremy Livingston (jeremylivingston)
- Laurent VOULLEMIER (lvo)
- Michael Lee (zerustech) - Michael Lee (zerustech)
- Matthieu Auger (matthieuauger) - Matthieu Auger (matthieuauger)
- Mathias Arlaud (mtarld) - Mathias Arlaud (mtarld)
@ -255,6 +256,7 @@ Symfony is the result of the work of many people who made the code better
- Dustin Whittle (dustinwhittle) - Dustin Whittle (dustinwhittle)
- jeff - jeff
- John Kary (johnkary) - John Kary (johnkary)
- Tien Vo (tienvx)
- Justin Hileman (bobthecow) - Justin Hileman (bobthecow)
- Blanchon Vincent (blanchonvincent) - Blanchon Vincent (blanchonvincent)
- Michele Orselli (orso) - Michele Orselli (orso)
@ -269,7 +271,6 @@ Symfony is the result of the work of many people who made the code better
- Tristan Darricau (nicofuma) - Tristan Darricau (nicofuma)
- Victor Bocharsky (bocharsky_bw) - Victor Bocharsky (bocharsky_bw)
- Tomas Norkūnas (norkunas) - Tomas Norkūnas (norkunas)
- Wouter J
- Smaine Milianni (ismail1432) - Smaine Milianni (ismail1432)
- Marcel Beerta (mazen) - Marcel Beerta (mazen)
- Christopher Hertel (chertel) - Christopher Hertel (chertel)
@ -295,7 +296,6 @@ Symfony is the result of the work of many people who made the code better
- Marcos Sánchez - Marcos Sánchez
- Elnur Abdurrakhimov (elnur) - Elnur Abdurrakhimov (elnur)
- Manuel Reinhard (sprain) - Manuel Reinhard (sprain)
- Tien Vo (tienvx)
- Danny Berger (dpb587) - Danny Berger (dpb587)
- Antonio J. García Lagar (ajgarlag) - Antonio J. García Lagar (ajgarlag)
- Adam Prager (padam87) - Adam Prager (padam87)
@ -309,6 +309,7 @@ Symfony is the result of the work of many people who made the code better
- Arjen Brouwer (arjenjb) - Arjen Brouwer (arjenjb)
- Katsuhiro OGAWA - Katsuhiro OGAWA
- Patrick McDougle (patrick-mcdougle) - Patrick McDougle (patrick-mcdougle)
- Marc Weistroff (futurecat)
- Alif Rachmawadi - Alif Rachmawadi
- Anton Chernikov (anton_ch1989) - Anton Chernikov (anton_ch1989)
- Kristen Gilden (kgilden) - Kristen Gilden (kgilden)
@ -318,6 +319,7 @@ Symfony is the result of the work of many people who made the code better
- Jakub Kucharovic (jkucharovic) - Jakub Kucharovic (jkucharovic)
- Loick Piera (pyrech) - Loick Piera (pyrech)
- Uwe Jäger (uwej711) - Uwe Jäger (uwej711)
- Martin Hujer (martinhujer)
- Eugene Leonovich (rybakit) - Eugene Leonovich (rybakit)
- Joseph Rouff (rouffj) - Joseph Rouff (rouffj)
- Félix Labrecque (woodspire) - Félix Labrecque (woodspire)
@ -354,9 +356,9 @@ Symfony is the result of the work of many people who made the code better
- Wouter Van Hecke - Wouter Van Hecke
- Peter Kruithof (pkruithof) - Peter Kruithof (pkruithof)
- Michael Holm (hollo) - Michael Holm (hollo)
- Antonio Pauletich (x-coder264)
- Arjen van der Meijden - Arjen van der Meijden
- Mathieu Lechat - Mathieu Lechat
- Marc Weistroff (futurecat)
- Damien Alexandre (damienalexandre) - Damien Alexandre (damienalexandre)
- Simon Mönch (sm) - Simon Mönch (sm)
- Christian Schmidt - Christian Schmidt
@ -388,6 +390,7 @@ Symfony is the result of the work of many people who made the code better
- Aurelijus Valeiša (aurelijus) - Aurelijus Valeiša (aurelijus)
- Jan Decavele (jandc) - Jan Decavele (jandc)
- Gustavo Piltcher - Gustavo Piltcher
- Jesse Rushlow (geeshoe)
- Stepan Tanasiychuk (stfalcon) - Stepan Tanasiychuk (stfalcon)
- Tiago Ribeiro (fixe) - Tiago Ribeiro (fixe)
- Hidde Boomsma (hboomsma) - Hidde Boomsma (hboomsma)
@ -416,7 +419,9 @@ Symfony is the result of the work of many people who made the code better
- Nicolas LEFEVRE (nicoweb) - Nicolas LEFEVRE (nicoweb)
- alquerci - alquerci
- Oleg Andreyev - Oleg Andreyev
- Langlet Vincent (deviling)
- Mateusz Sip (mateusz_sip) - Mateusz Sip (mateusz_sip)
- Alessandro Lai (jean85)
- Francesco Levorato - Francesco Levorato
- Vitaliy Zakharov (zakharovvi) - Vitaliy Zakharov (zakharovvi)
- Tobias Sjösten (tobiassjosten) - Tobias Sjösten (tobiassjosten)
@ -427,14 +432,15 @@ Symfony is the result of the work of many people who made the code better
- Tomasz Kowalczyk (thunderer) - Tomasz Kowalczyk (thunderer)
- Artur Eshenbrener - Artur Eshenbrener
- Timo Bakx (timobakx) - Timo Bakx (timobakx)
- Antonio Pauletich (x-coder264)
- Thomas Perez (scullwm) - Thomas Perez (scullwm)
- Felix Labrecque - Felix Labrecque
- Yaroslav Kiliba - Yaroslav Kiliba
- Terje Bråten - Terje Bråten
- Robbert Klarenbeek (robbertkl) - Robbert Klarenbeek (robbertkl)
- soyuka
- Eric Masoero (eric-masoero) - Eric Masoero (eric-masoero)
- Denis Brumann (dbrumann) - Denis Brumann (dbrumann)
- Gocha Ossinkine (ossinkine)
- JhonnyL - JhonnyL
- Haralan Dobrev (hkdobrev) - Haralan Dobrev (hkdobrev)
- hossein zolfi (ocean) - hossein zolfi (ocean)
@ -449,10 +455,10 @@ Symfony is the result of the work of many people who made the code better
- Philipp Kräutli (pkraeutli) - Philipp Kräutli (pkraeutli)
- Grzegorz (Greg) Zdanowski (kiler129) - Grzegorz (Greg) Zdanowski (kiler129)
- Iker Ibarguren (ikerib) - Iker Ibarguren (ikerib)
- Dimitri Gritsajuk (ottaviano)
- Kirill chEbba Chebunin (chebba) - Kirill chEbba Chebunin (chebba)
- Rokas Mikalkėnas (rokasm) - Rokas Mikalkėnas (rokasm)
- Greg Thornton (xdissent) - Greg Thornton (xdissent)
- Martin Hujer (martinhujer)
- Alex Bowers - Alex Bowers
- Philipp Cordes - Philipp Cordes
- Costin Bereveanu (schniper) - Costin Bereveanu (schniper)
@ -473,6 +479,7 @@ Symfony is the result of the work of many people who made the code better
- Endre Fejes - Endre Fejes
- Tobias Naumann (tna) - Tobias Naumann (tna)
- Daniel Beyer - Daniel Beyer
- Timothée Barray (tyx)
- Shein Alexey - Shein Alexey
- Romain Gautier (mykiwi) - Romain Gautier (mykiwi)
- Joe Lencioni - Joe Lencioni
@ -489,7 +496,6 @@ Symfony is the result of the work of many people who made the code better
- Xavier HAUSHERR - Xavier HAUSHERR
- Albert Jessurum (ajessu) - Albert Jessurum (ajessu)
- Laszlo Korte - Laszlo Korte
- Jesse Rushlow (geeshoe)
- Miha Vrhovnik - Miha Vrhovnik
- Alessandro Desantis - Alessandro Desantis
- hubert lecorche (hlecorche) - hubert lecorche (hlecorche)
@ -501,6 +507,7 @@ Symfony is the result of the work of many people who made the code better
- Christophe L. (christophelau) - Christophe L. (christophelau)
- Sander Toonen (xatoo) - Sander Toonen (xatoo)
- Anthon Pang (robocoder) - Anthon Pang (robocoder)
- Marko Kaznovac (kaznovac)
- Sébastien Santoro (dereckson) - Sébastien Santoro (dereckson)
- Brian King - Brian King
- Michel Salib (michelsalib) - Michel Salib (michelsalib)
@ -524,7 +531,6 @@ Symfony is the result of the work of many people who made the code better
- Mihai Stancu - Mihai Stancu
- Ivan Nikolaev (destillat) - Ivan Nikolaev (destillat)
- Gildas Quéméner (gquemener) - Gildas Quéméner (gquemener)
- Alessandro Lai (jean85)
- Desjardins Jérôme (jewome62) - Desjardins Jérôme (jewome62)
- Arturs Vonda - Arturs Vonda
- Josip Kruslin - Josip Kruslin
@ -561,7 +567,6 @@ Symfony is the result of the work of many people who made the code better
- Marek Pietrzak - Marek Pietrzak
- Luc Vieillescazes (iamluc) - Luc Vieillescazes (iamluc)
- franek (franek) - franek (franek)
- soyuka
- Raulnet - Raulnet
- Christian Wahler - Christian Wahler
- Giso Stallenberg (gisostallenberg) - Giso Stallenberg (gisostallenberg)
@ -571,7 +576,6 @@ Symfony is the result of the work of many people who made the code better
- HypeMC - HypeMC
- Soufian EZ-ZANTAR (soezz) - Soufian EZ-ZANTAR (soezz)
- Zander Baldwin - Zander Baldwin
- Gocha Ossinkine (ossinkine)
- Adam Harvey - Adam Harvey
- Anton Bakai - Anton Bakai
- Martin Auswöger - Martin Auswöger
@ -603,9 +607,9 @@ Symfony is the result of the work of many people who made the code better
- Philipp Rieber (bicpi) - Philipp Rieber (bicpi)
- Manuel de Ruiter (manuel) - Manuel de Ruiter (manuel)
- Nathanael Noblet (gnat) - Nathanael Noblet (gnat)
- Dimitri Gritsajuk (ottaviano)
- nikos.sotiropoulos - nikos.sotiropoulos
- Eduardo Oliveira (entering) - Eduardo Oliveira (entering)
- Oleksii Zhurbytskyi
- Ilya Antipenko (aivus) - Ilya Antipenko (aivus)
- Ricardo Oliveira (ricardolotr) - Ricardo Oliveira (ricardolotr)
- Roy Van Ginneken (rvanginneken) - Roy Van Ginneken (rvanginneken)
@ -645,9 +649,9 @@ Symfony is the result of the work of many people who made the code better
- Gábor Fási - Gábor Fási
- DUPUCH (bdupuch) - DUPUCH (bdupuch)
- Nate (frickenate) - Nate (frickenate)
- Timothée Barray (tyx)
- jhonnyL - jhonnyL
- Jacek Jędrzejewski (jacek.jedrzejewski) - Jacek Jędrzejewski (jacek.jedrzejewski)
- Stefan Kruppa
- sasezaki - sasezaki
- Bozhidar Hristov (warxcell) - Bozhidar Hristov (warxcell)
- Dawid Pakuła (zulusx) - Dawid Pakuła (zulusx)
@ -684,7 +688,6 @@ Symfony is the result of the work of many people who made the code better
- Pavel Campr (pcampr) - Pavel Campr (pcampr)
- Andrii Dembitskyi - Andrii Dembitskyi
- Johnny Robeson (johnny) - Johnny Robeson (johnny)
- Marko Kaznovac (kaznovac)
- Guilliam Xavier - Guilliam Xavier
- Disquedur - Disquedur
- Michiel Boeckaert (milio) - Michiel Boeckaert (milio)
@ -711,6 +714,7 @@ Symfony is the result of the work of many people who made the code better
- vitaliytv - vitaliytv
- Philippe Segatori - Philippe Segatori
- Dalibor Karlović (dkarlovi) - Dalibor Karlović (dkarlovi)
- Andrey Sevastianov
- Sebastian Blum - Sebastian Blum
- Alexis Lefebvre - Alexis Lefebvre
- aubx - aubx
@ -728,6 +732,7 @@ Symfony is the result of the work of many people who made the code better
- Sinan Eldem - Sinan Eldem
- BoShurik - BoShurik
- Alexandre Dupuy (satchette) - Alexandre Dupuy (satchette)
- Michel Hunziker
- Malte Blättermann - Malte Blättermann
- Simeon Kolev (simeon_kolev9) - Simeon Kolev (simeon_kolev9)
- Joost van Driel (j92) - Joost van Driel (j92)
@ -741,7 +746,6 @@ Symfony is the result of the work of many people who made the code better
- Stefan Gehrig (sgehrig) - Stefan Gehrig (sgehrig)
- Hany el-Kerdany - Hany el-Kerdany
- Wang Jingyu - Wang Jingyu
- Langlet Vincent (deviling)
- Åsmund Garfors - Åsmund Garfors
- Gunnstein Lye (glye) - Gunnstein Lye (glye)
- Maxime Douailin - Maxime Douailin
@ -847,8 +851,10 @@ Symfony is the result of the work of many people who made the code better
- Michael Lutz - Michael Lutz
- Koen Reiniers (koenre) - Koen Reiniers (koenre)
- jochenvdv - jochenvdv
- Michel Roca (mroca)
- Reedy - Reedy
- Arturas Smorgun (asarturas) - Arturas Smorgun (asarturas)
- Michał (bambucha15)
- Alexander Volochnev (exelenz) - Alexander Volochnev (exelenz)
- Michael Piecko - Michael Piecko
- Toni Peric (tperic) - Toni Peric (tperic)
@ -879,12 +885,12 @@ Symfony is the result of the work of many people who made the code better
- Axel Guckelsberger (guite) - Axel Guckelsberger (guite)
- Jose Gonzalez - Jose Gonzalez
- Jonathan (jls-esokia) - Jonathan (jls-esokia)
- Oleksii Zhurbytskyi
- Dariusz Ruminski - Dariusz Ruminski
- Joshua Nye - Joshua Nye
- Claudio Zizza - Claudio Zizza
- Dave Marshall (davedevelopment) - Dave Marshall (davedevelopment)
- Jakub Kulhan (jakubkulhan) - Jakub Kulhan (jakubkulhan)
- Nathan Dench (ndenc2)
- Shaharia Azam - Shaharia Azam
- avorobiev - avorobiev
- stoccc - stoccc
@ -948,9 +954,11 @@ Symfony is the result of the work of many people who made the code better
- GDIBass - GDIBass
- Antoine Lamirault - Antoine Lamirault
- Adrien Lucas (adrienlucas) - Adrien Lucas (adrienlucas)
- Jeroen Thora (bolle)
- Zhuravlev Alexander (scif) - Zhuravlev Alexander (scif)
- Stefano Degenkamp (steef) - Stefano Degenkamp (steef)
- James Michael DuPont - James Michael DuPont
- Carlos Buenosvinos (carlosbuenosvinos)
- Tom Klingenberg - Tom Klingenberg
- Christopher Hall (mythmakr) - Christopher Hall (mythmakr)
- Patrick Dawkins (pjcdawkins) - Patrick Dawkins (pjcdawkins)
@ -982,6 +990,7 @@ Symfony is the result of the work of many people who made the code better
- Julie Hourcade (juliehde) - Julie Hourcade (juliehde)
- Dmitry Parnas (parnas) - Dmitry Parnas (parnas)
- Paul LE CORRE - Paul LE CORRE
- Loïc Beurlet
- Daniel Gorgan - Daniel Gorgan
- Tony Malzhacker - Tony Malzhacker
- Mathieu MARCHOIS - Mathieu MARCHOIS
@ -1006,7 +1015,6 @@ Symfony is the result of the work of many people who made the code better
- Jelle Kapitein - Jelle Kapitein
- Benoît Bourgeois - Benoît Bourgeois
- mantulo - mantulo
- Stefan Kruppa
- corphi - corphi
- JoppeDC - JoppeDC
- grizlik - grizlik
@ -1049,6 +1057,7 @@ Symfony is the result of the work of many people who made the code better
- Arno Geurts - Arno Geurts
- Adán Lobato (adanlobato) - Adán Lobato (adanlobato)
- Ian Jenkins (jenkoian) - Ian Jenkins (jenkoian)
- Hugo Alliaume (kocal)
- Marcos Gómez Vilches (markitosgv) - Marcos Gómez Vilches (markitosgv)
- Matthew Davis (mdavis1982) - Matthew Davis (mdavis1982)
- Markus S. (staabm) - Markus S. (staabm)
@ -1062,6 +1071,7 @@ Symfony is the result of the work of many people who made the code better
- Daniel Cestari - Daniel Cestari
- Matt Janssen - Matt Janssen
- David Lima - David Lima
- Dmitriy Derepko
- Stéphane Delprat - Stéphane Delprat
- Brian Freytag (brianfreytag) - Brian Freytag (brianfreytag)
- Samuele Lilli (doncallisto) - Samuele Lilli (doncallisto)
@ -1148,6 +1158,7 @@ Symfony is the result of the work of many people who made the code better
- Anton Babenko (antonbabenko) - Anton Babenko (antonbabenko)
- Irmantas Šiupšinskas (irmantas) - Irmantas Šiupšinskas (irmantas)
- Danilo Silva - Danilo Silva
- Giuseppe Campanelli
- Arnaud PETITPAS (apetitpa) - Arnaud PETITPAS (apetitpa)
- Ken Stanley - Ken Stanley
- Zachary Tong (polyfractal) - Zachary Tong (polyfractal)
@ -1164,6 +1175,7 @@ Symfony is the result of the work of many people who made the code better
- Tero Alén (tero) - Tero Alén (tero)
- Stanislav Kocanda - Stanislav Kocanda
- DerManoMann - DerManoMann
- MatTheCat
- Guillaume Royer - Guillaume Royer
- Artem (digi) - Artem (digi)
- boite - boite
@ -1184,7 +1196,6 @@ Symfony is the result of the work of many people who made the code better
- Danijel Obradović - Danijel Obradović
- Pablo Borowicz - Pablo Borowicz
- Mathieu Santostefano - Mathieu Santostefano
- Michel Hunziker
- Arjan Keeman - Arjan Keeman
- Máximo Cuadros (mcuadros) - Máximo Cuadros (mcuadros)
- Lukas Mencl - Lukas Mencl
@ -1277,7 +1288,6 @@ Symfony is the result of the work of many people who made the code better
- Jakub Sacha - Jakub Sacha
- Olaf Klischat - Olaf Klischat
- orlovv - orlovv
- Andrey Sevastianov
- Claude Dioudonnat - Claude Dioudonnat
- Jonathan Hedstrom - Jonathan Hedstrom
- Peter Smeets (darkspartan) - Peter Smeets (darkspartan)
@ -1297,12 +1307,10 @@ Symfony is the result of the work of many people who made the code better
- James Hudson - James Hudson
- Stephen Clouse - Stephen Clouse
- e-ivanov - e-ivanov
- Michał (bambucha15)
- Benjamin Dos Santos - Benjamin Dos Santos
- Einenlum - Einenlum
- Jérémy Jarrié (gagnar) - Jérémy Jarrié (gagnar)
- Jochen Bayer (jocl) - Jochen Bayer (jocl)
- Michel Roca (mroca)
- Patrick Carlo-Hickman - Patrick Carlo-Hickman
- Bruno MATEU - Bruno MATEU
- Jeremy Bush - Jeremy Bush
@ -1416,6 +1424,7 @@ Symfony is the result of the work of many people who made the code better
- Florian Hermann (fhermann) - Florian Hermann (fhermann)
- Mo Di (modi) - Mo Di (modi)
- Pablo Schläpfer - Pablo Schläpfer
- Christian Rishøj
- Patrick Berenschot - Patrick Berenschot
- SuRiKmAn - SuRiKmAn
- Gert de Pagter - Gert de Pagter
@ -1423,6 +1432,7 @@ Symfony is the result of the work of many people who made the code better
- David Négrier (moufmouf) - David Négrier (moufmouf)
- Quique Porta (quiqueporta) - Quique Porta (quiqueporta)
- mohammadreza honarkhah - mohammadreza honarkhah
- Artem Oliynyk (artemoliynyk)
- Andrea Quintino (dirk39) - Andrea Quintino (dirk39)
- Tomasz Szymczyk (karion) - Tomasz Szymczyk (karion)
- Alex Vasilchenko - Alex Vasilchenko
@ -1453,6 +1463,7 @@ Symfony is the result of the work of many people who made the code better
- Andrei Igna - Andrei Igna
- Adam Prickett - Adam Prickett
- azine - azine
- Anton Kroshilin
- Dawid Sajdak - Dawid Sajdak
- Ludek Stepan - Ludek Stepan
- Aaron Stephens (astephens) - Aaron Stephens (astephens)
@ -1605,6 +1616,7 @@ Symfony is the result of the work of many people who made the code better
- Robert Queck - Robert Queck
- Peter Bouwdewijn - Peter Bouwdewijn
- mlively - mlively
- Wouter Diesveld
- Amine Matmati - Amine Matmati
- caalholm - caalholm
- Nouhail AL FIDI (alfidi) - Nouhail AL FIDI (alfidi)
@ -1612,6 +1624,7 @@ Symfony is the result of the work of many people who made the code better
- Felipy Tavares Amorim (felipyamorim) - Felipy Tavares Amorim (felipyamorim)
- Guillaume Loulier (guikingone) - Guillaume Loulier (guikingone)
- Klaus Silveira (klaussilveira) - Klaus Silveira (klaussilveira)
- Pedro Casado (pdr33n)
- Pierre Grimaud (pgrimaud) - Pierre Grimaud (pgrimaud)
- Thomas Chmielowiec (chmielot) - Thomas Chmielowiec (chmielot)
- Jānis Lukss - Jānis Lukss
@ -1724,6 +1737,7 @@ Symfony is the result of the work of many people who made the code better
- Stanislav Gamayunov (happyproff) - Stanislav Gamayunov (happyproff)
- Iwan van Staveren (istaveren) - Iwan van Staveren (istaveren)
- Alexander McCullagh (mccullagh) - Alexander McCullagh (mccullagh)
- Paul L McNeely (mcneely)
- Povilas S. (povilas) - Povilas S. (povilas)
- Laurent Negre (raulnet) - Laurent Negre (raulnet)
- Evrard Boulou - Evrard Boulou
@ -1809,6 +1823,7 @@ Symfony is the result of the work of many people who made the code better
- Mathieu Dewet (mdewet) - Mathieu Dewet (mdewet)
- Nicolas Tallefourtané (nicolab) - Nicolas Tallefourtané (nicolab)
- Botond Dani (picur) - Botond Dani (picur)
- Rémi Faivre (rfv)
- Romaric Drigon (romaricdrigon) - Romaric Drigon (romaricdrigon)
- Thierry Marianne (thierrymarianne) - Thierry Marianne (thierrymarianne)
- Nick Stemerdink - Nick Stemerdink
@ -1816,6 +1831,7 @@ Symfony is the result of the work of many people who made the code better
- jjanvier - jjanvier
- Julius Beckmann - Julius Beckmann
- loru88 - loru88
- Thibaut Salanon
- Romain Dorgueil - Romain Dorgueil
- Christopher Parotat - Christopher Parotat
- Dennis Haarbrink - Dennis Haarbrink
@ -1860,6 +1876,7 @@ Symfony is the result of the work of many people who made the code better
- Chris - Chris
- Farid Jalilov - Farid Jalilov
- Florent Olivaud - Florent Olivaud
- Eric Hertwig
- JakeFr - JakeFr
- Simon Sargeant - Simon Sargeant
- efeen - efeen
@ -1920,6 +1937,7 @@ Symfony is the result of the work of many people who made the code better
- Michael van Tricht - Michael van Tricht
- ReScO - ReScO
- Tim Strehle - Tim Strehle
- Sébastien COURJEAN
- Sam Ward - Sam Ward
- Michael Voříšek - Michael Voříšek
- Walther Lalk - Walther Lalk
@ -1972,6 +1990,7 @@ Symfony is the result of the work of many people who made the code better
- Martijn Boers (plebian) - Martijn Boers (plebian)
- Pedro Magalhães (pmmaga) - Pedro Magalhães (pmmaga)
- Rares Vlaseanu (raresvla) - Rares Vlaseanu (raresvla)
- Sergii Dolgushev (serhey)
- tante kinast (tante) - tante kinast (tante)
- Stephen Lewis (tehanomalousone) - Stephen Lewis (tehanomalousone)
- Ahmed Hannachi (tiecoders) - Ahmed Hannachi (tiecoders)
@ -1981,6 +2000,7 @@ Symfony is the result of the work of many people who made the code better
- Darryl Hein (xmmedia) - Darryl Hein (xmmedia)
- Sadicov Vladimir (xtech) - Sadicov Vladimir (xtech)
- Kevin EMO (zarcox) - Kevin EMO (zarcox)
- sdkawata
- Andrzej - Andrzej
- Alexander Zogheb - Alexander Zogheb
- Rémi Blaise - Rémi Blaise
@ -2016,6 +2036,7 @@ Symfony is the result of the work of many people who made the code better
- Ashura - Ashura
- Götz Gottwald - Götz Gottwald
- Veres Lajos - Veres Lajos
- Ernest Hymel
- Nick Chiu - Nick Chiu
- grifx - grifx
- Robert Campbell - Robert Campbell
@ -2045,6 +2066,7 @@ Symfony is the result of the work of many people who made the code better
- Rowan Manning - Rowan Manning
- Per Modin - Per Modin
- David Windell - David Windell
- Christian Scheb
- Gabriel Birke - Gabriel Birke
- skafandri - skafandri
- Derek Bonner - Derek Bonner
@ -2088,7 +2110,6 @@ Symfony is the result of the work of many people who made the code better
- baron (bastien) - baron (bastien)
- Rosio (ben-rosio) - Rosio (ben-rosio)
- Simon Paarlberg (blamh) - Simon Paarlberg (blamh)
- Jeroen Thora (bolle)
- Brieuc THOMAS (brieucthomas) - Brieuc THOMAS (brieucthomas)
- Masao Maeda (brtriver) - Masao Maeda (brtriver)
- Damien Harper (damien.harper) - Damien Harper (damien.harper)
@ -2148,6 +2169,7 @@ Symfony is the result of the work of many people who made the code better
- Michael Orlitzky - Michael Orlitzky
- Nicolas A. Bérard-Nault - Nicolas A. Bérard-Nault
- Quentin Favrie - Quentin Favrie
- Matthias Derer
- Saem Ghani - Saem Ghani
- Stefan Oderbolz - Stefan Oderbolz
- Curtis - Curtis
@ -2173,7 +2195,6 @@ Symfony is the result of the work of many people who made the code better
- Daniele Cesarini (ijanki) - Daniele Cesarini (ijanki)
- Ismail Asci (ismailasci) - Ismail Asci (ismailasci)
- Jeffrey Moelands (jeffreymoelands) - Jeffrey Moelands (jeffreymoelands)
- Hugo Alliaume (kocal)
- Simon CONSTANS (kosssi) - Simon CONSTANS (kosssi)
- Dennis Langen (nijusan) - Dennis Langen (nijusan)
- Paulius Jarmalavičius (pjarmalavicius) - Paulius Jarmalavičius (pjarmalavicius)
@ -2218,6 +2239,7 @@ Symfony is the result of the work of many people who made the code better
- Antonio Angelino - Antonio Angelino
- Jens Schulze - Jens Schulze
- Matt Fields - Matt Fields
- Olatunbosun Egberinde
- Niklas Keller - Niklas Keller
- Andras Debreczeni - Andras Debreczeni
- Vladimir Sazhin - Vladimir Sazhin
@ -2352,11 +2374,11 @@ Symfony is the result of the work of many people who made the code better
- Karolis Daužickas - Karolis Daužickas
- Nicolas - Nicolas
- Sergio Santoro - Sergio Santoro
- Dmitriy Derepko
- tirnanog06 - tirnanog06
- phc - phc
- Дмитрий Пацура - Дмитрий Пацура
- Signor Pedro - Signor Pedro
- Matthias Larisch
- ilyes kooli - ilyes kooli
- Ilia Lazarev - Ilia Lazarev
- Michaël VEROUX - Michaël VEROUX
@ -2388,8 +2410,10 @@ Symfony is the result of the work of many people who made the code better
- Christian Gripp (core23) - Christian Gripp (core23)
- Christoph Schaefer (cvschaefer) - Christoph Schaefer (cvschaefer)
- Damon Jones (damon__jones) - Damon Jones (damon__jones)
- Cătălin Dan (dancatalin)
- Łukasz Giza (destroyer) - Łukasz Giza (destroyer)
- Daniel Londero (dlondero) - Daniel Londero (dlondero)
- Dmitrii Tarasov (dtarasov)
- Sebastian Landwehr (dword123) - Sebastian Landwehr (dword123)
- Adel ELHAIBA (eadel) - Adel ELHAIBA (eadel)
- Damián Nohales (eagleoneraptor) - Damián Nohales (eagleoneraptor)

View File

@ -182,6 +182,11 @@ if (!file_exists("$PHPUNIT_DIR/$PHPUNIT_VERSION_DIR/phpunit") || $configurationH
} }
} }
$info += [
'versions' => [],
'requires' => ['php' => '*'],
];
if (1 === \count($info['versions'])) { if (1 === \count($info['versions'])) {
$passthruOrFail("$COMPOSER create-project --ignore-platform-reqs --no-install --prefer-dist --no-scripts --no-plugins --no-progress --ansi -s dev phpunit/phpunit $PHPUNIT_VERSION_DIR \"$PHPUNIT_VERSION.*\""); $passthruOrFail("$COMPOSER create-project --ignore-platform-reqs --no-install --prefer-dist --no-scripts --no-plugins --no-progress --ansi -s dev phpunit/phpunit $PHPUNIT_VERSION_DIR \"$PHPUNIT_VERSION.*\"");
} else { } else {

View File

@ -131,13 +131,6 @@
removeClass(ajaxToolbarPanel, 'sf-ajax-request-loading'); removeClass(ajaxToolbarPanel, 'sf-ajax-request-loading');
removeClass(ajaxToolbarPanel, 'sf-toolbar-status-red'); removeClass(ajaxToolbarPanel, 'sf-toolbar-status-red');
} }
addEventListener(document.querySelector('.sf-toolbar-ajax-clear'), 'click', function() {
requestStack = [];
renderAjaxRequests();
successStreak = 4;
document.querySelector('.sf-toolbar-ajax-request-list').innerHTML = '';
});
}; };
var startAjaxRequest = function(index) { var startAjaxRequest = function(index) {
@ -506,6 +499,12 @@
setPreference('toolbar/displayState', 'block'); setPreference('toolbar/displayState', 'block');
}); });
renderAjaxRequests(); renderAjaxRequests();
addEventListener(document.querySelector('.sf-toolbar-ajax-clear'), 'click', function() {
requestStack = [];
renderAjaxRequests();
successStreak = 4;
document.querySelector('.sf-toolbar-ajax-request-list').innerHTML = '';
});
addEventListener(document.querySelector('.sf-toolbar-block-ajax'), 'mouseenter', function (event) { addEventListener(document.querySelector('.sf-toolbar-block-ajax'), 'mouseenter', function (event) {
var elem = document.querySelector('.sf-toolbar-block-ajax .sf-toolbar-info'); var elem = document.querySelector('.sf-toolbar-block-ajax .sf-toolbar-info');
elem.scrollTop = elem.scrollHeight; elem.scrollTop = elem.scrollHeight;

View File

@ -72,7 +72,6 @@ class FormValidator extends ConstraintValidator
if ($groups instanceof GroupSequence) { if ($groups instanceof GroupSequence) {
// Validate the data, the form AND nested fields in sequence // Validate the data, the form AND nested fields in sequence
$violationsCount = $this->context->getViolations()->count(); $violationsCount = $this->context->getViolations()->count();
$fieldPropertyPath = \is_object($data) ? 'children[%s]' : 'children%s';
foreach ($groups->groups as $group) { foreach ($groups->groups as $group) {
if ($validateDataGraph) { if ($validateDataGraph) {
@ -91,7 +90,7 @@ class FormValidator extends ConstraintValidator
// in different steps without breaking early enough // in different steps without breaking early enough
$this->resolvedGroups[$field] = (array) $group; $this->resolvedGroups[$field] = (array) $group;
$fieldFormConstraint = new Form(); $fieldFormConstraint = new Form();
$validator->atPath(sprintf($fieldPropertyPath, $field->getPropertyPath()))->validate($field, $fieldFormConstraint); $validator->atPath(sprintf('children[%s]', $field->getName()))->validate($field, $fieldFormConstraint);
} }
} }
@ -100,8 +99,6 @@ class FormValidator extends ConstraintValidator
} }
} }
} else { } else {
$fieldPropertyPath = \is_object($data) ? 'children[%s]' : 'children%s';
if ($validateDataGraph) { if ($validateDataGraph) {
$validator->atPath('data')->validate($data, null, $groups); $validator->atPath('data')->validate($data, null, $groups);
} }
@ -138,7 +135,7 @@ class FormValidator extends ConstraintValidator
if ($field->isSubmitted()) { if ($field->isSubmitted()) {
$this->resolvedGroups[$field] = $groups; $this->resolvedGroups[$field] = $groups;
$fieldFormConstraint = new Form(); $fieldFormConstraint = new Form();
$validator->atPath(sprintf($fieldPropertyPath, $field->getPropertyPath()))->validate($field, $fieldFormConstraint); $validator->atPath(sprintf('children[%s]', $field->getName()))->validate($field, $fieldFormConstraint);
} }
} }
} }

View File

@ -18,6 +18,7 @@ use Symfony\Component\Form\Exception\TransformationFailedException;
use Symfony\Component\Form\Extension\Core\DataMapper\PropertyPathMapper; use Symfony\Component\Form\Extension\Core\DataMapper\PropertyPathMapper;
use Symfony\Component\Form\Extension\Validator\Constraints\Form; use Symfony\Component\Form\Extension\Validator\Constraints\Form;
use Symfony\Component\Form\Extension\Validator\Constraints\FormValidator; use Symfony\Component\Form\Extension\Validator\Constraints\FormValidator;
use Symfony\Component\Form\Extension\Validator\ValidatorExtension;
use Symfony\Component\Form\FormBuilder; use Symfony\Component\Form\FormBuilder;
use Symfony\Component\Form\FormFactoryBuilder; use Symfony\Component\Form\FormFactoryBuilder;
use Symfony\Component\Form\FormFactoryInterface; use Symfony\Component\Form\FormFactoryInterface;
@ -52,7 +53,9 @@ class FormValidatorTest extends ConstraintValidatorTestCase
protected function setUp(): void protected function setUp(): void
{ {
$this->dispatcher = new EventDispatcher(); $this->dispatcher = new EventDispatcher();
$this->factory = (new FormFactoryBuilder())->getFormFactory(); $this->factory = (new FormFactoryBuilder())
->addExtension(new ValidatorExtension(Validation::createValidator()))
->getFormFactory();
parent::setUp(); parent::setUp();
@ -836,6 +839,61 @@ class FormValidatorTest extends ConstraintValidatorTestCase
$this->assertSame('data[field1]', $context->getViolations()[0]->getPropertyPath()); $this->assertSame('data[field1]', $context->getViolations()[0]->getPropertyPath());
} }
public function testCascadeValidationToChildFormsUsingPropertyPaths()
{
$form = $this->getCompoundForm([], [
'validation_groups' => ['group1', 'group2'],
])
->add('field1', null, [
'constraints' => [new NotBlank(['groups' => 'group1'])],
'property_path' => '[foo]',
])
->add('field2', null, [
'constraints' => [new NotBlank(['groups' => 'group2'])],
'property_path' => '[bar]',
])
;
$form->submit([
'field1' => '',
'field2' => '',
]);
$context = new ExecutionContext(Validation::createValidator(), $form, new IdentityTranslator());
$this->validator->initialize($context);
$this->validator->validate($form, new Form());
$this->assertCount(2, $context->getViolations());
$this->assertSame('This value should not be blank.', $context->getViolations()[0]->getMessage());
$this->assertSame('children[field1].data', $context->getViolations()[0]->getPropertyPath());
$this->assertSame('This value should not be blank.', $context->getViolations()[1]->getMessage());
$this->assertSame('children[field2].data', $context->getViolations()[1]->getPropertyPath());
}
public function testCascadeValidationToChildFormsUsingPropertyPathsValidatedInSequence()
{
$form = $this->getCompoundForm([], [
'validation_groups' => new GroupSequence(['group1', 'group2']),
])
->add('field1', null, [
'constraints' => [new NotBlank(['groups' => 'group1'])],
'property_path' => '[foo]',
])
;
$form->submit([
'field1' => '',
]);
$context = new ExecutionContext(Validation::createValidator(), $form, new IdentityTranslator());
$this->validator->initialize($context);
$this->validator->validate($form, new Form());
$this->assertCount(1, $context->getViolations());
$this->assertSame('This value should not be blank.', $context->getViolations()[0]->getMessage());
$this->assertSame('children[field1].data', $context->getViolations()[0]->getPropertyPath());
}
protected function createValidator() protected function createValidator()
{ {
return new FormValidator(); return new FormValidator();

View File

@ -28,8 +28,6 @@ final class NativeClientState extends ClientState
public $responseCount = 0; public $responseCount = 0;
/** @var string[] */ /** @var string[] */
public $dnsCache = []; public $dnsCache = [];
/** @var resource[] */
public $handles = [];
/** @var bool */ /** @var bool */
public $sleep = false; public $sleep = false;

View File

@ -220,11 +220,6 @@ final class NativeResponse implements ResponseInterface
*/ */
private static function perform(ClientState $multi, array &$responses = null): void private static function perform(ClientState $multi, array &$responses = null): void
{ {
// List of native handles for stream_select()
if (null !== $responses) {
$multi->handles = [];
}
foreach ($multi->openHandles as $i => [$h, $buffer, $onProgress]) { foreach ($multi->openHandles as $i => [$h, $buffer, $onProgress]) {
$hasActivity = false; $hasActivity = false;
$remaining = &$multi->openHandles[$i][3]; $remaining = &$multi->openHandles[$i][3];
@ -291,8 +286,6 @@ final class NativeResponse implements ResponseInterface
$multi->handlesActivity[$i][] = $e; $multi->handlesActivity[$i][] = $e;
unset($multi->openHandles[$i]); unset($multi->openHandles[$i]);
$multi->sleep = false; $multi->sleep = false;
} elseif (null !== $responses) {
$multi->handles[] = $h;
} }
} }
@ -307,7 +300,7 @@ final class NativeResponse implements ResponseInterface
} }
} }
if (\count($multi->handles) >= $multi->maxHostConnections) { if (\count($multi->openHandles) >= $multi->maxHostConnections) {
return; return;
} }
@ -318,10 +311,6 @@ final class NativeResponse implements ResponseInterface
$multi->sleep = false; $multi->sleep = false;
self::perform($multi); self::perform($multi);
if (null !== $response->handle) {
$multi->handles[] = $response->handle;
}
break; break;
} }
} }
@ -335,7 +324,8 @@ final class NativeResponse implements ResponseInterface
private static function select(ClientState $multi, float $timeout): int private static function select(ClientState $multi, float $timeout): int
{ {
$_ = []; $_ = [];
$handles = array_column($multi->openHandles, 0);
return (!$multi->sleep = !$multi->sleep) ? -1 : stream_select($multi->handles, $_, $_, (int) $timeout, (int) (1E6 * ($timeout - (int) $timeout))); return (!$multi->sleep = !$multi->sleep) ? -1 : stream_select($handles, $_, $_, (int) $timeout, (int) (1E6 * ($timeout - (int) $timeout)));
} }
} }

View File

@ -137,7 +137,7 @@ trait ResponseTrait
public function toArray(bool $throw = true): array public function toArray(bool $throw = true): array
{ {
if ('' === $content = $this->getContent($throw)) { if ('' === $content = $this->getContent($throw)) {
throw new TransportException('Response body is empty.'); throw new JsonException('Response body is empty.');
} }
if (null !== $this->jsonData) { if (null !== $this->jsonData) {
@ -316,7 +316,7 @@ trait ResponseTrait
} }
$lastActivity = microtime(true); $lastActivity = microtime(true);
$isTimeout = false; $enlapsedTimeout = 0;
while (true) { while (true) {
$hasActivity = false; $hasActivity = false;
@ -338,7 +338,7 @@ trait ResponseTrait
} elseif (!isset($multi->openHandles[$j])) { } elseif (!isset($multi->openHandles[$j])) {
unset($responses[$j]); unset($responses[$j]);
continue; continue;
} elseif ($isTimeout) { } elseif ($enlapsedTimeout >= $timeoutMax) {
$multi->handlesActivity[$j] = [new ErrorChunk($response->offset, sprintf('Idle timeout reached for "%s".', $response->getInfo('url')))]; $multi->handlesActivity[$j] = [new ErrorChunk($response->offset, sprintf('Idle timeout reached for "%s".', $response->getInfo('url')))];
} else { } else {
continue; continue;
@ -346,7 +346,7 @@ trait ResponseTrait
while ($multi->handlesActivity[$j] ?? false) { while ($multi->handlesActivity[$j] ?? false) {
$hasActivity = true; $hasActivity = true;
$isTimeout = false; $enlapsedTimeout = 0;
if (\is_string($chunk = array_shift($multi->handlesActivity[$j]))) { if (\is_string($chunk = array_shift($multi->handlesActivity[$j]))) {
if (null !== $response->inflate && false === $chunk = @inflate_add($response->inflate, $chunk)) { if (null !== $response->inflate && false === $chunk = @inflate_add($response->inflate, $chunk)) {
@ -379,7 +379,7 @@ trait ResponseTrait
} }
} elseif ($chunk instanceof ErrorChunk) { } elseif ($chunk instanceof ErrorChunk) {
unset($responses[$j]); unset($responses[$j]);
$isTimeout = true; $enlapsedTimeout = $timeoutMax;
} elseif ($chunk instanceof FirstChunk) { } elseif ($chunk instanceof FirstChunk) {
if ($response->logger) { if ($response->logger) {
$info = $response->getInfo(); $info = $response->getInfo();
@ -447,10 +447,11 @@ trait ResponseTrait
continue; continue;
} }
switch (self::select($multi, $timeoutMin)) { if (-1 === self::select($multi, min($timeoutMin, $timeoutMax - $enlapsedTimeout))) {
case -1: usleep(min(500, 1E6 * $timeoutMin)); break; usleep(min(500, 1E6 * $timeoutMin));
case 0: $isTimeout = microtime(true) - $lastActivity > $timeoutMax; break;
} }
$enlapsedTimeout = microtime(true) - $lastActivity;
} }
} }
} }

View File

@ -33,4 +33,13 @@ class CurlHttpClientTest extends HttpClientTestCase
return new CurlHttpClient(['verify_peer' => false, 'verify_host' => false]); return new CurlHttpClient(['verify_peer' => false, 'verify_host' => false]);
} }
public function testTimeoutIsNotAFatalError()
{
if ('\\' === \DIRECTORY_SEPARATOR) {
$this->markTestSkipped('Too transient on Windows');
}
parent::testTimeoutIsNotAFatalError();
}
} }

View File

@ -83,9 +83,9 @@ abstract class HttpClientTestCase extends BaseHttpClientTestCase
$this->assertSame($response, stream_get_meta_data($stream)['wrapper_data']->getResponse()); $this->assertSame($response, stream_get_meta_data($stream)['wrapper_data']->getResponse());
$this->assertSame(404, $response->getStatusCode()); $this->assertSame(404, $response->getStatusCode());
$this->expectException(ClientException::class);
$response = $client->request('GET', 'http://localhost:8057/404'); $response = $client->request('GET', 'http://localhost:8057/404');
$stream = $response->toStream(); $this->expectException(ClientException::class);
$response->toStream();
} }
public function testNonBlockingStream() public function testNonBlockingStream()
@ -93,6 +93,7 @@ abstract class HttpClientTestCase extends BaseHttpClientTestCase
$client = $this->getHttpClient(__FUNCTION__); $client = $this->getHttpClient(__FUNCTION__);
$response = $client->request('GET', 'http://localhost:8057/timeout-body'); $response = $client->request('GET', 'http://localhost:8057/timeout-body');
$stream = $response->toStream(); $stream = $response->toStream();
usleep(10000);
$this->assertTrue(stream_set_blocking($stream, false)); $this->assertTrue(stream_set_blocking($stream, false));
$this->assertSame('<1>', fread($stream, 8192)); $this->assertSame('<1>', fread($stream, 8192));

View File

@ -190,6 +190,10 @@ class MockHttpClientTest extends HttpClientTestCase
$this->markTestSkipped("MockHttpClient doesn't unzip"); $this->markTestSkipped("MockHttpClient doesn't unzip");
break; break;
case 'testTimeoutWithActiveConcurrentStream':
$this->markTestSkipped('Real transport required');
break;
case 'testDestruct': case 'testDestruct':
$this->markTestSkipped("MockHttpClient doesn't timeout on destruct"); $this->markTestSkipped("MockHttpClient doesn't timeout on destruct");
break; break;

View File

@ -35,6 +35,12 @@ class MockResponseTest extends TestCase
public function toArrayErrors() public function toArrayErrors()
{ {
yield [
'content' => '',
'responseHeaders' => [],
'message' => 'Response body is empty.',
];
yield [ yield [
'content' => '{}', 'content' => '{}',
'responseHeaders' => ['content-type' => 'plain/text'], 'responseHeaders' => ['content-type' => 'plain/text'],

View File

@ -24,11 +24,6 @@ final class SMimeSigner extends SMime
private $signOptions; private $signOptions;
private $extraCerts; private $extraCerts;
/**
* @var string|null
*/
private $privateKeyPassphrase;
/** /**
* @param string $certificate The path of the file containing the signing certificate (in PEM format) * @param string $certificate The path of the file containing the signing certificate (in PEM format)
* @param string $privateKey The path of the file containing the private key (in PEM format) * @param string $privateKey The path of the file containing the private key (in PEM format)
@ -52,7 +47,6 @@ final class SMimeSigner extends SMime
$this->signOptions = $signOptions ?? PKCS7_DETACHED; $this->signOptions = $signOptions ?? PKCS7_DETACHED;
$this->extraCerts = $extraCerts ? realpath($extraCerts) : null; $this->extraCerts = $extraCerts ? realpath($extraCerts) : null;
$this->privateKeyPassphrase = $privateKeyPassphrase;
} }
public function sign(Message $message): Message public function sign(Message $message): Message

View File

@ -21,6 +21,7 @@ use Symfony\Component\Serializer\Exception\InvalidArgumentException;
use Symfony\Component\Serializer\Exception\LogicException; use Symfony\Component\Serializer\Exception\LogicException;
use Symfony\Component\Serializer\Exception\NotEncodableValueException; use Symfony\Component\Serializer\Exception\NotEncodableValueException;
use Symfony\Component\Serializer\Exception\NotNormalizableValueException; use Symfony\Component\Serializer\Exception\NotNormalizableValueException;
use Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer;
use Symfony\Component\Serializer\Normalizer\CacheableSupportsMethodInterface; use Symfony\Component\Serializer\Normalizer\CacheableSupportsMethodInterface;
use Symfony\Component\Serializer\Normalizer\ContextAwareDenormalizerInterface; use Symfony\Component\Serializer\Normalizer\ContextAwareDenormalizerInterface;
use Symfony\Component\Serializer\Normalizer\ContextAwareNormalizerInterface; use Symfony\Component\Serializer\Normalizer\ContextAwareNormalizerInterface;
@ -158,7 +159,7 @@ class Serializer implements SerializerInterface, ContextAwareNormalizerInterface
} }
if (\is_array($data) || $data instanceof \Traversable) { if (\is_array($data) || $data instanceof \Traversable) {
if ($data instanceof \Countable && 0 === $data->count()) { if (($context[AbstractObjectNormalizer::PRESERVE_EMPTY_OBJECTS] ?? false) === true && $data instanceof \Countable && 0 === $data->count()) {
return $data; return $data;
} }

View File

@ -492,6 +492,27 @@ class SerializerTest extends TestCase
(new Serializer())->normalize(tmpfile()); (new Serializer())->normalize(tmpfile());
} }
public function testNormalizeTransformEmptyArrayObjectToArray()
{
$serializer = new Serializer(
[
new PropertyNormalizer(),
new ObjectNormalizer(),
new ArrayDenormalizer(),
],
[
'json' => new JsonEncoder(),
]
);
$object = [];
$object['foo'] = new \ArrayObject();
$object['bar'] = new \ArrayObject(['notempty']);
$object['baz'] = new \ArrayObject(['nested' => new \ArrayObject()]);
$this->assertSame('{"foo":[],"bar":["notempty"],"baz":{"nested":[]}}', $serializer->serialize($object, 'json'));
}
public function testNormalizePreserveEmptyArrayObject() public function testNormalizePreserveEmptyArrayObject()
{ {
$serializer = new Serializer( $serializer = new Serializer(

View File

@ -92,7 +92,7 @@ class VarExporterTest extends TestCase
} elseif (\PHP_VERSION_ID < 70400) { } elseif (\PHP_VERSION_ID < 70400) {
$fixtureFile = __DIR__.'/Fixtures/'.$testName.'-legacy.php'; $fixtureFile = __DIR__.'/Fixtures/'.$testName.'-legacy.php';
} else { } else {
$this->markAsSkipped('PHP >= 7.4.6 required.'); $this->markTestSkipped('PHP >= 7.4.6 required.');
} }
$this->assertStringEqualsFile($fixtureFile, $dump); $this->assertStringEqualsFile($fixtureFile, $dump);

View File

@ -811,6 +811,30 @@ abstract class HttpClientTestCase extends TestCase
} }
} }
public function testTimeoutWithActiveConcurrentStream()
{
$p1 = TestHttpServer::start(8067);
$p2 = TestHttpServer::start(8077);
$client = $this->getHttpClient(__FUNCTION__);
$streamingResponse = $client->request('GET', 'http://localhost:8067/max-duration');
$blockingResponse = $client->request('GET', 'http://localhost:8077/timeout-body', [
'timeout' => 0.25,
]);
$this->assertSame(200, $streamingResponse->getStatusCode());
$this->assertSame(200, $blockingResponse->getStatusCode());
$this->expectException(TransportExceptionInterface::class);
try {
$blockingResponse->getContent();
} finally {
$p1->stop();
$p2->stop();
}
}
public function testDestruct() public function testDestruct()
{ {
$client = $this->getHttpClient(__FUNCTION__); $client = $this->getHttpClient(__FUNCTION__);

View File

@ -16,23 +16,28 @@ use Symfony\Component\Process\Process;
class TestHttpServer class TestHttpServer
{ {
private static $process; private static $process = [];
public static function start() public static function start(int $port = 8057)
{ {
if (self::$process) { if (isset(self::$process[$port])) {
self::$process->stop(); self::$process[$port]->stop();
} else {
register_shutdown_function(static function () use ($port) {
self::$process[$port]->stop();
});
} }
$finder = new PhpExecutableFinder(); $finder = new PhpExecutableFinder();
$process = new Process(array_merge([$finder->find(false)], $finder->findArguments(), ['-dopcache.enable=0', '-dvariables_order=EGPCS', '-S', '127.0.0.1:8057'])); $process = new Process(array_merge([$finder->find(false)], $finder->findArguments(), ['-dopcache.enable=0', '-dvariables_order=EGPCS', '-S', '127.0.0.1:'.$port]));
$process->setWorkingDirectory(__DIR__.'/Fixtures/web'); $process->setWorkingDirectory(__DIR__.'/Fixtures/web');
$process->start(); $process->start();
self::$process[$port] = $process;
do { do {
usleep(50000); usleep(50000);
} while (!@fopen('http://127.0.0.1:8057/', 'r')); } while (!@fopen('http://127.0.0.1:'.$port, 'r'));
self::$process = $process; return $process;
} }
} }