Merge branch '3.4' into 4.4
* 3.4: [3.4] Fix support for PHP8 union types [PhpUnitBridge] Streamline ansi/no-ansi of composer according to phpunit --colors option [3.4] Small update in our internal terminology [Cache] fix compat with DBAL v3 [VarDumper] Fix CliDumper coloration [DI] tighten detection of local dirs to prevent false positives [FrameworkBundle] preserve dots in query-string when redirecting bumped Symfony version to 3.4.43 updated VERSION for 3.4.42 update CONTRIBUTORS for 3.4.42 updated CHANGELOG for 3.4.42
This commit is contained in:
commit
7eca3a5970
@ -65,18 +65,18 @@ Symfony is the result of the work of many people who made the code better
|
||||
- Kevin Bond (kbond)
|
||||
- Saša Stamenković (umpirsky)
|
||||
- Peter Rehm (rpet)
|
||||
- Gábor Egyed (1ed)
|
||||
- Gabriel Ostrolucký (gadelat)
|
||||
- Henrik Bjørnskov (henrikbjorn)
|
||||
- Gábor Egyed (1ed)
|
||||
- Miha Vrhovnik
|
||||
- David Maicher (dmaicher)
|
||||
- Titouan Galopin (tgalopin)
|
||||
- Diego Saint Esteben (dii3g0)
|
||||
- Jan Schädlich (jschaedl)
|
||||
- Titouan Galopin (tgalopin)
|
||||
- Konstantin Kudryashov (everzet)
|
||||
- Vladimir Reznichenko (kalessil)
|
||||
- Bilal Amarni (bamarni)
|
||||
- Mathieu Piot (mpiot)
|
||||
- Vladimir Reznichenko (kalessil)
|
||||
- Florin Patan (florinpatan)
|
||||
- Jáchym Toušek (enumag)
|
||||
- Andrej Hudec (pulzarraider)
|
||||
@ -91,12 +91,12 @@ Symfony is the result of the work of many people who made the code better
|
||||
- Henrik Westphal (snc)
|
||||
- Dariusz Górecki (canni)
|
||||
- David Buchmann (dbu)
|
||||
- Jérôme Tamarelle (gromnan)
|
||||
- Graham Campbell (graham)
|
||||
- Dariusz Ruminski
|
||||
- Lee McDermott
|
||||
- Brandon Turner
|
||||
- Luis Cordova (cordoval)
|
||||
- Jérôme Tamarelle (gromnan)
|
||||
- Daniel Holmes (dholmes)
|
||||
- Toni Uebernickel (havvg)
|
||||
- Fran Moreno (franmomu)
|
||||
@ -106,11 +106,11 @@ Symfony is the result of the work of many people who made the code better
|
||||
- Antoine Hérault (herzult)
|
||||
- Paráda József (paradajozsef)
|
||||
- Arnaud Le Blanc (arnaud-lb)
|
||||
- Sebastiaan Stok (sstok)
|
||||
- Maxime STEINHAUSSER
|
||||
- Baptiste Clavié (talus)
|
||||
- Michal Piotrowski (eventhorizon)
|
||||
- Tim Nagel (merk)
|
||||
- Sebastiaan Stok (sstok)
|
||||
- Chris Wilkinson (thewilkybarkid)
|
||||
- Brice BERNARD (brikou)
|
||||
- marc.weistroff
|
||||
@ -170,6 +170,7 @@ Symfony is the result of the work of many people who made the code better
|
||||
- Philipp Wahala (hifi)
|
||||
- Rafael Dohms (rdohms)
|
||||
- jwdeitch
|
||||
- Ahmed TAILOULOUTE (ahmedtai)
|
||||
- Mikael Pajunen
|
||||
- Arman Hosseini (arman)
|
||||
- Niels Keurentjes (curry684)
|
||||
@ -177,7 +178,6 @@ Symfony is the result of the work of many people who made the code better
|
||||
- Richard van Laak (rvanlaak)
|
||||
- Richard Shank (iampersistent)
|
||||
- Thomas Rabaix (rande)
|
||||
- Ahmed TAILOULOUTE (ahmedtai)
|
||||
- Vincent Touzet (vincenttouzet)
|
||||
- jeremyFreeAgent (jeremyfreeagent)
|
||||
- Rouven Weßling (realityking)
|
||||
@ -198,6 +198,7 @@ Symfony is the result of the work of many people who made the code better
|
||||
- GDIBass
|
||||
- Samuel NELA (snela)
|
||||
- Saif (╯°□°)╯ (azjezz)
|
||||
- Gary PEGEOT (gary-p)
|
||||
- James Halsall (jaitsu)
|
||||
- Matthieu Napoli (mnapoli)
|
||||
- Florent Mata (fmata)
|
||||
@ -220,7 +221,6 @@ Symfony is the result of the work of many people who made the code better
|
||||
- DQNEO
|
||||
- Andre Rømcke (andrerom)
|
||||
- mcfedr (mcfedr)
|
||||
- Gary PEGEOT (gary-p)
|
||||
- Ruben Gonzalez (rubenrua)
|
||||
- Benjamin Dulau (dbenjamin)
|
||||
- Jan Rosier (rosier)
|
||||
@ -244,6 +244,7 @@ Symfony is the result of the work of many people who made the code better
|
||||
- Matthieu Bontemps (mbontemps)
|
||||
- apetitpa
|
||||
- Pierre Minnieur (pminnieur)
|
||||
- David Prévot
|
||||
- fivestar
|
||||
- Dominique Bongiraud
|
||||
- Jeremy Livingston (jeremylivingston)
|
||||
@ -277,7 +278,6 @@ Symfony is the result of the work of many people who made the code better
|
||||
- Ruud Kamphuis (ruudk)
|
||||
- Pavel Batanov (scaytrase)
|
||||
- Mantis Development
|
||||
- David Prévot
|
||||
- Loïc Faugeron
|
||||
- Hidde Wieringa (hiddewie)
|
||||
- dFayet
|
||||
@ -371,6 +371,7 @@ Symfony is the result of the work of many people who made the code better
|
||||
- Chris Smith (cs278)
|
||||
- Thomas Bisignani (toma)
|
||||
- Florian Klein (docteurklein)
|
||||
- Benjamin Leveque (benji07)
|
||||
- Manuel Kiessling (manuelkiessling)
|
||||
- Atsuhiro KUBO (iteman)
|
||||
- rudy onfroy (ronfroy)
|
||||
@ -407,6 +408,7 @@ Symfony is the result of the work of many people who made the code better
|
||||
- Dariusz Rumiński
|
||||
- Berny Cantos (xphere81)
|
||||
- Thierry Thuon (lepiaf)
|
||||
- Guilhem N (guilhemn)
|
||||
- Ricard Clau (ricardclau)
|
||||
- Mark Challoner (markchalloner)
|
||||
- Philippe Segatori
|
||||
@ -432,6 +434,7 @@ Symfony is the result of the work of many people who made the code better
|
||||
- Tomasz Kowalczyk (thunderer)
|
||||
- Artur Eshenbrener
|
||||
- Timo Bakx (timobakx)
|
||||
- Harm van Tilborg (hvt)
|
||||
- Thomas Perez (scullwm)
|
||||
- Felix Labrecque
|
||||
- Yaroslav Kiliba
|
||||
@ -471,7 +474,6 @@ Symfony is the result of the work of many people who made the code better
|
||||
- Michele Locati
|
||||
- Pavel Volokitin (pvolok)
|
||||
- Valentine Boineau (valentineboineau)
|
||||
- Benjamin Leveque (benji07)
|
||||
- Arthur de Moulins (4rthem)
|
||||
- Matthias Althaus (althaus)
|
||||
- Nicolas Dewez (nicolas_dewez)
|
||||
@ -516,10 +518,11 @@ Symfony is the result of the work of many people who made the code better
|
||||
- Steffen Roßkamp
|
||||
- Alexandru Furculita (afurculita)
|
||||
- Valentin Jonovs (valentins-jonovs)
|
||||
- Guilhem N (guilhemn)
|
||||
- Sebastien Morel (plopix)
|
||||
- Jeanmonod David (jeanmonod)
|
||||
- Christopher Davis (chrisguitarguy)
|
||||
- Webnet team (webnet)
|
||||
- Joe Bennett (kralos)
|
||||
- Farhad Safarov
|
||||
- Jan Schumann
|
||||
- Niklas Fiekas
|
||||
@ -556,6 +559,7 @@ Symfony is the result of the work of many people who made the code better
|
||||
- Ariel Ferrandini (aferrandini)
|
||||
- Dirk Pahl (dirkaholic)
|
||||
- cedric lombardot (cedriclombardot)
|
||||
- Arkadius Stefanski (arkadius)
|
||||
- Tim Goudriaan (codedmonkey)
|
||||
- Jonas Flodén (flojon)
|
||||
- Tobias Weichart
|
||||
@ -621,6 +625,7 @@ Symfony is the result of the work of many people who made the code better
|
||||
- Maks Slesarenko
|
||||
- Filip Procházka (fprochazka)
|
||||
- mmoreram
|
||||
- Jeroen Thora (bolle)
|
||||
- Markus Lanthaler (lanthaler)
|
||||
- Remi Collet
|
||||
- Vicent Soria Durá (vicentgodella)
|
||||
@ -688,6 +693,7 @@ Symfony is the result of the work of many people who made the code better
|
||||
- Pavel Campr (pcampr)
|
||||
- Andrii Dembitskyi
|
||||
- Johnny Robeson (johnny)
|
||||
- Thomas Landauer (thomas-landauer)
|
||||
- Guilliam Xavier
|
||||
- Disquedur
|
||||
- Michiel Boeckaert (milio)
|
||||
@ -701,13 +707,11 @@ Symfony is the result of the work of many people who made the code better
|
||||
- Piotr Stankowski
|
||||
- Baptiste Leduc (bleduc)
|
||||
- Julien Maulny
|
||||
- Sebastien Morel (plopix)
|
||||
- Jean-Christophe Cuvelier [Artack]
|
||||
- Julien Montel (julienmgel)
|
||||
- Simon DELICATA
|
||||
- Artem Henvald (artemgenvald)
|
||||
- Dmitry Simushev
|
||||
- Joe Bennett (kralos)
|
||||
- alcaeus
|
||||
- Thomas Talbot (ioni)
|
||||
- Fred Cox
|
||||
@ -722,10 +726,12 @@ Symfony is the result of the work of many people who made the code better
|
||||
- Marvin Butkereit
|
||||
- Renan
|
||||
- Ricky Su (ricky)
|
||||
- Marcin Szepczynski (czepol)
|
||||
- Kyle Evans (kevans91)
|
||||
- Charles-Henri Bruyand
|
||||
- Max Rath (drak3)
|
||||
- Stéphane Escandell (sescandell)
|
||||
- Baptiste Leduc (korbeil)
|
||||
- Konstantin S. M. Möllers (ksmmoellers)
|
||||
- James Johnston
|
||||
- Noémi Salaün (noemi-salaun)
|
||||
@ -776,7 +782,6 @@ Symfony is the result of the work of many people who made the code better
|
||||
- maxime.steinhausser
|
||||
- adev
|
||||
- Stefan Warman
|
||||
- Arkadius Stefanski (arkadius)
|
||||
- Tristan Maindron (tmaindron)
|
||||
- Behnoush Norouzali (behnoush)
|
||||
- Wesley Lancel
|
||||
@ -949,12 +954,10 @@ Symfony is the result of the work of many people who made the code better
|
||||
- Jayson Xu (superjavason)
|
||||
- Hubert Lenoir (hubert_lenoir)
|
||||
- fago
|
||||
- Harm van Tilborg
|
||||
- Jan Prieser
|
||||
- GDIBass
|
||||
- Antoine Lamirault
|
||||
- Adrien Lucas (adrienlucas)
|
||||
- Jeroen Thora (bolle)
|
||||
- Zhuravlev Alexander (scif)
|
||||
- Stefano Degenkamp (steef)
|
||||
- James Michael DuPont
|
||||
@ -1038,7 +1041,6 @@ Symfony is the result of the work of many people who made the code better
|
||||
- Don Pinkster
|
||||
- Maksim Muruev
|
||||
- Emil Einarsson
|
||||
- Thomas Landauer
|
||||
- 243083df
|
||||
- Thibault Duplessis
|
||||
- Rimas Kudelis
|
||||
@ -1060,6 +1062,7 @@ Symfony is the result of the work of many people who made the code better
|
||||
- Hugo Alliaume (kocal)
|
||||
- Marcos Gómez Vilches (markitosgv)
|
||||
- Matthew Davis (mdavis1982)
|
||||
- Paulo Ribeiro (paulo)
|
||||
- Markus S. (staabm)
|
||||
- Benjamin Morel
|
||||
- Maks
|
||||
@ -1118,7 +1121,6 @@ Symfony is the result of the work of many people who made the code better
|
||||
- xaav
|
||||
- Mahmoud Mostafa (mahmoud)
|
||||
- Antonio Jose Cerezo (ajcerezo)
|
||||
- Baptiste Leduc (korbeil)
|
||||
- Ahmed Abdou
|
||||
- Daniel Iwaniec
|
||||
- Thomas Ferney
|
||||
@ -1157,6 +1159,8 @@ Symfony is the result of the work of many people who made the code better
|
||||
- zairig imad (zairigimad)
|
||||
- Anton Babenko (antonbabenko)
|
||||
- Irmantas Šiupšinskas (irmantas)
|
||||
- Benoit Mallo
|
||||
- Lescot Edouard (idetox)
|
||||
- Danilo Silva
|
||||
- Giuseppe Campanelli
|
||||
- Arnaud PETITPAS (apetitpa)
|
||||
@ -1226,11 +1230,13 @@ Symfony is the result of the work of many people who made the code better
|
||||
- gr1ev0us
|
||||
- mlazovla
|
||||
- Alejandro Diaz Torres
|
||||
- quentin neyrat (qneyrat)
|
||||
- Max Beutel
|
||||
- Jan Vernieuwe (vernija)
|
||||
- Antanas Arvasevicius
|
||||
- Pierre Dudoret
|
||||
- Thomas
|
||||
- j.schmitt
|
||||
- Maximilian Berghoff (electricmaxxx)
|
||||
- nacho
|
||||
- Piotr Antosik (antek88)
|
||||
@ -1326,7 +1332,9 @@ Symfony is the result of the work of many people who made the code better
|
||||
- Carlos Ortega Huetos
|
||||
- rpg600
|
||||
- Péter Buri (burci)
|
||||
- John VanDeWeghe
|
||||
- kaiwa
|
||||
- Claude Khedhiri (ck-developer)
|
||||
- Charles Sanquer (csanquer)
|
||||
- Albert Ganiev (helios-ag)
|
||||
- Neil Katin
|
||||
@ -1363,6 +1371,7 @@ Symfony is the result of the work of many people who made the code better
|
||||
- arnaud (arnooo999)
|
||||
- Gilles Doge (gido)
|
||||
- Oscar Esteve (oesteve)
|
||||
- Sobhan Sharifi (50bhan)
|
||||
- abulford
|
||||
- Philipp Kretzschmar
|
||||
- antograssiot
|
||||
@ -1412,6 +1421,7 @@ Symfony is the result of the work of many people who made the code better
|
||||
- Marc Torres
|
||||
- Mark Spink
|
||||
- Alberto Aldegheri
|
||||
- Sagrario Meneses
|
||||
- Dmitri Petmanson
|
||||
- heccjj
|
||||
- Alexandre Melard
|
||||
@ -1731,7 +1741,9 @@ Symfony is the result of the work of many people who made the code better
|
||||
- Przemysław Piechota (kibao)
|
||||
- Leonid Terentyev (li0n)
|
||||
- Martynas Sudintas (martiis)
|
||||
- Douglas Hammond (wizhippo)
|
||||
- ryunosuke
|
||||
- Bruno BOUTAREL
|
||||
- victoria
|
||||
- Francisco Facioni (fran6co)
|
||||
- Stanislav Gamayunov (happyproff)
|
||||
@ -1864,6 +1876,7 @@ Symfony is the result of the work of many people who made the code better
|
||||
- Pavel.Batanov
|
||||
- avi123
|
||||
- Pavel Prischepa
|
||||
- Sami Mussbach
|
||||
- alsar
|
||||
- downace
|
||||
- Aarón Nieves Fernández
|
||||
@ -1891,6 +1904,7 @@ Symfony is the result of the work of many people who made the code better
|
||||
- Brian Graham (incognito)
|
||||
- Kevin Vergauwen (innocenzo)
|
||||
- Alessio Baglio (ioalessio)
|
||||
- Jeroen Noten (jeroennoten)
|
||||
- Johannes Müller (johmue)
|
||||
- Jordi Llonch (jordillonch)
|
||||
- Nicholas Ruunu (nicholasruunu)
|
||||
@ -1911,6 +1925,7 @@ Symfony is the result of the work of many people who made the code better
|
||||
- Alexey Popkov
|
||||
- Gijs Kunze
|
||||
- Artyom Protaskin
|
||||
- Steven Dubois
|
||||
- Nathanael d. Noblet
|
||||
- helmer
|
||||
- ged15
|
||||
@ -1983,6 +1998,7 @@ Symfony is the result of the work of many people who made the code better
|
||||
- Andrew Marcinkevičius (ifdattic)
|
||||
- Ioana Hazsda (ioana-hazsda)
|
||||
- Jan Marek (janmarek)
|
||||
- Dmitriy Mamontov (mamontovdmitriy)
|
||||
- Mark de Haan (markdehaan)
|
||||
- Dan Patrick (mdpatrick)
|
||||
- naitsirch (naitsirch)
|
||||
@ -2343,6 +2359,7 @@ Symfony is the result of the work of many people who made the code better
|
||||
- Ben Miller
|
||||
- Peter Gribanov
|
||||
- Matteo Galli
|
||||
- Loenix
|
||||
- kwiateusz
|
||||
- jspee
|
||||
- Ilya Bulakh
|
||||
@ -2466,7 +2483,6 @@ Symfony is the result of the work of many people who made the code better
|
||||
- Marco Petersen (ocrampete16)
|
||||
- ollie harridge (ollietb)
|
||||
- Paul Andrieux (paulandrieux)
|
||||
- Paulo Ribeiro (paulo)
|
||||
- Paweł Szczepanek (pauluz)
|
||||
- Philippe Degeeter (pdegeeter)
|
||||
- Christian López Espínola (penyaskito)
|
||||
@ -2521,6 +2537,7 @@ Symfony is the result of the work of many people who made the code better
|
||||
- MaPePeR
|
||||
- Andreas Streichardt
|
||||
- Alexandre Segura
|
||||
- Marco Pfeiffer
|
||||
- Vivien
|
||||
- Pascal Hofmann
|
||||
- david-binda
|
||||
|
@ -23,7 +23,7 @@ use Symfony\Component\HttpKernel\Exception\HttpException;
|
||||
*/
|
||||
class NotFoundActivationStrategy extends ErrorLevelActivationStrategy
|
||||
{
|
||||
private $blacklist;
|
||||
private $exclude;
|
||||
private $requestStack;
|
||||
|
||||
public function __construct(RequestStack $requestStack, array $excludedUrls, $actionLevel)
|
||||
@ -31,7 +31,7 @@ class NotFoundActivationStrategy extends ErrorLevelActivationStrategy
|
||||
parent::__construct($actionLevel);
|
||||
|
||||
$this->requestStack = $requestStack;
|
||||
$this->blacklist = '{('.implode('|', $excludedUrls).')}i';
|
||||
$this->exclude = '{('.implode('|', $excludedUrls).')}i';
|
||||
}
|
||||
|
||||
/**
|
||||
@ -48,7 +48,7 @@ class NotFoundActivationStrategy extends ErrorLevelActivationStrategy
|
||||
&& 404 == $record['context']['exception']->getStatusCode()
|
||||
&& ($request = $this->requestStack->getMasterRequest())
|
||||
) {
|
||||
return !preg_match($this->blacklist, $request->getPathInfo());
|
||||
return !preg_match($this->exclude, $request->getPathInfo());
|
||||
}
|
||||
|
||||
return $isActivated;
|
||||
|
@ -182,15 +182,21 @@ if (!file_exists("$PHPUNIT_DIR/$PHPUNIT_VERSION_DIR/phpunit") || $configurationH
|
||||
}
|
||||
}
|
||||
|
||||
if (in_array('--colors=never', $argv, true) || (isset($argv[$i = array_search('never', $argv, true) - 1]) && '--colors' === $argv[$i])) {
|
||||
$COMPOSER .= ' --no-ansi';
|
||||
} else {
|
||||
$COMPOSER .= ' --ansi';
|
||||
}
|
||||
|
||||
$info += [
|
||||
'versions' => [],
|
||||
'requires' => ['php' => '*'],
|
||||
];
|
||||
|
||||
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 -s dev phpunit/phpunit $PHPUNIT_VERSION_DIR \"$PHPUNIT_VERSION.*\"");
|
||||
} else {
|
||||
$passthruOrFail("$COMPOSER create-project --ignore-platform-reqs --no-install --prefer-dist --no-scripts --no-plugins --no-progress --ansi phpunit/phpunit $PHPUNIT_VERSION_DIR \"$PHPUNIT_VERSION.*\"");
|
||||
$passthruOrFail("$COMPOSER create-project --ignore-platform-reqs --no-install --prefer-dist --no-scripts --no-plugins --no-progress phpunit/phpunit $PHPUNIT_VERSION_DIR \"$PHPUNIT_VERSION.*\"");
|
||||
}
|
||||
|
||||
@copy("$PHPUNIT_VERSION_DIR/phpunit.xsd", 'phpunit.xsd');
|
||||
@ -220,7 +226,7 @@ if (!file_exists("$PHPUNIT_DIR/$PHPUNIT_VERSION_DIR/phpunit") || $configurationH
|
||||
putenv("COMPOSER_ROOT_VERSION=$PHPUNIT_VERSION.99");
|
||||
$q = '\\' === DIRECTORY_SEPARATOR ? '"' : '';
|
||||
// --no-suggest is not in the list to keep compat with composer 1.0, which is shipped with Ubuntu 16.04LTS
|
||||
$exit = proc_close(proc_open("$q$COMPOSER install --no-dev --prefer-dist --no-progress --ansi$q", [], $p, getcwd()));
|
||||
$exit = proc_close(proc_open("$q$COMPOSER install --no-dev --prefer-dist --no-progress $q", [], $p, getcwd()));
|
||||
putenv('COMPOSER_ROOT_VERSION'.(false !== $prevRoot ? '='.$prevRoot : ''));
|
||||
if ($exit) {
|
||||
exit($exit);
|
||||
|
@ -117,8 +117,7 @@ class RedirectController
|
||||
$scheme = $request->getScheme();
|
||||
}
|
||||
|
||||
$qs = $request->getQueryString();
|
||||
if ($qs) {
|
||||
if ($qs = $request->server->get('QUERY_STRING') ?: $request->getQueryString()) {
|
||||
if (false === strpos($path, '?')) {
|
||||
$qs = '?'.$qs;
|
||||
} else {
|
||||
|
@ -267,9 +267,9 @@ class RedirectControllerTest extends TestCase
|
||||
return [
|
||||
['http://www.example.com/base/redirect-path', '/redirect-path', ''],
|
||||
['http://www.example.com/base/redirect-path?foo=bar', '/redirect-path?foo=bar', ''],
|
||||
['http://www.example.com/base/redirect-path?foo=bar', '/redirect-path', 'foo=bar'],
|
||||
['http://www.example.com/base/redirect-path?foo=bar&abc=example', '/redirect-path?foo=bar', 'abc=example'],
|
||||
['http://www.example.com/base/redirect-path?foo=bar&abc=example&baz=def', '/redirect-path?foo=bar', 'abc=example&baz=def'],
|
||||
['http://www.example.com/base/redirect-path?f.o=bar', '/redirect-path', 'f.o=bar'],
|
||||
['http://www.example.com/base/redirect-path?f.o=bar&a.c=example', '/redirect-path?f.o=bar', 'a.c=example'],
|
||||
['http://www.example.com/base/redirect-path?f.o=bar&a.c=example&b.z=def', '/redirect-path?f.o=bar', 'a.c=example&b.z=def'],
|
||||
];
|
||||
}
|
||||
|
||||
@ -353,29 +353,20 @@ class RedirectControllerTest extends TestCase
|
||||
|
||||
private function createRequestObject($scheme, $host, $port, $baseUrl, $queryString = '')
|
||||
{
|
||||
$request = $this->getMockBuilder('Symfony\Component\HttpFoundation\Request')->getMock();
|
||||
$request
|
||||
->expects($this->any())
|
||||
->method('getScheme')
|
||||
->willReturn($scheme);
|
||||
$request
|
||||
->expects($this->any())
|
||||
->method('getHost')
|
||||
->willReturn($host);
|
||||
$request
|
||||
->expects($this->any())
|
||||
->method('getPort')
|
||||
->willReturn($port);
|
||||
$request
|
||||
->expects($this->any())
|
||||
->method('getBaseUrl')
|
||||
->willReturn($baseUrl);
|
||||
$request
|
||||
->expects($this->any())
|
||||
->method('getQueryString')
|
||||
->willReturn($queryString);
|
||||
if ('' !== $queryString) {
|
||||
parse_str($queryString, $query);
|
||||
} else {
|
||||
$query = [];
|
||||
}
|
||||
|
||||
return $request;
|
||||
return new Request($query, [], [], [], [], [
|
||||
'HTTPS' => 'https' === $scheme,
|
||||
'HTTP_HOST' => $host.($port ? ':'.$port : ''),
|
||||
'SERVER_PORT' => $port,
|
||||
'SCRIPT_FILENAME' => $baseUrl,
|
||||
'REQUEST_URI' => $baseUrl,
|
||||
'QUERY_STRING' => $queryString,
|
||||
]);
|
||||
}
|
||||
|
||||
private function createRedirectController($httpPort = null, $httpsPort = null)
|
||||
|
@ -410,26 +410,31 @@ trait PdoTrait
|
||||
if ($this->conn instanceof \PDO) {
|
||||
$this->driver = $this->conn->getAttribute(\PDO::ATTR_DRIVER_NAME);
|
||||
} else {
|
||||
switch ($this->driver = $this->conn->getDriver()->getName()) {
|
||||
case 'mysqli':
|
||||
$driver = $this->conn->getDriver();
|
||||
|
||||
switch (true) {
|
||||
case $driver instanceof \Doctrine\DBAL\Driver\Mysqli\Driver:
|
||||
throw new \LogicException(sprintf('The adapter "%s" does not support the mysqli driver, use pdo_mysql instead.', static::class));
|
||||
case 'pdo_mysql':
|
||||
case 'drizzle_pdo_mysql':
|
||||
|
||||
case $driver instanceof \Doctrine\DBAL\Driver\AbstractMySQLDriver:
|
||||
$this->driver = 'mysql';
|
||||
break;
|
||||
case 'pdo_sqlite':
|
||||
case $driver instanceof \Doctrine\DBAL\Driver\PDOSqlite\Driver:
|
||||
$this->driver = 'sqlite';
|
||||
break;
|
||||
case 'pdo_pgsql':
|
||||
case $driver instanceof \Doctrine\DBAL\Driver\PDOPgSql\Driver:
|
||||
$this->driver = 'pgsql';
|
||||
break;
|
||||
case 'oci8':
|
||||
case 'pdo_oracle':
|
||||
case $driver instanceof \Doctrine\DBAL\Driver\OCI8\Driver:
|
||||
case $driver instanceof \Doctrine\DBAL\Driver\PDOOracle\Driver:
|
||||
$this->driver = 'oci';
|
||||
break;
|
||||
case 'pdo_sqlsrv':
|
||||
case $driver instanceof \Doctrine\DBAL\Driver\SQLSrv\Driver:
|
||||
$this->driver = 'sqlsrv';
|
||||
break;
|
||||
default:
|
||||
$this->driver = \get_class($driver);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -167,6 +167,7 @@ class ReflectionClassResource implements SelfCheckingResourceInterface
|
||||
if (!$parametersWithUndefinedConstants) {
|
||||
yield preg_replace('/^ @@.*/m', '', $m);
|
||||
} else {
|
||||
$t = $m->getReturnType();
|
||||
$stack = [
|
||||
$m->getDocComment(),
|
||||
$m->getName(),
|
||||
@ -177,15 +178,16 @@ class ReflectionClassResource implements SelfCheckingResourceInterface
|
||||
$m->isPrivate(),
|
||||
$m->isProtected(),
|
||||
$m->returnsReference(),
|
||||
$m->hasReturnType() ? $m->getReturnType()->getName() : '',
|
||||
$t instanceof \ReflectionNamedType ? ((string) $t->allowsNull()).$t->getName() : (string) $t,
|
||||
];
|
||||
|
||||
foreach ($m->getParameters() as $p) {
|
||||
if (!isset($parametersWithUndefinedConstants[$p->name])) {
|
||||
$stack[] = (string) $p;
|
||||
} else {
|
||||
$t = $p->getType();
|
||||
$stack[] = $p->isOptional();
|
||||
$stack[] = $p->hasType() ? $p->getType()->getName() : '';
|
||||
$stack[] = $t instanceof \ReflectionNamedType ? ((string) $t->allowsNull()).$t->getName() : (string) $t;
|
||||
$stack[] = $p->isPassedByReference();
|
||||
$stack[] = $p->isVariadic();
|
||||
$stack[] = $p->getName();
|
||||
|
@ -222,7 +222,7 @@ class PhpDumper extends Dumper
|
||||
$regex = preg_quote(\DIRECTORY_SEPARATOR.$dir[$i], '#').$regex;
|
||||
} while (0 < --$i);
|
||||
|
||||
$this->targetDirRegex = '#'.preg_quote($dir[0], '#').$regex.'#';
|
||||
$this->targetDirRegex = '#(^|file://|[:;, \|\r\n])'.preg_quote($dir[0], '#').$regex.'#';
|
||||
}
|
||||
}
|
||||
|
||||
@ -2006,11 +2006,12 @@ EOF;
|
||||
private function export($value)
|
||||
{
|
||||
if (null !== $this->targetDirRegex && \is_string($value) && preg_match($this->targetDirRegex, $value, $matches, PREG_OFFSET_CAPTURE)) {
|
||||
$prefix = $matches[0][1] ? $this->doExport(substr($value, 0, $matches[0][1]), true).'.' : '';
|
||||
$suffix = $matches[0][1] + \strlen($matches[0][0]);
|
||||
$matches[0][1] += \strlen($matches[1][0]);
|
||||
$prefix = $matches[0][1] ? $this->doExport(substr($value, 0, $matches[0][1]), true).'.' : '';
|
||||
$suffix = isset($value[$suffix]) ? '.'.$this->doExport(substr($value, $suffix), true) : '';
|
||||
$dirname = $this->asFiles ? '$this->containerDir' : '__DIR__';
|
||||
$offset = 1 + $this->targetDirMaxMatches - \count($matches);
|
||||
$offset = 2 + $this->targetDirMaxMatches - \count($matches);
|
||||
|
||||
if (0 < $offset) {
|
||||
$dirname = sprintf('\dirname(__DIR__, %d)', $offset + (int) $this->asFiles);
|
||||
|
@ -31,26 +31,36 @@ class ProxyHelper
|
||||
if (!$type) {
|
||||
return null;
|
||||
}
|
||||
if (!\is_string($type)) {
|
||||
$name = $type->getName();
|
||||
|
||||
$types = [];
|
||||
|
||||
foreach ($type instanceof \ReflectionUnionType ? $type->getTypes() : [$type] as $type) {
|
||||
$name = $type instanceof \ReflectionNamedType ? $type->getName() : (string) $type;
|
||||
|
||||
if ($type->isBuiltin()) {
|
||||
return $noBuiltin ? null : $name;
|
||||
if (!$noBuiltin) {
|
||||
$types[] = $name;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
$lcName = strtolower($name);
|
||||
$prefix = $noBuiltin ? '' : '\\';
|
||||
|
||||
if ('self' !== $lcName && 'parent' !== $lcName) {
|
||||
return $prefix.$name;
|
||||
$types[] = '' !== $prefix ? $prefix.$name : $name;
|
||||
continue;
|
||||
}
|
||||
if (!$r instanceof \ReflectionMethod) {
|
||||
return null;
|
||||
continue;
|
||||
}
|
||||
if ('self' === $lcName) {
|
||||
return $prefix.$r->getDeclaringClass()->name;
|
||||
$types[] = $prefix.$r->getDeclaringClass()->name;
|
||||
} else {
|
||||
$types[] = ($parent = $r->getDeclaringClass()->getParentClass()) ? $prefix.$parent->name : null;
|
||||
}
|
||||
}
|
||||
|
||||
return ($parent = $r->getDeclaringClass()->getParentClass()) ? $prefix.$parent->name : null;
|
||||
return $types ? implode('|', $types) : null;
|
||||
}
|
||||
}
|
||||
|
@ -107,7 +107,7 @@ class PhpDumperTest extends TestCase
|
||||
|
||||
$container = new ContainerBuilder();
|
||||
$container->setDefinition('test', $definition);
|
||||
$container->setParameter('foo', 'wiz'.\dirname(__DIR__));
|
||||
$container->setParameter('foo', 'file://'.\dirname(__DIR__));
|
||||
$container->setParameter('bar', __DIR__);
|
||||
$container->setParameter('baz', '%bar%/PhpDumperTest.php');
|
||||
$container->setParameter('buz', \dirname(__DIR__, 2));
|
||||
|
@ -56,7 +56,7 @@ class ProjectServiceContainer extends Container
|
||||
*/
|
||||
protected function getTestService()
|
||||
{
|
||||
return $this->services['test'] = new \stdClass(('wiz'.\dirname(__DIR__, 1)), [('wiz'.\dirname(__DIR__, 1)) => (\dirname(__DIR__, 2).'/')]);
|
||||
return $this->services['test'] = new \stdClass(('file://'.\dirname(__DIR__, 1)), [('file://'.\dirname(__DIR__, 1)) => (\dirname(__DIR__, 2).'/')]);
|
||||
}
|
||||
|
||||
public function getParameter($name)
|
||||
@ -109,7 +109,7 @@ class ProjectServiceContainer extends Container
|
||||
protected function getDefaultParameters(): array
|
||||
{
|
||||
return [
|
||||
'foo' => ('wiz'.\dirname(__DIR__, 1)),
|
||||
'foo' => ('file://'.\dirname(__DIR__, 1)),
|
||||
'bar' => __DIR__,
|
||||
'baz' => (__DIR__.'/PhpDumperTest.php'),
|
||||
'buz' => \dirname(__DIR__, 2),
|
||||
|
@ -127,10 +127,10 @@ class AddAnnotatedClassesToCachePass implements CompilerPassInterface
|
||||
|
||||
private function matchAnyRegexps(string $class, array $regexps): bool
|
||||
{
|
||||
$blacklisted = false !== strpos($class, 'Test');
|
||||
$isTest = false !== strpos($class, 'Test');
|
||||
|
||||
foreach ($regexps as $regex) {
|
||||
if ($blacklisted && false === strpos($regex, 'Test')) {
|
||||
if ($isTest && false === strpos($regex, 'Test')) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -25,7 +25,7 @@ use Symfony\Component\Intl\Data\Util\LocaleScanner;
|
||||
*/
|
||||
class CurrencyDataGenerator extends AbstractDataGenerator
|
||||
{
|
||||
private static $blacklist = [
|
||||
private static $denylist = [
|
||||
'XBA' => true, // European Composite Unit
|
||||
'XBB' => true, // European Monetary Unit
|
||||
'XBC' => true, // European Unit of Account (XBC)
|
||||
@ -133,7 +133,7 @@ class CurrencyDataGenerator extends AbstractDataGenerator
|
||||
$symbolNamePairs = iterator_to_array($rootBundle['Currencies']);
|
||||
|
||||
// Remove unwanted currencies
|
||||
$symbolNamePairs = array_diff_key($symbolNamePairs, self::$blacklist);
|
||||
$symbolNamePairs = array_diff_key($symbolNamePairs, self::$denylist);
|
||||
|
||||
return $symbolNamePairs;
|
||||
}
|
||||
|
@ -83,7 +83,7 @@ class LanguageDataGenerator extends AbstractDataGenerator
|
||||
'za' => 'zha',
|
||||
'zh' => 'zho',
|
||||
];
|
||||
private static $blacklist = [
|
||||
private static $denylist = [
|
||||
'root' => true, // Absolute root language
|
||||
'mul' => true, // Multiple languages
|
||||
'mis' => true, // Uncoded language
|
||||
@ -182,7 +182,7 @@ class LanguageDataGenerator extends AbstractDataGenerator
|
||||
|
||||
private static function generateLanguageNames(ArrayAccessibleResourceBundle $localeBundle): array
|
||||
{
|
||||
return array_diff_key(iterator_to_array($localeBundle['Languages']), self::$blacklist);
|
||||
return array_diff_key(iterator_to_array($localeBundle['Languages']), self::$denylist);
|
||||
}
|
||||
|
||||
private function generateAlpha3Codes(array $languageCodes, ArrayAccessibleResourceBundle $metadataBundle): array
|
||||
|
@ -40,7 +40,7 @@ class RegionDataGenerator extends AbstractDataGenerator
|
||||
'YE' => 'YEM',
|
||||
];
|
||||
|
||||
private static $blacklist = [
|
||||
private static $denylist = [
|
||||
// Exceptional reservations
|
||||
'AC' => true, // Ascension Island
|
||||
'CP' => true, // Clipperton Island
|
||||
@ -69,7 +69,7 @@ class RegionDataGenerator extends AbstractDataGenerator
|
||||
|
||||
public static function isValidCountryCode($region)
|
||||
{
|
||||
if (isset(self::$blacklist[$region])) {
|
||||
if (isset(self::$denylist[$region])) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -24,7 +24,7 @@ use Symfony\Component\Intl\Data\Util\LocaleScanner;
|
||||
*/
|
||||
class ScriptDataGenerator extends AbstractDataGenerator
|
||||
{
|
||||
private static $blacklist = [
|
||||
private static $denylist = [
|
||||
'Zzzz' => true, // Unknown Script
|
||||
];
|
||||
|
||||
@ -69,7 +69,7 @@ class ScriptDataGenerator extends AbstractDataGenerator
|
||||
// isset() on \ResourceBundle returns true even if the value is null
|
||||
if (isset($localeBundle['Scripts']) && null !== $localeBundle['Scripts']) {
|
||||
$data = [
|
||||
'Names' => array_diff_key(iterator_to_array($localeBundle['Scripts']), self::$blacklist),
|
||||
'Names' => array_diff_key(iterator_to_array($localeBundle['Scripts']), self::$denylist),
|
||||
];
|
||||
|
||||
$this->scriptCodes = array_merge($this->scriptCodes, array_keys($data['Names']));
|
||||
|
@ -316,26 +316,31 @@ class PdoStore implements StoreInterface
|
||||
if ($con instanceof \PDO) {
|
||||
$this->driver = $con->getAttribute(\PDO::ATTR_DRIVER_NAME);
|
||||
} else {
|
||||
switch ($this->driver = $con->getDriver()->getName()) {
|
||||
case 'mysqli':
|
||||
throw new NotSupportedException(sprintf('The store "%s" does not support the mysqli driver, use pdo_mysql instead.', static::class));
|
||||
case 'pdo_mysql':
|
||||
case 'drizzle_pdo_mysql':
|
||||
$driver = $con->getDriver();
|
||||
|
||||
switch (true) {
|
||||
case $driver instanceof \Doctrine\DBAL\Driver\Mysqli\Driver:
|
||||
throw new \LogicException(sprintf('The adapter "%s" does not support the mysqli driver, use pdo_mysql instead.', static::class));
|
||||
|
||||
case $driver instanceof \Doctrine\DBAL\Driver\AbstractMySQLDriver:
|
||||
$this->driver = 'mysql';
|
||||
break;
|
||||
case 'pdo_sqlite':
|
||||
case $driver instanceof \Doctrine\DBAL\Driver\PDOSqlite\Driver:
|
||||
$this->driver = 'sqlite';
|
||||
break;
|
||||
case 'pdo_pgsql':
|
||||
case $driver instanceof \Doctrine\DBAL\Driver\PDOPgSql\Driver:
|
||||
$this->driver = 'pgsql';
|
||||
break;
|
||||
case 'oci8':
|
||||
case 'pdo_oracle':
|
||||
case $driver instanceof \Doctrine\DBAL\Driver\OCI8\Driver:
|
||||
case $driver instanceof \Doctrine\DBAL\Driver\PDOOracle\Driver:
|
||||
$this->driver = 'oci';
|
||||
break;
|
||||
case 'pdo_sqlsrv':
|
||||
case $driver instanceof \Doctrine\DBAL\Driver\SQLSrv\Driver:
|
||||
$this->driver = 'sqlsrv';
|
||||
break;
|
||||
default:
|
||||
$this->driver = \get_class($driver);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1220,7 +1220,7 @@ class OptionsResolver implements Options
|
||||
|
||||
private function getParameterClassName(\ReflectionParameter $parameter): ?string
|
||||
{
|
||||
if (!($type = $parameter->getType()) || $type->isBuiltin()) {
|
||||
if (!($type = $parameter->getType()) instanceof \ReflectionNamedType || $type->isBuiltin()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@ -432,8 +432,9 @@ class PropertyAccessor implements PropertyAccessorInterface
|
||||
// handle uninitialized properties in PHP >= 7.4
|
||||
if (\PHP_VERSION_ID >= 70400 && preg_match('/^Typed property ([\w\\\]+)::\$(\w+) must not be accessed before initialization$/', $e->getMessage(), $matches)) {
|
||||
$r = new \ReflectionProperty($matches[1], $matches[2]);
|
||||
$type = ($type = $r->getType()) instanceof \ReflectionNamedType ? $type->getName() : (string) $type;
|
||||
|
||||
throw new AccessException(sprintf('The property "%s::$%s" is not readable because it is typed "%s". You should initialize it or declare a default value instead.', $r->getDeclaringClass()->getName(), $r->getName(), $r->getType()->getName()), 0, $e);
|
||||
throw new AccessException(sprintf('The property "%s::$%s" is not readable because it is typed "%s". You should initialize it or declare a default value instead.', $r->getDeclaringClass()->getName(), $r->getName(), $type), 0, $e);
|
||||
}
|
||||
|
||||
throw $e;
|
||||
|
@ -235,11 +235,11 @@ class ReflectionExtractor implements PropertyListExtractorInterface, PropertyTyp
|
||||
}
|
||||
$type = $this->extractFromReflectionType($reflectionType, $reflectionMethod);
|
||||
|
||||
if (\in_array($prefix, $this->arrayMutatorPrefixes)) {
|
||||
$type = new Type(Type::BUILTIN_TYPE_ARRAY, false, null, true, new Type(Type::BUILTIN_TYPE_INT), $type);
|
||||
if (1 === \count($type) && \in_array($prefix, $this->arrayMutatorPrefixes)) {
|
||||
$type = [new Type(Type::BUILTIN_TYPE_ARRAY, false, null, true, new Type(Type::BUILTIN_TYPE_INT), $type[0])];
|
||||
}
|
||||
|
||||
return [$type];
|
||||
return $type;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -255,7 +255,7 @@ class ReflectionExtractor implements PropertyListExtractorInterface, PropertyTyp
|
||||
}
|
||||
|
||||
if ($reflectionType = $reflectionMethod->getReturnType()) {
|
||||
return [$this->extractFromReflectionType($reflectionType, $reflectionMethod)];
|
||||
return $this->extractFromReflectionType($reflectionType, $reflectionMethod);
|
||||
}
|
||||
|
||||
if (\in_array($prefix, ['is', 'can', 'has'])) {
|
||||
@ -290,7 +290,7 @@ class ReflectionExtractor implements PropertyListExtractorInterface, PropertyTyp
|
||||
}
|
||||
$reflectionType = $parameter->getType();
|
||||
|
||||
return $reflectionType ? [$this->extractFromReflectionType($reflectionType, $constructor)] : null;
|
||||
return $reflectionType ? $this->extractFromReflectionType($reflectionType, $constructor) : null;
|
||||
}
|
||||
|
||||
if ($parentClass = $reflectionClass->getParentClass()) {
|
||||
@ -319,22 +319,26 @@ class ReflectionExtractor implements PropertyListExtractorInterface, PropertyTyp
|
||||
return [new Type(static::MAP_TYPES[$type] ?? $type)];
|
||||
}
|
||||
|
||||
private function extractFromReflectionType(\ReflectionType $reflectionType, \ReflectionMethod $reflectionMethod): Type
|
||||
private function extractFromReflectionType(\ReflectionType $reflectionType, \ReflectionMethod $reflectionMethod): array
|
||||
{
|
||||
$phpTypeOrClass = $reflectionType->getName();
|
||||
$types = [];
|
||||
$nullable = $reflectionType->allowsNull();
|
||||
|
||||
foreach ($reflectionType instanceof \ReflectionUnionType ? $reflectionType->getTypes() : [$reflectionType] as $type) {
|
||||
$phpTypeOrClass = $reflectionType instanceof \ReflectionNamedType ? $reflectionType->getName() : (string) $type;
|
||||
|
||||
if (Type::BUILTIN_TYPE_ARRAY === $phpTypeOrClass) {
|
||||
$type = new Type(Type::BUILTIN_TYPE_ARRAY, $nullable, null, true);
|
||||
} elseif ('void' === $phpTypeOrClass) {
|
||||
$type = new Type(Type::BUILTIN_TYPE_NULL, $nullable);
|
||||
$types[] = new Type(Type::BUILTIN_TYPE_ARRAY, $nullable, null, true);
|
||||
} elseif ('void' === $phpTypeOrClass || 'null' === $phpTypeOrClass) {
|
||||
$types[] = new Type(Type::BUILTIN_TYPE_NULL, $nullable);
|
||||
} elseif ($reflectionType->isBuiltin()) {
|
||||
$type = new Type($phpTypeOrClass, $nullable);
|
||||
$types[] = new Type($phpTypeOrClass, $nullable);
|
||||
} else {
|
||||
$type = new Type(Type::BUILTIN_TYPE_OBJECT, $nullable, $this->resolveTypeName($phpTypeOrClass, $reflectionMethod));
|
||||
$types[] = new Type(Type::BUILTIN_TYPE_OBJECT, $nullable, $this->resolveTypeName($phpTypeOrClass, $reflectionMethod));
|
||||
}
|
||||
}
|
||||
|
||||
return $type;
|
||||
return $types;
|
||||
}
|
||||
|
||||
private function resolveTypeName(string $name, \ReflectionMethod $reflectionMethod): string
|
||||
|
@ -244,7 +244,7 @@ EOF;
|
||||
* Last but not least:
|
||||
* - Because it is not possibe to mix unicode/non-unicode patterns in a single regexp, several of them can be generated.
|
||||
* - The same regexp can be used several times when the logic in the switch rejects the match. When this happens, the
|
||||
* matching-but-failing subpattern is blacklisted by replacing its name by "(*F)", which forces a failure-to-match.
|
||||
* matching-but-failing subpattern is excluded by replacing its name by "(*F)", which forces a failure-to-match.
|
||||
* To ease this backlisting operation, the name of subpatterns is also the string offset where the replacement should occur.
|
||||
*/
|
||||
private function compileDynamicRoutes(RouteCollection $collection, bool $matchHost, int $chunkLimit, array &$conditions): array
|
||||
|
@ -522,7 +522,7 @@ abstract class AbstractNormalizer implements NormalizerInterface, DenormalizerIn
|
||||
protected function denormalizeParameter(\ReflectionClass $class, \ReflectionParameter $parameter, $parameterName, $parameterData, array $context, $format = null)
|
||||
{
|
||||
try {
|
||||
if (($parameterType = $parameter->getType()) && !$parameterType->isBuiltin()) {
|
||||
if (($parameterType = $parameter->getType()) instanceof \ReflectionNamedType && !$parameterType->isBuiltin()) {
|
||||
$parameterClass = $parameterType->getName();
|
||||
new \ReflectionClass($parameterClass); // throws a \ReflectionException if the class doesn't exist
|
||||
|
||||
|
@ -97,7 +97,7 @@ class ReflectionCaster
|
||||
$prefix = Caster::PREFIX_VIRTUAL;
|
||||
|
||||
$a += [
|
||||
$prefix.'name' => $c->getName(),
|
||||
$prefix.'name' => $c instanceof \ReflectionNamedType ? $c->getName() : (string) $c,
|
||||
$prefix.'allowsNull' => $c->allowsNull(),
|
||||
$prefix.'isBuiltin' => $c->isBuiltin(),
|
||||
];
|
||||
@ -182,7 +182,7 @@ class ReflectionCaster
|
||||
|
||||
if (isset($a[$prefix.'returnType'])) {
|
||||
$v = $a[$prefix.'returnType'];
|
||||
$v = $v->getName();
|
||||
$v = $v instanceof \ReflectionNamedType ? $v->getName() : (string) $v;
|
||||
$a[$prefix.'returnType'] = new ClassStub($a[$prefix.'returnType']->allowsNull() ? '?'.$v : $v, [class_exists($v, false) || interface_exists($v, false) || trait_exists($v, false) ? $v : '', '']);
|
||||
}
|
||||
if (isset($a[$prefix.'class'])) {
|
||||
@ -244,7 +244,7 @@ class ReflectionCaster
|
||||
]);
|
||||
|
||||
if ($v = $c->getType()) {
|
||||
$a[$prefix.'typeHint'] = $v->getName();
|
||||
$a[$prefix.'typeHint'] = $v instanceof \ReflectionNamedType ? $v->getName() : (string) $v;
|
||||
}
|
||||
|
||||
if (isset($a[$prefix.'typeHint'])) {
|
||||
@ -320,10 +320,14 @@ class ReflectionCaster
|
||||
foreach ($a[$prefix.'parameters']->value as $k => $param) {
|
||||
$signature .= ', ';
|
||||
if ($type = $param->getType()) {
|
||||
if (!$type instanceof \ReflectionNamedType) {
|
||||
$signature .= $type.' ';
|
||||
} else {
|
||||
if (!$param->isOptional() && $param->allowsNull()) {
|
||||
$signature .= '?';
|
||||
}
|
||||
$signature .= substr(strrchr('\\'.$type->getName(), '\\'), 1).' ';
|
||||
$signature .= substr(strrchr('\\'.$type->getName(), '\\'), 1);
|
||||
}
|
||||
}
|
||||
$signature .= $k;
|
||||
|
||||
|
@ -287,7 +287,8 @@ class CliDumper extends AbstractDumper
|
||||
} elseif (Cursor::HASH_RESOURCE === $type) {
|
||||
$prefix = $this->style('note', $class.' resource', $attr).($hasChild ? ' {' : ' ');
|
||||
} else {
|
||||
$prefix = $class && !(self::DUMP_LIGHT_ARRAY & $this->flags) ? $this->style('note', 'array:'.$class, $attr).' [' : '[';
|
||||
$unstyledPrefix = $class && !(self::DUMP_LIGHT_ARRAY & $this->flags) ? 'array:'.$class : '';
|
||||
$prefix = $this->style('note', $unstyledPrefix, $attr).($unstyledPrefix ? ' [' : '[');
|
||||
}
|
||||
|
||||
if (($cursor->softRefCount || 0 < $cursor->softRefHandle) && empty($attr['cut_hash'])) {
|
||||
|
@ -13,6 +13,7 @@ namespace Symfony\Component\VarDumper\Tests\Dumper;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\VarDumper\Cloner\VarCloner;
|
||||
use Symfony\Component\VarDumper\Dumper\AbstractDumper;
|
||||
use Symfony\Component\VarDumper\Dumper\CliDumper;
|
||||
use Symfony\Component\VarDumper\Test\VarDumperTestTrait;
|
||||
use Twig\Environment;
|
||||
@ -517,6 +518,57 @@ EOTXT
|
||||
);
|
||||
}
|
||||
|
||||
public function provideDumpArrayWithColor()
|
||||
{
|
||||
yield [
|
||||
['foo' => 'bar'],
|
||||
0,
|
||||
<<<EOTXT
|
||||
\e[0;38;5;208m\e[38;5;38marray:1\e[0;38;5;208m [\e[m
|
||||
\e[0;38;5;208m"\e[38;5;113mfoo\e[0;38;5;208m" => "\e[1;38;5;113mbar\e[0;38;5;208m"\e[m
|
||||
\e[0;38;5;208m]\e[m
|
||||
|
||||
EOTXT
|
||||
];
|
||||
|
||||
yield [[], AbstractDumper::DUMP_LIGHT_ARRAY, "\e[0;38;5;208m\e[38;5;38m\e[0;38;5;208m[]\e[m\n"];
|
||||
|
||||
yield [
|
||||
['foo' => 'bar'],
|
||||
AbstractDumper::DUMP_LIGHT_ARRAY,
|
||||
<<<EOTXT
|
||||
\e[0;38;5;208m\e[38;5;38m\e[0;38;5;208m[\e[m
|
||||
\e[0;38;5;208m"\e[38;5;113mfoo\e[0;38;5;208m" => "\e[1;38;5;113mbar\e[0;38;5;208m"\e[m
|
||||
\e[0;38;5;208m]\e[m
|
||||
|
||||
EOTXT
|
||||
];
|
||||
|
||||
yield [[], 0, "\e[0;38;5;208m\e[38;5;38m\e[0;38;5;208m[]\e[m\n"];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider provideDumpArrayWithColor
|
||||
*/
|
||||
public function testDumpArrayWithColor($value, $flags, $expectedOut)
|
||||
{
|
||||
if ('\\' === \DIRECTORY_SEPARATOR) {
|
||||
$this->markTestSkipped('Windows console does not support coloration');
|
||||
}
|
||||
|
||||
$out = '';
|
||||
$dumper = new CliDumper(function ($line, $depth) use (&$out) {
|
||||
if ($depth >= 0) {
|
||||
$out .= str_repeat(' ', $depth).$line."\n";
|
||||
}
|
||||
}, null, $flags);
|
||||
$dumper->setColors(true);
|
||||
$cloner = new VarCloner();
|
||||
$dumper->dump($cloner->cloneVar($value));
|
||||
|
||||
$this->assertSame($expectedOut, $out);
|
||||
}
|
||||
|
||||
private function getSpecialVars()
|
||||
{
|
||||
foreach (array_keys($GLOBALS) as $var) {
|
||||
|
Reference in New Issue
Block a user