diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 216a2ba4e5625..c9c3b75340557 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -1,6 +1,6 @@
| Q | A
| ------------- | ---
-| Branch? | master / 2.7, 2.8, 3.1 or 3.2
+| Branch? | master / 2.7, 2.8 or 3.2
| Bug fix? | yes/no
| New feature? | yes/no
| BC breaks? | yes/no
diff --git a/.php_cs.dist b/.php_cs.dist
index 5f37bb77f694c..71c4a35f5883b 100644
--- a/.php_cs.dist
+++ b/.php_cs.dist
@@ -8,33 +8,34 @@ return PhpCsFixer\Config::create()
'no_unreachable_default_argument_value' => false,
'braces' => array('allow_single_line_closure' => true),
'heredoc_to_nowdoc' => false,
+ 'phpdoc_annotation_without_dot' => false,
))
->setRiskyAllowed(true)
->setFinder(
PhpCsFixer\Finder::create()
- ->in(__DIR__)
+ ->in(__DIR__.'/src')
->exclude(array(
// directories containing files with content that is autogenerated by `var_export`, which breaks CS in output code
- 'src/Symfony/Component/DependencyInjection/Tests/Fixtures',
- 'src/Symfony/Component/Routing/Tests/Fixtures/dumper',
+ 'Symfony/Component/DependencyInjection/Tests/Fixtures',
+ 'Symfony/Component/Routing/Tests/Fixtures/dumper',
// fixture templates
- 'src/Symfony/Component/Templating/Tests/Fixtures/templates',
- 'src/Symfony/Bundle/FrameworkBundle/Tests/Templating/Helper/Resources/Custom',
+ 'Symfony/Component/Templating/Tests/Fixtures/templates',
+ 'Symfony/Bundle/FrameworkBundle/Tests/Templating/Helper/Resources/Custom',
// generated fixtures
- 'src/Symfony/Component/VarDumper/Tests/Fixtures',
+ 'Symfony/Component/VarDumper/Tests/Fixtures',
// resource templates
- 'src/Symfony/Bundle/FrameworkBundle/Resources/views/Form',
+ 'Symfony/Bundle/FrameworkBundle/Resources/views/Form',
))
// file content autogenerated by `var_export`
- ->notPath('src/Symfony/Component/Translation/Tests/fixtures/resources.php')
+ ->notPath('Symfony/Component/Translation/Tests/fixtures/resources.php')
// autogenerated xmls
- ->notPath('src/Symfony/Component/Console/Tests/Fixtures/application_1.xml')
- ->notPath('src/Symfony/Component/Console/Tests/Fixtures/application_2.xml')
+ ->notPath('Symfony/Component/Console/Tests/Fixtures/application_1.xml')
+ ->notPath('Symfony/Component/Console/Tests/Fixtures/application_2.xml')
// yml
- ->notPath('src/Symfony/Component/Yaml/Tests/Fixtures/sfTests.yml')
+ ->notPath('Symfony/Component/Yaml/Tests/Fixtures/sfTests.yml')
// test template
- ->notPath('src/Symfony/Bundle/FrameworkBundle/Tests/Templating/Helper/Resources/Custom/_name_entry_label.html.php')
+ ->notPath('Symfony/Bundle/FrameworkBundle/Tests/Templating/Helper/Resources/Custom/_name_entry_label.html.php')
// explicit heredoc test
- ->notPath('src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Resources/views/translation.html.php')
+ ->notPath('Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Resources/views/translation.html.php')
)
;
diff --git a/CHANGELOG-2.7.md b/CHANGELOG-2.7.md
index ff7d6301ddcc4..df5011ef69c67 100644
--- a/CHANGELOG-2.7.md
+++ b/CHANGELOG-2.7.md
@@ -7,6 +7,43 @@ in 2.7 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 between two versions, go to https://github.com/symfony/symfony/compare/v2.7.0...v2.7.1
+* 2.7.23 (2017-01-12)
+
+ * bug #21218 [Form] DateTimeToLocalizedStringTransformer does not use timezone when using date only (magnetik)
+ * bug #21104 [FrameworkBundle] fix IPv6 address handling in server commands (xabbuh)
+ * bug #20793 [Validator] Fix caching of constraints derived from non-serializable parents (uwej711)
+ * bug #19586 [TwigBundle] Fix bug where namespaced paths don't take parent bundles in account (wesleylancel)
+ * bug #21237 [FrameworkBundle] Fix relative paths used as cache keys (nicolas-grekas)
+ * bug #21183 [Validator] respect groups when merging constraints (xabbuh)
+ * bug #21179 [TwigBundle] Fixing regression in TwigEngine exception handling (Bertalan Attila)
+ * bug #21220 [DI] Fix missing new line after private alias (ogizanagi)
+ * bug #21211 Classloader tmpname (lyrixx)
+ * bug #21205 [TwigBundle] fixed usage when Templating is not installed (fabpot)
+ * bug #21155 [Validator] Check cascasdedGroups for being countable (scaytrase)
+ * bug #21200 [Filesystem] Check that directory is writable after created it in dumpFile() (chalasr)
+ * bug #21113 [FrameworkBundle][HttpKernel] Fix resources loading for bundles with custom structure (chalasr)
+ * bug #21084 [Yaml] handle empty lines inside unindented collection (xabbuh)
+ * bug #20925 [HttpFoundation] Validate/cast cookie expire time (ro0NL)
+ * bug #21032 [SecurityBundle] Made collection of user provider unique when injecting them to the RemberMeService (lyrixx)
+ * bug #21078 [Console] Escape default value when dumping help (lyrixx)
+ * bug #21076 [Console] OS X Can't call cli_set_process_title php without superuser (ogizanagi)
+ * bug #20900 [Console] Descriptors should use Helper::strlen (ogizanagi)
+ * bug #21064 [Debug] Wrap call to ->log in a try catch block (lyrixx)
+ * bug #21010 [Debug] UndefinedMethodFatalErrorHandler - Handle anonymous classes (SpacePossum)
+ * bug #20859 Avoid warning in PHP 7.2 because of non-countable data (wouterj)
+ * bug #21053 [Validator] override property constraints in child class (xabbuh)
+ * bug #20970 [Console] Fix question formatting using SymfonyStyle::ask() (chalasr, ogizanagi)
+ * bug #20975 [Form] fix group sequence based validation (xabbuh)
+ * bug #20599 [WebProfilerBundle] Display multiple HTTP headers in WDT (ro0NL)
+ * bug #20799 [TwigBundle] do not try to register incomplete definitions (xabbuh)
+ * bug #20961 [Validator] phpize default option values (xabbuh)
+ * bug #20934 [FrameworkBundle] Fix PHP form templates on translatable attributes (ro0NL)
+ * bug #20957 [FrameworkBundle] test for the Validator component to be present (xabbuh)
+ * bug #20936 [DependencyInjection] Fix on-invalid attribute type in xsd (ogizanagi)
+ * bug #20931 [VarDumper] Fix dumping by-ref variadics (nicolas-grekas)
+ * bug #20734 [Security] AbstractVoter->supportsAttribute gives false positive if attribute is zero (0) (martynas-foodpanda)
+ * bug #14082 [config] Fix issue when key removed and left value only (zerustech)
+
* 2.7.22 (2016-12-13)
* bug #20714 [FrameworkBundle] Fix unresolved parameters from default configs in debug:config (chalasr)
diff --git a/CHANGELOG-2.8.md b/CHANGELOG-2.8.md
index 070264f0c3ea0..abd09dc175e2b 100644
--- a/CHANGELOG-2.8.md
+++ b/CHANGELOG-2.8.md
@@ -7,6 +7,27 @@ in 2.8 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 between two versions, go to https://github.com/symfony/symfony/compare/v2.8.0...v2.8.1
+* 2.8.17 (2017-02-06)
+
+ * bug #20844 [Config] Fix checking cache for non existing meta file (hason)
+ * bug #21063 [Form] Fixed DateType format option for single text widget (HeahDude)
+ * bug #21430 Casting TableCell value to string. (jaydiablo)
+ * bug #21359 [FrameworkBundle] fixed custom domain for translations in php templates (robinlehrmann)
+ * bug #21485 [Process] Non ASCII characters disappearing during the escapeshellarg (GuillaumeVerdon)
+ * bug #21370 [FrameworkBundle] Execute the PhpDocExtractor earlier (GuilhemN)
+ * bug #21462 [BrowserKit] ignore invalid cookies expires date format (xabbuh)
+ * bug #21438 [Console] Fix TableCell issues with decoration (ogizanagi)
+ * bug #21431 [DoctrineBridge] always check for all fields to be mapped (xabbuh)
+ * bug #21360 [PropertyAccess] Handle interfaces in the invalid argument exception (fancyweb)
+ * bug #21403 [DI] Fix defaults overriding empty strings in AutowirePass (nicolas-grekas)
+ * bug #21401 [Debug] Workaround "null" $context (nicolas-grekas)
+ * bug #21333 [HttpKernel] Fix ArgumentValueResolver for arguments default null (chalasr)
+ * bug #20871 [HttpKernel] Give higher priority to adding request formats (akeeman)
+ * bug #21332 [PropertyInfo] Don't try to access a property thru a static method (dunglas)
+ * bug #21331 [PropertyInfo] Exclude static methods form properties guessing (dunglas)
+ * bug #21285 [TwigBundle] do not lose already set method calls (xabbuh)
+ * bug #21279 #20411 fix Yaml parsing for very long quoted strings (RichardBradley)
+
* 2.8.16 (2017-01-12)
* bug #21218 [Form] DateTimeToLocalizedStringTransformer does not use timezone when using date only (magnetik)
diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md
index 24f9845d0b517..f740b56abf6f9 100644
--- a/CONTRIBUTORS.md
+++ b/CONTRIBUTORS.md
@@ -27,18 +27,18 @@ Symfony is the result of the work of many people who made the code better
- Karma Dordrak (drak)
- Lukas Kahwe Smith (lsmith)
- Martin Hasoň (hason)
- - Jeremy Mikola (jmikola)
- Grégoire Pineau (lyrixx)
+ - Jeremy Mikola (jmikola)
- Jean-François Simon (jfsimon)
- Benjamin Eberlei (beberlei)
- Igor Wiedler (igorw)
- Eriksen Costa (eriksencosta)
- - Jules Pietri (heah)
- Maxime Steinhausser (ogizanagi)
+ - Jules Pietri (heah)
+ - Robin Chalas (chalas_r)
- Sarah Khalil (saro0h)
- Jonathan Wage (jwage)
- Diego Saint Esteben (dosten)
- - Robin Chalas (chalas_r)
- Alexandre Salomé (alexandresalome)
- William Durand (couac)
- ornicar
@@ -49,11 +49,12 @@ Symfony is the result of the work of many people who made the code better
- Saša Stamenković (umpirsky)
- Henrik Bjørnskov (henrikbjorn)
- Miha Vrhovnik
- - Diego Saint Esteben (dii3g0)
- Ener-Getick (energetick)
+ - Diego Saint Esteben (dii3g0)
- Konstantin Kudryashov (everzet)
- - Bilal Amarni (bamarni)
- Iltar van der Berg (kjarli)
+ - Roland Franssen (ro0)
+ - Bilal Amarni (bamarni)
- Florin Patan (florinpatan)
- Peter Rehm (rpet)
- Kevin Bond (kbond)
@@ -69,19 +70,18 @@ Symfony is the result of the work of many people who made the code better
- Henrik Westphal (snc)
- Dariusz Górecki (canni)
- Douglas Greenshields (shieldo)
+ - Titouan Galopin (tgalopin)
- Konstantin Myakshin (koc)
- Lee McDermott
- Brandon Turner
- Luis Cordova (cordoval)
- Graham Campbell (graham)
- - Titouan Galopin (tgalopin)
- Daniel Holmes (dholmes)
- Pierre du Plessis (pierredup)
- Toni Uebernickel (havvg)
- Bart van den Burg (burgov)
- Jordan Alliot (jalliot)
- John Wards (johnwards)
- - Roland Franssen (ro0)
- Fran Moreno (franmomu)
- Jáchym Toušek (enumag)
- Antoine Hérault (herzult)
@@ -98,6 +98,7 @@ Symfony is the result of the work of many people who made the code better
- lenar
- Włodzimierz Gajda (gajdaw)
- Baptiste Clavié (talus)
+ - Maxime STEINHAUSSER
- Alexander Schwenn (xelaris)
- Florian Voutzinos (florianv)
- Colin Frei
@@ -114,13 +115,13 @@ Symfony is the result of the work of many people who made the code better
- Eric GELOEN (gelo)
- David Buchmann (dbu)
- Tugdual Saunier (tucksaun)
- - Maxime STEINHAUSSER
- Théo FIDRY (theofidry)
- Robert Schönthal (digitalkaoz)
- Florian Lonqueu-Brochard (florianlb)
- Stefano Sala (stefano.sala)
- Evgeniy (ewgraf)
- Juti Noppornpitak (shiroyuki)
+ - Tobias Nyholm (tobias)
- Tigran Azatyan (tigranazatyan)
- Sebastian Hörl (blogsh)
- Daniel Gomes (danielcsgomes)
@@ -130,12 +131,11 @@ Symfony is the result of the work of many people who made the code better
- Pablo Godel (pgodel)
- Jérémie Augustin (jaugustin)
- Andréia Bohner (andreia)
+ - Yonel Ceruto González (yonelceruto)
- Rafael Dohms (rdohms)
- Arnaud Kleinpeter (nanocom)
- jwdeitch
- - Tobias Nyholm (tobias)
- Joel Wurtz (brouznouf)
- - Yonel Ceruto González (yonelceruto)
- Philipp Wahala (hifi)
- Vyacheslav Pavlov
- Javier Spagnoletti (phansys)
@@ -179,6 +179,7 @@ Symfony is the result of the work of many people who made the code better
- fivestar
- Dominique Bongiraud
- Jeremy Livingston (jeremylivingston)
+ - Michael Lee (zerustech)
- Matthieu Auger (matthieuauger)
- Leszek Prabucki (l3l0)
- François Zaninotto (fzaninotto)
@@ -187,6 +188,7 @@ Symfony is the result of the work of many people who made the code better
- John Kary (johnkary)
- Justin Hileman (bobthecow)
- Blanchon Vincent (blanchonvincent)
+ - Chris Wilkinson (thewilkybarkid)
- Michele Orselli (orso)
- Tom Van Looy (tvlooy)
- Sven Paulus (subsven)
@@ -195,6 +197,7 @@ Symfony is the result of the work of many people who made the code better
- Dawid Nowak
- Eugene Wissner
- Julien Brochet (mewt)
+ - Tristan Darricau (nicofuma)
- Sergey Linnik (linniksa)
- Michaël Perrin (michael.perrin)
- Marcel Beerta (mazen)
@@ -202,7 +205,6 @@ Symfony is the result of the work of many people who made the code better
- Jannik Zschiesche (apfelbox)
- Marco Pivetta (ocramius)
- julien pauli (jpauli)
- - Michael Lee (zerustech)
- Lorenz Schori
- Sébastien Lavoie (lavoiesl)
- Francois Zaninotto
@@ -216,20 +218,20 @@ Symfony is the result of the work of many people who made the code better
- Roman Marintšenko (inori)
- Christian Schmidt
- Xavier Montaña Carreras (xmontana)
- - Chris Wilkinson (thewilkybarkid)
- Mickaël Andrieu (mickaelandrieu)
- Xavier Perez
- Arjen Brouwer (arjenjb)
- Katsuhiro OGAWA
+ - Patrick McDougle (patrick-mcdougle)
- James Halsall (jaitsu)
- Alif Rachmawadi
- Kristen Gilden (kgilden)
+ - SpacePossum
- Pierre-Yves LEBECQ (pylebecq)
- Alex Pott
- Jakub Kucharovic (jkucharovic)
- Eugene Leonovich (rybakit)
- Filippo Tessarotto
- - Tristan Darricau (nicofuma)
- Joseph Rouff (rouffj)
- Félix Labrecque (woodspire)
- GordonsLondon
@@ -259,7 +261,6 @@ Symfony is the result of the work of many people who made the code better
- Peter Kruithof (pkruithof)
- Michael Holm (hollo)
- Marc Weistroff (futurecat)
- - SpacePossum
- Hidde Wieringa (hiddewie)
- Chris Smith (cs278)
- Florian Klein (docteurklein)
@@ -278,12 +279,14 @@ Symfony is the result of the work of many people who made the code better
- Ismael Ambrosi (iambrosi)
- Uwe Jäger (uwej711)
- Aurelijus Valeiša (aurelijus)
+ - Victor Bocharsky (bocharsky_bw)
- Jan Decavele (jandc)
- Gustavo Piltcher
- Stepan Tanasiychuk (stfalcon)
- Tiago Ribeiro (fixe)
- Hidde Boomsma (hboomsma)
- John Bafford (jbafford)
+ - Pavel Batanov (scaytrase)
- Bob den Otter (bopp)
- Adrian Rudnik (kreischweide)
- Francesc Rosàs (frosas)
@@ -304,6 +307,7 @@ Symfony is the result of the work of many people who made the code better
- Matthew Lewinski (lewinski)
- Magnus Nordlander (magnusnordlander)
- alquerci
+ - Adam Prager (padam87)
- Francesco Levorato
- Vitaliy Zakharov (zakharovvi)
- Tobias Sjösten (tobiassjosten)
@@ -324,6 +328,7 @@ Symfony is the result of the work of many people who made the code better
- Clément Gautier (clementgautier)
- Eduardo Gulias (egulias)
- giulio de donato (liuggio)
+ - ShinDarth
- Stéphane PY (steph_py)
- Philipp Kräutli (pkraeutli)
- Kirill chEbba Chebunin (chebba)
@@ -336,9 +341,9 @@ Symfony is the result of the work of many people who made the code better
- Hassan Amouhzi
- Tamas Szijarto
- Pavel Volokitin (pvolok)
+ - François Pluchino (francoispluchino)
- Nicolas Dewez (nicolas_dewez)
- Endre Fejes
- - Victor Bocharsky (bocharsky_bw)
- Tobias Naumann (tna)
- Daniel Beyer
- Shein Alexey
@@ -355,7 +360,6 @@ Symfony is the result of the work of many people who made the code better
- Xavier HAUSHERR
- Albert Jessurum (ajessu)
- Laszlo Korte
- - Pavel Batanov (scaytrase)
- Miha Vrhovnik
- Alessandro Desantis
- hubert lecorche (hlecorche)
@@ -412,6 +416,7 @@ Symfony is the result of the work of many people who made the code better
- boombatower
- Fabrice Bernhard (fabriceb)
- Jérôme Macias (jeromemacias)
+ - Andrey Astakhov (aast)
- Fabian Lange (codingfabian)
- Frank Neff (fneff)
- Roman Lapin (memphys)
@@ -422,6 +427,7 @@ Symfony is the result of the work of many people who made the code better
- Pablo Díez (pablodip)
- Kevin McBride
- Sergio Santoro
+ - Robin van der Vleuten (robinvdvleuten)
- Philipp Rieber (bicpi)
- Manuel de Ruiter (manuel)
- Eduardo Oliveira (entering)
@@ -478,7 +484,6 @@ Symfony is the result of the work of many people who made the code better
- Alexander Deruwe (aderuwe)
- Alain Hippolyte (aloneh)
- Dave Hulbert (dave1010)
- - François Pluchino (francoispluchino)
- Ivan Rey (ivanrey)
- Marcin Chyłek (songoq)
- Ned Schwartz
@@ -512,6 +517,7 @@ Symfony is the result of the work of many people who made the code better
- Konstantin S. M. Möllers (ksmmoellers)
- Sinan Eldem
- Alexandre Dupuy (satchette)
+ - Rob Frawley 2nd
- Nahuel Cuesta (ncuesta)
- Chris Boden (cboden)
- Asmir Mustafic (goetas)
@@ -522,6 +528,7 @@ Symfony is the result of the work of many people who made the code better
- Åsmund Garfors
- Maxime Douailin
- Jean Pasdeloup (pasdeloup)
+ - Benjamin Cremer (bcremer)
- Javier López (loalf)
- Andreas Braun
- Reinier Kip
@@ -551,7 +558,6 @@ Symfony is the result of the work of many people who made the code better
- umpirski
- Chris Heng (gigablah)
- Ulumuddin Yunus (joenoez)
- - Adam Prager (padam87)
- Luc Vieillescazes (iamluc)
- Johann Saunier (prophet777)
- Samuel ROZE (sroze)
@@ -586,6 +592,7 @@ Symfony is the result of the work of many people who made the code better
- develop
- ReenExe
- Mark Sonnabaum
+ - Thomas Royer (cydonia7)
- Richard Quadling
- jochenvdv
- Arturas Smorgun (asarturas)
@@ -593,6 +600,7 @@ Symfony is the result of the work of many people who made the code better
- Michael Piecko
- yclian
- twifty
+ - Indra Gunawan (guind)
- Peter Ward
- Julien DIDIER (juliendidier)
- Dominik Ritter (dritter)
@@ -600,10 +608,10 @@ Symfony is the result of the work of many people who made the code better
- Martin Hujer (martinhujer)
- Pascal Helfenstein
- Baldur Rensch (brensch)
+ - Thomas Calvet
- Vladyslav Petrovych
- Alex Xandra Albert Sim
- Carson Full
- - Andrey Astakhov (aast)
- Trent Steel (trsteel88)
- Yuen-Chi Lian
- Besnik Br
@@ -630,11 +638,13 @@ Symfony is the result of the work of many people who made the code better
- Christian Soronellas (theunic)
- Romain Gautier (mykiwi)
- Yosmany Garcia (yosmanyga)
+ - Wouter J
- Wouter de Wild
- Miroslav Sustek
- Degory Valentine
- Benoit Lévêque (benoit_leveque)
- Jeroen Fiege (fieg)
+ - Arthur de Moulins (4rthem)
- Krzysiek Łabuś
- Xavier Lacot (xavier)
- possum
@@ -642,6 +652,7 @@ Symfony is the result of the work of many people who made the code better
- Olivier Maisonneuve (olineuve)
- Masterklavi
- Francis Turmel (fturmel)
+ - Nikita Nefedov (nikita2206)
- cgonzalez
- Ben
- Jayson Xu (superjavason)
@@ -683,8 +694,10 @@ Symfony is the result of the work of many people who made the code better
- Ivan Menshykov
- David Romaní
- Patrick Allaert
+ - Fabien Bourigault (fbourigault)
- Gustavo Falco (gfalco)
- Matt Robinson (inanimatt)
+ - Ruud Kamphuis (ruudk)
- Aleksey Podskrebyshev
- Calin Mihai Pristavu
- David Marín Carreño (davefx)
@@ -734,7 +747,6 @@ Symfony is the result of the work of many people who made the code better
- Mikhail Yurasov (mym)
- LOUARDI Abdeltif (ouardisoft)
- Robert Gruendler (pulse00)
- - Robin van der Vleuten (robinvdvleuten)
- Simon Terrien (sterrien)
- Benoît Merlet (trompette)
- Koen Kuipers
@@ -763,6 +775,7 @@ Symfony is the result of the work of many people who made the code better
- Colin O'Dell (colinodell)
- xaav
- Mahmoud Mostafa (mahmoud)
+ - Alessandro Lai
- Pieter
- Michael Tibben
- Sander Marechal
@@ -811,8 +824,10 @@ Symfony is the result of the work of many people who made the code better
- Nicolas Macherey
- Lin Clark
- Jeremy David (jeremy.david)
+ - Denis Brumann (dbrumann)
- Troy McCabe
- Ville Mattila
+ - ilyes kooli
- Boris Vujicic (boris.vujicic)
- Max Beutel
- Antanas Arvasevicius
@@ -832,6 +847,7 @@ Symfony is the result of the work of many people who made the code better
- Christian
- Sergii Smertin (nfx)
- hugofonseca (fonsecas72)
+ - Martynas Narbutas
- Bailey Parker
- Eddie Jaoude
- Haritz Iturbe (hizai)
@@ -846,7 +862,6 @@ Symfony is the result of the work of many people who made the code better
- Alex Demchenko (pilot)
- Tadas Gliaubicas (tadcka)
- Benoit Garret
- - Thomas Royer (cydonia7)
- DerManoMann
- Olaf Klischat
- orlovv
@@ -867,7 +882,6 @@ Symfony is the result of the work of many people who made the code better
- rpg600
- Péter Buri (burci)
- Davide Borsatto (davide.borsatto)
- - Indra Gunawan (guind)
- kaiwa
- Charles Sanquer (csanquer)
- Albert Ganiev (helios-ag)
@@ -909,6 +923,7 @@ Symfony is the result of the work of many people who made the code better
- Krzysztof Przybyszewski
- Paul Matthews
- Juan Traverso
+ - Tarjei Huse (tarjei)
- Philipp Strube
- Christian Sciberras
- Clement Herreman (clemherreman)
@@ -919,7 +934,6 @@ Symfony is the result of the work of many people who made the code better
- Alberto Aldegheri
- heccjj
- Alexandre Melard
- - Thomas Calvet
- Sergey Yuferev
- Tobias Stöckler
- Mario Young
@@ -973,6 +987,7 @@ Symfony is the result of the work of many people who made the code better
- Samuel Vogel (samuelvogel)
- Berat Doğan
- Juanmi Rodriguez Cerón
+ - Andy Raines
- Anthony Ferrara
- Klaas Cuvelier (kcuvelier)
- Steve Frécinaux
@@ -998,6 +1013,7 @@ Symfony is the result of the work of many people who made the code better
- Alberto Pirovano (geezmo)
- Pete Mitchell (peterjmit)
- Tom Corrigan (tomcorrigan)
+ - Luis Galeas
- Martin Pärtel
- Noah Heck (myesain)
- Patrick Daley (padrig)
@@ -1014,7 +1030,6 @@ Symfony is the result of the work of many people who made the code better
- Romain Geissler
- Adrien Moiruad
- Tomaz Ahlin
- - Benjamin Cremer (bcremer)
- Marcus Stöhr (dafish)
- Emmanuel Vella (emmanuel.vella)
- Carsten Nielsen (phreaknerd)
@@ -1036,6 +1051,7 @@ Symfony is the result of the work of many people who made the code better
- Damien Tournoud
- Jon Gotlin (jongotlin)
- Michael Dowling (mtdowling)
+ - Karlos Presumido (oneko)
- BilgeXA
- r1pp3rj4ck
- Robert Queck
@@ -1073,7 +1089,6 @@ Symfony is the result of the work of many people who made the code better
- kor3k kor3k (kor3k)
- Stelian Mocanita (stelian)
- Flavian (2much)
- - Arthur de Moulins (4rthem)
- mike
- Keith Maika
- Mephistofeles
@@ -1164,6 +1179,7 @@ Symfony is the result of the work of many people who made the code better
- Julius Beckmann
- Romain Dorgueil
- Grayson Koonce (breerly)
+ - Fabien LUCAS (flucas2)
- Karim Cassam Chenaï (ka)
- Nicolas Bastien (nicolas_bastien)
- Denis (yethee)
@@ -1212,7 +1228,6 @@ Symfony is the result of the work of many people who made the code better
- Bram Van der Sype (brammm)
- Guile (guile)
- Julien Moulin (lizjulien)
- - Nikita Nefedov (nikita2206)
- Mauro Foti (skler)
- Yannick Warnier (ywarnier)
- Kevin Decherf
@@ -1235,7 +1250,9 @@ Symfony is the result of the work of many people who made the code better
- Tischoi
- J Bruni
- Alexey Prilipko
+ - vlakoff
- bertillon
+ - Bertalan Attila
- Yannick Bensacq (cibou)
- Luca Genuzio (genuzio)
- Hans Nilsson (hansnilsson)
@@ -1254,7 +1271,6 @@ Symfony is the result of the work of many people who made the code better
- Joel Marcey
- David Christmann
- root
- - Wouter J
- James Hudson
- Tom Maguire
- David Zuelke
@@ -1309,9 +1325,9 @@ Symfony is the result of the work of many people who made the code better
- ddebree
- Tomas Liubinas
- Alex
+ - Patrick Dawkins
- Klaas Naaijkens
- Daniel González Cerviño
- - ShinDarth
- Rafał
- Adria Lopez (adlpz)
- Rosio (ben-rosio)
@@ -1338,9 +1354,9 @@ Symfony is the result of the work of many people who made the code better
- Michael Pohlers (mick_the_big)
- Cayetano Soriano Gallego (neoshadybeat)
- Ondrej Machulda (ondram)
- - Patrick McDougle (patrick-mcdougle)
- Pablo Monterde Perez (plebs)
- Jimmy Leger (redpanda)
+ - Marcin Szepczynski (szepczynski)
- Cyrille Jouineau (tuxosaurus)
- Yorkie Chadwick (yorkie76)
- Yanick Witschi
@@ -1363,6 +1379,7 @@ Symfony is the result of the work of many people who made the code better
- Arnaud Buathier (arnapou)
- chesteroni (chesteroni)
- Mauricio Lopez (diaspar)
+ - HADJEDJ Vincent (hadjedjvincent)
- Daniele Cesarini (ijanki)
- Ismail Asci (ismailasci)
- Simon CONSTANS (kosssi)
@@ -1505,7 +1522,6 @@ Symfony is the result of the work of many people who made the code better
- Damián Nohales (eagleoneraptor)
- Elliot Anderson (elliot)
- Fabien D. (fabd)
- - Fabien Bourigault (fbourigault)
- Carsten Eilers (fnc)
- Sorin Gitlan (forapathy)
- Yohan Giarelli (frequence-web)
@@ -1549,7 +1565,6 @@ Symfony is the result of the work of many people who made the code better
- Daniel Perez Pinazo (pitiflautico)
- Brayden Williams (redstar504)
- Rich Sage (richsage)
- - Ruud Kamphuis (ruudk)
- Bart Ruysseveldt (ruyss)
- Sascha Dens (saschadens)
- scourgen hung (scourgen)
diff --git a/UPGRADE-3.0.md b/UPGRADE-3.0.md
index d5b4842eb7a72..147f98c67addc 100644
--- a/UPGRADE-3.0.md
+++ b/UPGRADE-3.0.md
@@ -1,6 +1,35 @@
UPGRADE FROM 2.x to 3.0
=======================
+# Table of Contents
+
+- [ClassLoader](#classloader)
+- [Config](#config)
+- [Console](#console)
+- [DependencyInjection](#dependencyinjection)
+- [DoctrineBridge](#doctrinebridge)
+- [DomCrawler](#domcrawler)
+- [EventDispatcher](#eventdispatcher)
+- [Form](#form)
+- [FrameworkBundle](#frameworkbundle)
+- [HttpFoundation](#httpfoundation)
+- [HttpKernel](#httpkernel)
+- [Locale](#locale)
+- [Monolog Bridge](#monolog-bridge)
+- [Process](#process)
+- [PropertyAccess](#propertyaccess)
+- [Routing](#routing)
+- [Security](#security)
+- [SecurityBundle](#securitybundle)
+- [Serializer](#serializer)
+- [Swiftmailer Bridge](#swiftmailer-bridge)
+- [Translator](#translator)
+- [Twig Bridge](#twig-bridge)
+- [TwigBundle](#twigbundle)
+- [Validator](#validator)
+- [WebProfiler](#webprofiler)
+- [Yaml](#yaml)
+
### ClassLoader
* The `UniversalClassLoader` class has been removed in favor of
@@ -1755,3 +1784,9 @@ UPGRADE FROM 2.x to 3.0
```php
$request->query->get('foo')['bar'];
```
+### Monolog Bridge
+
+ * `Symfony\Bridge\Monolog\Logger::emerg()` was removed. Use `emergency()` which is PSR-3 compatible.
+ * `Symfony\Bridge\Monolog\Logger::crit()` was removed. Use `critical()` which is PSR-3 compatible.
+ * `Symfony\Bridge\Monolog\Logger::err()` was removed. Use `error()` which is PSR-3 compatible.
+ * `Symfony\Bridge\Monolog\Logger::warn()` was removed. Use `warning()` which is PSR-3 compatible.
diff --git a/composer.json b/composer.json
index 261d4b25c4629..eca6110d5cd47 100644
--- a/composer.json
+++ b/composer.json
@@ -87,7 +87,8 @@
"ocramius/proxy-manager": "~0.4|~1.0|~2.0",
"symfony/phpunit-bridge": "~3.2",
"egulias/email-validator": "~1.2,>=1.2.1",
- "phpdocumentor/reflection": "^1.0.7"
+ "phpdocumentor/reflection": "^1.0.7",
+ "sensio/framework-extra-bundle": "^3.0.2"
},
"conflict": {
"phpdocumentor/reflection": "<1.0.7"
@@ -109,6 +110,9 @@
"**/Tests/"
]
},
+ "autoload-dev": {
+ "files": [ "src/Symfony/Component/VarDumper/Resources/functions/dump.php" ]
+ },
"minimum-stability": "dev",
"extra": {
"branch-alias": {
diff --git a/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php b/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php
index dc26d95e4abe6..0ea21085febc9 100644
--- a/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php
+++ b/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php
@@ -247,6 +247,23 @@ public function testValidateUniquenessWithIgnoreNull()
->assertRaised();
}
+ /**
+ * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
+ */
+ public function testAllConfiguredFieldsAreCheckedOfBeingMappedByDoctrineWithIgnoreNullEnabled()
+ {
+ $constraint = new UniqueEntity(array(
+ 'message' => 'myMessage',
+ 'fields' => array('name', 'name2'),
+ 'em' => self::EM_NAME,
+ 'ignoreNull' => true,
+ ));
+
+ $entity1 = new SingleIntIdEntity(1, null);
+
+ $this->validator->validate($entity1, $constraint);
+ }
+
public function testValidateUniquenessWithValidCustomErrorPath()
{
$constraint = new UniqueEntity(array(
diff --git a/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php b/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php
index 94b40f980abc8..c20924132551a 100644
--- a/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php
+++ b/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php
@@ -85,12 +85,14 @@ public function validate($entity, Constraint $constraint)
throw new ConstraintDefinitionException(sprintf('The field "%s" is not mapped by Doctrine, so it cannot be validated for uniqueness.', $fieldName));
}
- $criteria[$fieldName] = $class->reflFields[$fieldName]->getValue($entity);
+ $fieldValue = $class->reflFields[$fieldName]->getValue($entity);
- if ($constraint->ignoreNull && null === $criteria[$fieldName]) {
- return;
+ if ($constraint->ignoreNull && null === $fieldValue) {
+ continue;
}
+ $criteria[$fieldName] = $fieldValue;
+
if (null !== $criteria[$fieldName] && $class->hasAssociation($fieldName)) {
/* Ensure the Proxy is initialized before using reflection to
* read its identifiers. This is necessary because the wrapped
@@ -100,6 +102,12 @@ public function validate($entity, Constraint $constraint)
}
}
+ // skip validation if there are no criteria (this can happen when the
+ // "ignoreNull" option is enabled and fields to be checked are null
+ if (empty($criteria)) {
+ return;
+ }
+
$repository = $em->getRepository(get_class($entity));
$result = $repository->{$constraint->repositoryMethod}($criteria);
diff --git a/src/Symfony/Bridge/PhpUnit/DeprecationErrorHandler.php b/src/Symfony/Bridge/PhpUnit/DeprecationErrorHandler.php
index 135628179ff33..6767d0cdc0ca4 100644
--- a/src/Symfony/Bridge/PhpUnit/DeprecationErrorHandler.php
+++ b/src/Symfony/Bridge/PhpUnit/DeprecationErrorHandler.php
@@ -140,7 +140,7 @@ public static function register($mode = 0)
return "\x1B[{$color}m{$str}\x1B[0m";
};
} else {
- $colorize = function ($str) {return $str;};
+ $colorize = function ($str) { return $str; };
}
register_shutdown_function(function () use ($getMode, &$deprecations, $deprecationHandler, $colorize) {
$mode = $getMode();
@@ -151,7 +151,7 @@ public static function register($mode = 0)
restore_error_handler();
if (DeprecationErrorHandler::MODE_WEAK === $mode) {
- $colorize = function ($str) {return $str;};
+ $colorize = function ($str) { return $str; };
}
if ($currErrorHandler !== $deprecationHandler) {
echo "\n", $colorize('THE ERROR HANDLER HAS CHANGED!', true), "\n";
diff --git a/src/Symfony/Bridge/ProxyManager/Tests/LazyProxy/Fixtures/php/lazy_service.php b/src/Symfony/Bridge/ProxyManager/Tests/LazyProxy/Fixtures/php/lazy_service.php
index fd58c19d818db..8971f655f4e3a 100644
--- a/src/Symfony/Bridge/ProxyManager/Tests/LazyProxy/Fixtures/php/lazy_service.php
+++ b/src/Symfony/Bridge/ProxyManager/Tests/LazyProxy/Fixtures/php/lazy_service.php
@@ -125,9 +125,6 @@ public function __unset($name)
unset($this->valueHolder5157dd96e88c0->$name);
}
- /**
- *
- */
public function __clone()
{
$this->initializer5157dd96e8924 && $this->initializer5157dd96e8924->__invoke($this->valueHolder5157dd96e88c0, $this, '__clone', array());
@@ -135,9 +132,6 @@ public function __clone()
$this->valueHolder5157dd96e88c0 = clone $this->valueHolder5157dd96e88c0;
}
- /**
- *
- */
public function __sleep()
{
$this->initializer5157dd96e8924 && $this->initializer5157dd96e8924->__invoke($this->valueHolder5157dd96e88c0, $this, '__sleep', array());
@@ -145,9 +139,6 @@ public function __sleep()
return array('valueHolder5157dd96e88c0');
}
- /**
- *
- */
public function __wakeup()
{
}
diff --git a/src/Symfony/Bridge/ProxyManager/Tests/LazyProxy/Fixtures/php/lazy_service_with_hints.php b/src/Symfony/Bridge/ProxyManager/Tests/LazyProxy/Fixtures/php/lazy_service_with_hints.php
index f57c4c6360ba3..06432127750fd 100644
--- a/src/Symfony/Bridge/ProxyManager/Tests/LazyProxy/Fixtures/php/lazy_service_with_hints.php
+++ b/src/Symfony/Bridge/ProxyManager/Tests/LazyProxy/Fixtures/php/lazy_service_with_hints.php
@@ -120,9 +120,6 @@ public function __unset($name)
unset($this->valueHolder5157dd96e88c0->$name);
}
- /**
- *
- */
public function __clone()
{
$this->initializer5157dd96e8924 && $this->initializer5157dd96e8924->__invoke($this->valueHolder5157dd96e88c0, $this, '__clone', array());
@@ -130,9 +127,6 @@ public function __clone()
$this->valueHolder5157dd96e88c0 = clone $this->valueHolder5157dd96e88c0;
}
- /**
- *
- */
public function __sleep()
{
$this->initializer5157dd96e8924 && $this->initializer5157dd96e8924->__invoke($this->valueHolder5157dd96e88c0, $this, '__sleep', array());
@@ -140,9 +134,6 @@ public function __sleep()
return array('valueHolder5157dd96e88c0');
}
- /**
- *
- */
public function __wakeup()
{
}
@@ -166,7 +157,7 @@ public function getProxyInitializer()
/**
* {@inheritdoc}
*/
- public function initializeProxy() : bool
+ public function initializeProxy(): bool
{
return $this->initializer5157dd96e8924 && $this->initializer5157dd96e8924->__invoke($this->valueHolder5157dd96e88c0, $this, 'initializeProxy', array());
}
@@ -174,7 +165,7 @@ public function initializeProxy() : bool
/**
* {@inheritdoc}
*/
- public function isProxyInitialized() : bool
+ public function isProxyInitialized(): bool
{
return null !== $this->valueHolder5157dd96e88c0;
}
diff --git a/src/Symfony/Bridge/Twig/Command/DebugCommand.php b/src/Symfony/Bridge/Twig/Command/DebugCommand.php
index 44e23902e03de..d871a682f0a4c 100644
--- a/src/Symfony/Bridge/Twig/Command/DebugCommand.php
+++ b/src/Symfony/Bridge/Twig/Command/DebugCommand.php
@@ -140,7 +140,7 @@ private function getMetadata($type, $entity)
}
if ($type === 'functions' || $type === 'filters') {
$cb = $entity->getCallable();
- if (is_null($cb)) {
+ if (null === $cb) {
return;
}
if (is_array($cb)) {
diff --git a/src/Symfony/Bridge/Twig/Tests/Extension/DumpExtensionTest.php b/src/Symfony/Bridge/Twig/Tests/Extension/DumpExtensionTest.php
index 0800ba8ea2608..604b0caaecc8b 100644
--- a/src/Symfony/Bridge/Twig/Tests/Extension/DumpExtensionTest.php
+++ b/src/Symfony/Bridge/Twig/Tests/Extension/DumpExtensionTest.php
@@ -32,7 +32,7 @@ public function testDumpTag($template, $debug, $expectedOutput, $expectedDumped)
$dumped = null;
$exception = null;
- $prevDumper = VarDumper::setHandler(function ($var) use (&$dumped) {$dumped = $var;});
+ $prevDumper = VarDumper::setHandler(function ($var) use (&$dumped) { $dumped = $var; });
try {
$this->assertEquals($expectedOutput, $twig->render('template'));
diff --git a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/JsonDescriptor.php b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/JsonDescriptor.php
index d22ebcd181785..a6167b9a48aa9 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/JsonDescriptor.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/JsonDescriptor.php
@@ -217,29 +217,18 @@ private function getContainerDefinitionData(Definition $definition, $omitTags =
'public' => $definition->isPublic(),
'synthetic' => $definition->isSynthetic(),
'lazy' => $definition->isLazy(),
+ 'shared' => $definition->isShared(),
+ 'synchronized' => $definition->isSynchronized(false),
+ 'abstract' => $definition->isAbstract(),
+ 'autowire' => $definition->isAutowired(),
+ 'autowiring_types' => array(),
+ 'file' => $definition->getFile(),
);
- if (method_exists($definition, 'isShared')) {
- $data['shared'] = $definition->isShared();
+ foreach ($definition->getAutowiringTypes() as $autowiringType) {
+ $data['autowiring_types'][] = $autowiringType;
}
- if (method_exists($definition, 'isSynchronized')) {
- $data['synchronized'] = $definition->isSynchronized(false);
- }
-
- $data['abstract'] = $definition->isAbstract();
-
- if (method_exists($definition, 'isAutowired')) {
- $data['autowire'] = $definition->isAutowired();
-
- $data['autowiring_types'] = array();
- foreach ($definition->getAutowiringTypes() as $autowiringType) {
- $data['autowiring_types'][] = $autowiringType;
- }
- }
-
- $data['file'] = $definition->getFile();
-
if ($definition->getFactoryClass(false)) {
$data['factory_class'] = $definition->getFactoryClass(false);
}
@@ -269,11 +258,9 @@ private function getContainerDefinitionData(Definition $definition, $omitTags =
if (!$omitTags) {
$data['tags'] = array();
- if (count($definition->getTags())) {
- foreach ($definition->getTags() as $tagName => $tagData) {
- foreach ($tagData as $parameters) {
- $data['tags'][] = array('name' => $tagName, 'parameters' => $parameters);
- }
+ foreach ($definition->getTags() as $tagName => $tagData) {
+ foreach ($tagData as $parameters) {
+ $data['tags'][] = array('name' => $tagName, 'parameters' => $parameters);
}
}
}
diff --git a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/MarkdownDescriptor.php b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/MarkdownDescriptor.php
index 209c01ed22bdd..d9d3278842eff 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/MarkdownDescriptor.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/MarkdownDescriptor.php
@@ -183,24 +183,14 @@ protected function describeContainerDefinition(Definition $definition, array $op
."\n".'- Public: '.($definition->isPublic() ? 'yes' : 'no')
."\n".'- Synthetic: '.($definition->isSynthetic() ? 'yes' : 'no')
."\n".'- Lazy: '.($definition->isLazy() ? 'yes' : 'no')
+ ."\n".'- Shared: '.($definition->isShared() ? 'yes' : 'no')
+ ."\n".'- Synchronized: '.($definition->isSynchronized(false) ? 'yes' : 'no')
+ ."\n".'- Abstract: '.($definition->isAbstract() ? 'yes' : 'no')
+ ."\n".'- Autowired: '.($definition->isAutowired() ? 'yes' : 'no')
;
- if (method_exists($definition, 'isShared')) {
- $output .= "\n".'- Shared: '.($definition->isShared() ? 'yes' : 'no');
- }
-
- if (method_exists($definition, 'isSynchronized')) {
- $output .= "\n".'- Synchronized: '.($definition->isSynchronized(false) ? 'yes' : 'no');
- }
-
- $output .= "\n".'- Abstract: '.($definition->isAbstract() ? 'yes' : 'no');
-
- if (method_exists($definition, 'isAutowired')) {
- $output .= "\n".'- Autowired: '.($definition->isAutowired() ? 'yes' : 'no');
-
- foreach ($definition->getAutowiringTypes() as $autowiringType) {
- $output .= "\n".'- Autowiring Type: `'.$autowiringType.'`';
- }
+ foreach ($definition->getAutowiringTypes() as $autowiringType) {
+ $output .= "\n".'- Autowiring Type: `'.$autowiringType.'`';
}
if ($definition->getFile()) {
@@ -245,7 +235,7 @@ protected function describeContainerDefinition(Definition $definition, array $op
}
}
- $this->write(isset($options['id']) ? sprintf("%s\n%s\n\n%s\n", $options['id'], str_repeat('~', strlen($options['id'])), $output) : $output);
+ $this->write(isset($options['id']) ? sprintf("### %s\n\n%s\n", $options['id'], $output) : $output);
}
/**
@@ -256,7 +246,7 @@ protected function describeContainerAlias(Alias $alias, array $options = array()
$output = '- Service: `'.$alias.'`'
."\n".'- Public: '.($alias->isPublic() ? 'yes' : 'no');
- $this->write(isset($options['id']) ? sprintf("%s\n%s\n\n%s\n", $options['id'], str_repeat('~', strlen($options['id'])), $output) : $output);
+ $this->write(isset($options['id']) ? sprintf("### %s\n\n%s\n", $options['id'], $output) : $output);
}
/**
@@ -371,7 +361,7 @@ protected function describeCallable($callable, array $options = array())
*/
private function formatRouterConfig(array $array)
{
- if (!count($array)) {
+ if (!$array) {
return 'NONE';
}
diff --git a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/TextDescriptor.php b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/TextDescriptor.php
index 4aa00a85dbb17..1b35f8c565fff 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/TextDescriptor.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/TextDescriptor.php
@@ -255,8 +255,7 @@ protected function describeContainerDefinition(Definition $definition, array $op
$tableRows[] = array('Service ID', isset($options['id']) ? $options['id'] : '-');
$tableRows[] = array('Class', $definition->getClass() ?: '-');
- $tags = $definition->getTags();
- if (count($tags)) {
+ if ($tags = $definition->getTags()) {
$tagInformation = '';
foreach ($tags as $tagName => $tagData) {
foreach ($tagData as $tagParameters) {
@@ -281,24 +280,12 @@ protected function describeContainerDefinition(Definition $definition, array $op
$tableRows[] = array('Public', $definition->isPublic() ? 'yes' : 'no');
$tableRows[] = array('Synthetic', $definition->isSynthetic() ? 'yes' : 'no');
$tableRows[] = array('Lazy', $definition->isLazy() ? 'yes' : 'no');
-
- if (method_exists($definition, 'isSynchronized')) {
- $tableRows[] = array('Synchronized', $definition->isSynchronized(false) ? 'yes' : 'no');
- }
+ $tableRows[] = array('Synchronized', $definition->isSynchronized(false) ? 'yes' : 'no');
$tableRows[] = array('Abstract', $definition->isAbstract() ? 'yes' : 'no');
+ $tableRows[] = array('Autowired', $definition->isAutowired() ? 'yes' : 'no');
- if (method_exists($definition, 'isAutowired')) {
- $tableRows[] = array('Autowired', $definition->isAutowired() ? 'yes' : 'no');
-
- $autowiringTypes = $definition->getAutowiringTypes();
- if (count($autowiringTypes)) {
- $autowiringTypesInformation = implode(', ', $autowiringTypes);
- } else {
- $autowiringTypesInformation = '-';
- }
-
- $tableRows[] = array('Autowiring Types', $autowiringTypesInformation);
- }
+ $autowiringTypes = $definition->getAutowiringTypes();
+ $tableRows[] = array('Autowiring Types', $autowiringTypes ? implode(', ', $autowiringTypes) : '-');
if ($definition->getFile()) {
$tableRows[] = array('Required File', $definition->getFile() ? $definition->getFile() : '-');
diff --git a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/XmlDescriptor.php b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/XmlDescriptor.php
index 62fb688e3c06f..0f0533573d4c7 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/XmlDescriptor.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/XmlDescriptor.php
@@ -187,7 +187,7 @@ private function getRouteDocument(Route $route, $name = null)
$methodXML->appendChild(new \DOMText($method));
}
- if (count($route->getDefaults())) {
+ if ($route->getDefaults()) {
$routeXML->appendChild($defaultsXML = $dom->createElement('defaults'));
foreach ($route->getDefaults() as $attribute => $value) {
$defaultsXML->appendChild($defaultXML = $dom->createElement('default'));
@@ -198,7 +198,7 @@ private function getRouteDocument(Route $route, $name = null)
$requirements = $route->getRequirements();
unset($requirements['_scheme'], $requirements['_method']);
- if (count($requirements)) {
+ if ($requirements) {
$routeXML->appendChild($requirementsXML = $dom->createElement('requirements'));
foreach ($requirements as $attribute => $pattern) {
$requirementsXML->appendChild($requirementXML = $dom->createElement('requirement'));
@@ -207,7 +207,7 @@ private function getRouteDocument(Route $route, $name = null)
}
}
- if (count($route->getOptions())) {
+ if ($route->getOptions()) {
$routeXML->appendChild($optionsXML = $dom->createElement('options'));
foreach ($route->getOptions() as $name => $value) {
$optionsXML->appendChild($optionXML = $dom->createElement('option'));
@@ -331,18 +331,16 @@ private function getContainerDefinitionDocument(Definition $definition, $id = nu
$serviceXML->setAttribute('class', $definition->getClass());
- if (method_exists($definition, 'getFactoryMethod')) {
- if ($definition->getFactoryClass(false)) {
- $serviceXML->setAttribute('factory-class', $definition->getFactoryClass(false));
- }
+ if ($definition->getFactoryClass(false)) {
+ $serviceXML->setAttribute('factory-class', $definition->getFactoryClass(false));
+ }
- if ($definition->getFactoryService(false)) {
- $serviceXML->setAttribute('factory-service', $definition->getFactoryService(false));
- }
+ if ($definition->getFactoryService(false)) {
+ $serviceXML->setAttribute('factory-service', $definition->getFactoryService(false));
+ }
- if ($definition->getFactoryMethod(false)) {
- $serviceXML->setAttribute('factory-method', $definition->getFactoryMethod(false));
- }
+ if ($definition->getFactoryMethod(false)) {
+ $serviceXML->setAttribute('factory-method', $definition->getFactoryMethod(false));
}
if ($factory = $definition->getFactory()) {
@@ -366,24 +364,14 @@ private function getContainerDefinitionDocument(Definition $definition, $id = nu
$serviceXML->setAttribute('public', $definition->isPublic() ? 'true' : 'false');
$serviceXML->setAttribute('synthetic', $definition->isSynthetic() ? 'true' : 'false');
$serviceXML->setAttribute('lazy', $definition->isLazy() ? 'true' : 'false');
- if (method_exists($definition, 'isShared')) {
- $serviceXML->setAttribute('shared', $definition->isShared() ? 'true' : 'false');
- }
- if (method_exists($definition, 'isSynchronized')) {
- $serviceXML->setAttribute('synchronized', $definition->isSynchronized(false) ? 'true' : 'false');
- }
+ $serviceXML->setAttribute('shared', $definition->isShared() ? 'true' : 'false');
+ $serviceXML->setAttribute('synchronized', $definition->isSynchronized(false) ? 'true' : 'false');
$serviceXML->setAttribute('abstract', $definition->isAbstract() ? 'true' : 'false');
-
- if (method_exists($definition, 'isAutowired')) {
- $serviceXML->setAttribute('autowired', $definition->isAutowired() ? 'true' : 'false');
- }
-
+ $serviceXML->setAttribute('autowired', $definition->isAutowired() ? 'true' : 'false');
$serviceXML->setAttribute('file', $definition->getFile());
if (!$omitTags) {
- $tags = $definition->getTags();
-
- if (count($tags) > 0) {
+ if ($tags = $definition->getTags()) {
$serviceXML->appendChild($tagsXML = $dom->createElement('tags'));
foreach ($tags as $tagName => $tagData) {
foreach ($tagData as $parameters) {
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/property_info.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/property_info.xml
index 33a0a661f8991..8f6a7c9e31bed 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/property_info.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/property_info.xml
@@ -15,7 +15,7 @@
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php
index e5a8ba1883e47..cee5fbed8d5ad 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php
@@ -326,6 +326,10 @@ public function testAnnotations()
public function testFileLinkFormat()
{
+ if (ini_get('xdebug.file_link_format') || get_cfg_var('xdebug.file_link_format')) {
+ $this->markTestSkipped('A custom file_link_format is defined.');
+ }
+
$container = $this->createContainerFromFile('full');
$this->assertEquals('file%link%format', $container->getParameter('templating.helper.code.file_link_format'));
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_1_public.json b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_1_public.json
index 83a446d7fd91e..4ce716e640d2e 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_1_public.json
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_1_public.json
@@ -9,14 +9,12 @@
"shared": true,
"synchronized": false,
"abstract": true,
+ "autowire": false,
+ "autowiring_types": [],
"file": null,
"factory_class": "Full\\Qualified\\FactoryClass",
"factory_method": "get",
- "tags": [
-
- ],
- "autowire": false,
- "autowiring_types": []
+ "tags": []
}
},
"aliases": {
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_1_public.md b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_1_public.md
index 1a69d2d30cbfd..b2879c150f941 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_1_public.md
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_1_public.md
@@ -4,8 +4,7 @@ Public services
Definitions
-----------
-definition_1
-~~~~~~~~~~~~
+### definition_1
- Class: `Full\Qualified\Class1`
- Scope: `container`
@@ -23,14 +22,12 @@ definition_1
Aliases
-------
-alias_1
-~~~~~~~
+### alias_1
- Service: `service_1`
- Public: yes
-alias_2
-~~~~~~~
+### alias_2
- Service: `service_2`
- Public: no
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_1_services.json b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_1_services.json
index d64db5253405c..e979c42f041cc 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_1_services.json
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_1_services.json
@@ -9,14 +9,12 @@
"shared": true,
"synchronized": false,
"abstract": true,
+ "autowire": false,
+ "autowiring_types": [],
"file": null,
"factory_class": "Full\\Qualified\\FactoryClass",
"factory_method": "get",
- "tags": [
-
- ],
- "autowire": false,
- "autowiring_types": []
+ "tags": []
},
"definition_2": {
"class": "Full\\Qualified\\Class2",
@@ -27,6 +25,8 @@
"shared": true,
"synchronized": false,
"abstract": false,
+ "autowire": false,
+ "autowiring_types": [],
"file": "\/path\/to\/file",
"factory_service": "factory.service",
"factory_method": "get",
@@ -46,13 +46,9 @@
},
{
"name": "tag2",
- "parameters": [
-
- ]
+ "parameters": []
}
- ],
- "autowire": false,
- "autowiring_types": []
+ ]
}
},
"aliases": {
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_1_services.md b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_1_services.md
index f4599d941b8b5..ba24c9a01d3ac 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_1_services.md
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_1_services.md
@@ -4,8 +4,7 @@ Public and private services
Definitions
-----------
-definition_1
-~~~~~~~~~~~~
+### definition_1
- Class: `Full\Qualified\Class1`
- Scope: `container`
@@ -19,8 +18,7 @@ definition_1
- Factory Class: `Full\Qualified\FactoryClass`
- Factory Method: `get`
-definition_2
-~~~~~~~~~~~~
+### definition_2
- Class: `Full\Qualified\Class2`
- Scope: `container`
@@ -45,14 +43,12 @@ definition_2
Aliases
-------
-alias_1
-~~~~~~~
+### alias_1
- Service: `service_1`
- Public: yes
-alias_2
-~~~~~~~
+### alias_2
- Service: `service_2`
- Public: no
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_1_tag1.json b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_1_tag1.json
index 333f3ee670c00..e0aa26b6708c6 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_1_tag1.json
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_1_tag1.json
@@ -9,6 +9,8 @@
"shared": true,
"synchronized": false,
"abstract": false,
+ "autowire": false,
+ "autowiring_types": [],
"file": "\/path\/to\/file",
"factory_service": "factory.service",
"factory_method": "get",
@@ -28,19 +30,11 @@
},
{
"name": "tag2",
- "parameters": [
-
- ]
+ "parameters": []
}
- ],
- "autowire": false,
- "autowiring_types": []
+ ]
}
},
- "aliases": [
-
- ],
- "services": [
-
- ]
+ "aliases": [],
+ "services": []
}
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_1_tag1.md b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_1_tag1.md
index 0dbe5226914eb..9cda082852ac9 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_1_tag1.md
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_1_tag1.md
@@ -4,8 +4,7 @@ Public and private services with tag `tag1`
Definitions
-----------
-definition_2
-~~~~~~~~~~~~
+### definition_2
- Class: `Full\Qualified\Class2`
- Scope: `container`
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_1_tags.json b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_1_tags.json
index b1b1fa81485a9..736b099f7d430 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_1_tags.json
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_1_tags.json
@@ -9,11 +9,11 @@
"shared": true,
"synchronized": false,
"abstract": false,
+ "autowire": false,
+ "autowiring_types": [],
"file": "\/path\/to\/file",
"factory_service": "factory.service",
- "factory_method": "get",
- "autowire": false,
- "autowiring_types": []
+ "factory_method": "get"
}
],
"tag2": [
@@ -26,11 +26,11 @@
"shared": true,
"synchronized": false,
"abstract": false,
+ "autowire": false,
+ "autowiring_types": [],
"file": "\/path\/to\/file",
"factory_service": "factory.service",
- "factory_method": "get",
- "autowire": false,
- "autowiring_types": []
+ "factory_method": "get"
}
]
}
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_1_tags.md b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_1_tags.md
index 5480cb15d53d9..7372687a41963 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_1_tags.md
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_1_tags.md
@@ -4,8 +4,7 @@ Container tags
tag1
----
-definition_2
-~~~~~~~~~~~~
+### definition_2
- Class: `Full\Qualified\Class2`
- Scope: `container`
@@ -24,8 +23,7 @@ definition_2
tag2
----
-definition_2
-~~~~~~~~~~~~
+### definition_2
- Class: `Full\Qualified\Class2`
- Scope: `container`
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/definition_1.json b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/definition_1.json
index 888c5acaf5605..0056b4353abf3 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/definition_1.json
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/definition_1.json
@@ -7,12 +7,10 @@
"shared": true,
"synchronized": false,
"abstract": true,
+ "autowire": false,
+ "autowiring_types": [],
"file": null,
"factory_class": "Full\\Qualified\\FactoryClass",
"factory_method": "get",
- "tags": [
-
- ],
- "autowire": false,
- "autowiring_types": []
+ "tags": []
}
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/definition_2.json b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/definition_2.json
index 9886aba3d5c91..1b465f270e2e9 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/definition_2.json
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/definition_2.json
@@ -7,6 +7,8 @@
"shared": true,
"synchronized": false,
"abstract": false,
+ "autowire": false,
+ "autowiring_types": [],
"file": "\/path\/to\/file",
"factory_service": "factory.service",
"factory_method": "get",
@@ -26,11 +28,7 @@
},
{
"name": "tag2",
- "parameters": [
-
- ]
+ "parameters": []
}
- ],
- "autowire": false,
- "autowiring_types": []
+ ]
}
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/legacy_synchronized_service_definition_1.json b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/legacy_synchronized_service_definition_1.json
index 59036bce0d6ed..730b81f3a87d0 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/legacy_synchronized_service_definition_1.json
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/legacy_synchronized_service_definition_1.json
@@ -1,18 +1,16 @@
{
- "class": "Full\\Qualified\\Class1",
- "scope": "container",
- "public": true,
- "synthetic": false,
- "lazy": true,
- "shared": true,
- "synchronized": true,
- "abstract": true,
- "file": null,
- "factory_class": "Full\\Qualified\\FactoryClass",
- "factory_method": "get",
- "tags": [
-
- ],
- "autowire": false,
- "autowiring_types": []
+ "class": "Full\\Qualified\\Class1",
+ "scope": "container",
+ "public": true,
+ "synthetic": false,
+ "lazy": true,
+ "shared": true,
+ "synchronized": true,
+ "abstract": true,
+ "autowire": false,
+ "autowiring_types": [],
+ "file": null,
+ "factory_class": "Full\\Qualified\\FactoryClass",
+ "factory_method": "get",
+ "tags": []
}
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/legacy_synchronized_service_definition_2.json b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/legacy_synchronized_service_definition_2.json
index d2ece6baa3a52..1b465f270e2e9 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/legacy_synchronized_service_definition_2.json
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/legacy_synchronized_service_definition_2.json
@@ -1,36 +1,34 @@
{
- "class": "Full\\Qualified\\Class2",
- "scope": "container",
- "public": false,
- "synthetic": true,
- "lazy": false,
- "shared": true,
- "synchronized": false,
- "abstract": false,
- "file": "\/path\/to\/file",
- "factory_service": "factory.service",
- "factory_method": "get",
- "tags": [
- {
- "name": "tag1",
- "parameters": {
- "attr1": "val1",
- "attr2": "val2"
- }
- },
- {
- "name": "tag1",
- "parameters": {
- "attr3": "val3"
- }
- },
- {
- "name": "tag2",
- "parameters": [
-
- ]
- }
- ],
- "autowire": false,
- "autowiring_types": []
+ "class": "Full\\Qualified\\Class2",
+ "scope": "container",
+ "public": false,
+ "synthetic": true,
+ "lazy": false,
+ "shared": true,
+ "synchronized": false,
+ "abstract": false,
+ "autowire": false,
+ "autowiring_types": [],
+ "file": "\/path\/to\/file",
+ "factory_service": "factory.service",
+ "factory_method": "get",
+ "tags": [
+ {
+ "name": "tag1",
+ "parameters": {
+ "attr1": "val1",
+ "attr2": "val2"
+ }
+ },
+ {
+ "name": "tag1",
+ "parameters": {
+ "attr3": "val3"
+ }
+ },
+ {
+ "name": "tag2",
+ "parameters": []
+ }
+ ]
}
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/route_2.json b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/route_2.json
index d34b3a77aec6e..58caf26d537e7 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/route_2.json
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/route_2.json
@@ -6,9 +6,7 @@
"scheme": "http|https",
"method": "PUT|POST",
"class": "Symfony\\Component\\Routing\\Route",
- "defaults": [
-
- ],
+ "defaults": [],
"requirements": "NO CUSTOM",
"options": {
"compiler_class": "Symfony\\Component\\Routing\\RouteCompiler",
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/route_collection_1.json b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/route_collection_1.json
index 7170953f5fee7..350bffdb3a9c7 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/route_collection_1.json
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/route_collection_1.json
@@ -27,9 +27,7 @@
"scheme": "http|https",
"method": "PUT|POST",
"class": "Symfony\\Component\\Routing\\Route",
- "defaults": [
-
- ],
+ "defaults": [],
"requirements": "NO CUSTOM",
"options": {
"compiler_class": "Symfony\\Component\\Routing\\RouteCompiler",
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Resources/views/translation.html.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Resources/views/translation.html.php
index c0ae6ec5c6604..cb3c763f8f3c8 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Resources/views/translation.html.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Resources/views/translation.html.php
@@ -31,3 +31,19 @@
10,
array('%count%' => 10)
) ?>
+
+trans('other-domain-test-no-params-short-array', [], 'not_messages'); ?>
+
+trans('other-domain-test-no-params-long-array', array(), 'not_messages'); ?>
+
+trans('other-domain-test-params-short-array', ['foo' => 'bar'], 'not_messages'); ?>
+
+trans('other-domain-test-params-long-array', array('foo' => 'bar'), 'not_messages'); ?>
+
+transChoice('other-domain-test-trans-choice-short-array-%count%', 10, ['%count%' => 10], 'not_messages'); ?>
+
+transChoice('other-domain-test-trans-choice-long-array-%count%', 10, array('%count%' => 10), 'not_messages'); ?>
+
+trans('typecast', ['a' => (int) '123'], 'not_messages'); ?>
+transChoice('msg1', 10 + 1, [], 'not_messages'); ?>
+transChoice('msg2', intval(4.5), [], 'not_messages'); ?>
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/AnnotatedControllerTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/AnnotatedControllerTest.php
new file mode 100644
index 0000000000000..2fdbef8839496
--- /dev/null
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/AnnotatedControllerTest.php
@@ -0,0 +1,39 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Bundle\FrameworkBundle\Tests\Functional;
+
+class AnnotatedControllerTest extends WebTestCase
+{
+ /**
+ * @dataProvider getRoutes
+ */
+ public function testAnnotatedController($path, $expectedValue)
+ {
+ $client = $this->createClient(array('test_case' => 'AnnotatedController', 'root_config' => 'config.yml'));
+ $client->request('GET', '/annotated'.$path);
+
+ $this->assertSame(200, $client->getResponse()->getStatusCode());
+ $this->assertSame($expectedValue, $client->getResponse()->getContent());
+ }
+
+ public function getRoutes()
+ {
+ return array(
+ array('/null_request', 'Symfony\Component\HttpFoundation\Request'),
+ array('/null_argument', ''),
+ array('/null_argument_with_route_param', ''),
+ array('/null_argument_with_route_param/value', 'value'),
+ array('/argument_with_route_param_and_default', 'value'),
+ array('/argument_with_route_param_and_default/custom', 'custom'),
+ );
+ }
+}
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/Bundle/TestBundle/Controller/AnnotatedController.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/Bundle/TestBundle/Controller/AnnotatedController.php
new file mode 100644
index 0000000000000..98a3ace982e33
--- /dev/null
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/Bundle/TestBundle/Controller/AnnotatedController.php
@@ -0,0 +1,51 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Bundle\FrameworkBundle\Tests\Functional\Bundle\TestBundle\Controller;
+
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\Response;
+use Symfony\Component\Routing\Annotation\Route;
+
+class AnnotatedController
+{
+ /**
+ * @Route("/null_request", name="null_request")
+ */
+ public function requestDefaultNullAction(Request $request = null)
+ {
+ return new Response($request ? get_class($request) : null);
+ }
+
+ /**
+ * @Route("/null_argument", name="null_argument")
+ */
+ public function argumentDefaultNullWithoutRouteParamAction($value = null)
+ {
+ return new Response($value);
+ }
+
+ /**
+ * @Route("/null_argument_with_route_param/{value}", name="null_argument_with_route_param")
+ */
+ public function argumentDefaultNullWithRouteParamAction($value = null)
+ {
+ return new Response($value);
+ }
+
+ /**
+ * @Route("/argument_with_route_param_and_default/{value}", defaults={"value": "value"}, name="argument_with_route_param_and_default")
+ */
+ public function argumentWithoutDefaultWithRouteParamAndDefaultAction($value)
+ {
+ return new Response($value);
+ }
+}
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/PropertyInfoTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/PropertyInfoTest.php
new file mode 100644
index 0000000000000..c02a6b84e519c
--- /dev/null
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/PropertyInfoTest.php
@@ -0,0 +1,35 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Bundle\FrameworkBundle\Tests\Functional;
+
+use Symfony\Component\PropertyInfo\Type;
+
+class PropertyInfoTest extends WebTestCase
+{
+ public function testPhpDocPriority()
+ {
+ static::bootKernel(array('test_case' => 'Serializer'));
+ $container = static::$kernel->getContainer();
+
+ $this->assertEquals(array(new Type(Type::BUILTIN_TYPE_ARRAY, false, null, true, new Type(Type::BUILTIN_TYPE_INT), new Type(Type::BUILTIN_TYPE_INT))), $container->get('property_info')->getTypes('Symfony\Bundle\FrameworkBundle\Tests\Functional\Dummy', 'codes'));
+ }
+}
+
+class Dummy
+{
+ /**
+ * @param int[] $codes
+ */
+ public function setCodes(array $codes)
+ {
+ }
+}
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/AnnotatedController/bundles.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/AnnotatedController/bundles.php
new file mode 100644
index 0000000000000..f3290d7728541
--- /dev/null
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/AnnotatedController/bundles.php
@@ -0,0 +1,20 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+use Symfony\Bundle\FrameworkBundle\Tests\Functional\Bundle\TestBundle\TestBundle;
+use Symfony\Bundle\FrameworkBundle\FrameworkBundle;
+use Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle;
+
+return array(
+ new FrameworkBundle(),
+ new TestBundle(),
+ new SensioFrameworkExtraBundle(),
+);
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/AnnotatedController/config.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/AnnotatedController/config.yml
new file mode 100644
index 0000000000000..377d3e7852064
--- /dev/null
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/AnnotatedController/config.yml
@@ -0,0 +1,2 @@
+imports:
+ - { resource: ../config/default.yml }
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/AnnotatedController/routing.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/AnnotatedController/routing.yml
new file mode 100644
index 0000000000000..ebd18a0a4c282
--- /dev/null
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/AnnotatedController/routing.yml
@@ -0,0 +1,4 @@
+annotated_controller:
+ prefix: /annotated
+ resource: "@TestBundle/Controller/AnnotatedController.php"
+ type: annotation
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Serializer/bundles.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Serializer/bundles.php
new file mode 100644
index 0000000000000..144db90236034
--- /dev/null
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Serializer/bundles.php
@@ -0,0 +1,16 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+use Symfony\Bundle\FrameworkBundle\FrameworkBundle;
+
+return array(
+ new FrameworkBundle(),
+);
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Serializer/config.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Serializer/config.yml
new file mode 100644
index 0000000000000..cac135c315d00
--- /dev/null
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Serializer/config.yml
@@ -0,0 +1,6 @@
+imports:
+ - { resource: ../config/default.yml }
+
+framework:
+ serializer: { enabled: true }
+ property_info: { enabled: true }
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Translation/PhpExtractorTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Translation/PhpExtractorTest.php
index 420d2f2d71dd3..e8c56ee4d5e52 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/Translation/PhpExtractorTest.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Translation/PhpExtractorTest.php
@@ -39,18 +39,31 @@ public function testExtraction($resource)
nowdoc key with whitespace and nonescaped \$\n sequences
EOF;
// Assert
- $expectedCatalogue = array('messages' => array(
- 'single-quoted key' => 'prefixsingle-quoted key',
- 'double-quoted key' => 'prefixdouble-quoted key',
- 'heredoc key' => 'prefixheredoc key',
- 'nowdoc key' => 'prefixnowdoc key',
- "double-quoted key with whitespace and escaped \$\n\" sequences" => "prefixdouble-quoted key with whitespace and escaped \$\n\" sequences",
- 'single-quoted key with whitespace and nonescaped \$\n\' sequences' => 'prefixsingle-quoted key with whitespace and nonescaped \$\n\' sequences',
- 'single-quoted key with "quote mark at the end"' => 'prefixsingle-quoted key with "quote mark at the end"',
- $expectedHeredoc => 'prefix'.$expectedHeredoc,
- $expectedNowdoc => 'prefix'.$expectedNowdoc,
- '{0} There is no apples|{1} There is one apple|]1,Inf[ There are %count% apples' => 'prefix{0} There is no apples|{1} There is one apple|]1,Inf[ There are %count% apples',
- ));
+ $expectedCatalogue = array(
+ 'messages' => array(
+ 'single-quoted key' => 'prefixsingle-quoted key',
+ 'double-quoted key' => 'prefixdouble-quoted key',
+ 'heredoc key' => 'prefixheredoc key',
+ 'nowdoc key' => 'prefixnowdoc key',
+ "double-quoted key with whitespace and escaped \$\n\" sequences" => "prefixdouble-quoted key with whitespace and escaped \$\n\" sequences",
+ 'single-quoted key with whitespace and nonescaped \$\n\' sequences' => 'prefixsingle-quoted key with whitespace and nonescaped \$\n\' sequences',
+ 'single-quoted key with "quote mark at the end"' => 'prefixsingle-quoted key with "quote mark at the end"',
+ $expectedHeredoc => 'prefix'.$expectedHeredoc,
+ $expectedNowdoc => 'prefix'.$expectedNowdoc,
+ '{0} There is no apples|{1} There is one apple|]1,Inf[ There are %count% apples' => 'prefix{0} There is no apples|{1} There is one apple|]1,Inf[ There are %count% apples',
+ ),
+ 'not_messages' => array(
+ 'other-domain-test-no-params-short-array' => 'prefixother-domain-test-no-params-short-array',
+ 'other-domain-test-no-params-long-array' => 'prefixother-domain-test-no-params-long-array',
+ 'other-domain-test-params-short-array' => 'prefixother-domain-test-params-short-array',
+ 'other-domain-test-params-long-array' => 'prefixother-domain-test-params-long-array',
+ 'other-domain-test-trans-choice-short-array-%count%' => 'prefixother-domain-test-trans-choice-short-array-%count%',
+ 'other-domain-test-trans-choice-long-array-%count%' => 'prefixother-domain-test-trans-choice-long-array-%count%',
+ 'typecast' => 'prefixtypecast',
+ 'msg1' => 'prefixmsg1',
+ 'msg2' => 'prefixmsg2',
+ ),
+ );
$actualCatalogue = $catalogue->all();
$this->assertEquals($expectedCatalogue, $actualCatalogue);
diff --git a/src/Symfony/Bundle/FrameworkBundle/Translation/PhpExtractor.php b/src/Symfony/Bundle/FrameworkBundle/Translation/PhpExtractor.php
index cf7f3c5769bf2..97c94fdd14bf9 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Translation/PhpExtractor.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Translation/PhpExtractor.php
@@ -24,6 +24,8 @@
class PhpExtractor extends AbstractFileExtractor implements ExtractorInterface
{
const MESSAGE_TOKEN = 300;
+ const METHOD_ARGUMENTS_TOKEN = 1000;
+ const DOMAIN_TOKEN = 1001;
/**
* Prefix for new found message.
@@ -38,6 +40,28 @@ class PhpExtractor extends AbstractFileExtractor implements ExtractorInterface
* @var array
*/
protected $sequences = array(
+ array(
+ '->',
+ 'trans',
+ '(',
+ self::MESSAGE_TOKEN,
+ ',',
+ self::METHOD_ARGUMENTS_TOKEN,
+ ',',
+ self::DOMAIN_TOKEN,
+ ),
+ array(
+ '->',
+ 'transChoice',
+ '(',
+ self::MESSAGE_TOKEN,
+ ',',
+ self::METHOD_ARGUMENTS_TOKEN,
+ ',',
+ self::METHOD_ARGUMENTS_TOKEN,
+ ',',
+ self::DOMAIN_TOKEN,
+ ),
array(
'->',
'trans',
@@ -105,11 +129,32 @@ private function seekToNextRelevantToken(\Iterator $tokenIterator)
}
}
+ private function skipMethodArgument(\Iterator $tokenIterator)
+ {
+ $openBraces = 0;
+
+ for (; $tokenIterator->valid(); $tokenIterator->next()) {
+ $t = $tokenIterator->current();
+
+ if ('[' === $t[0] || '(' === $t[0]) {
+ ++$openBraces;
+ }
+
+ if (']' === $t[0] || ')' === $t[0]) {
+ --$openBraces;
+ }
+
+ if ((0 === $openBraces && ',' === $t[0]) || (-1 === $openBraces && ')' === $t[0])) {
+ break;
+ }
+ }
+ }
+
/**
* Extracts the message from the iterator while the tokens
* match allowed message tokens.
*/
- private function getMessage(\Iterator $tokenIterator)
+ private function getValue(\Iterator $tokenIterator)
{
$message = '';
$docToken = '';
@@ -155,16 +200,26 @@ protected function parseTokens($tokens, MessageCatalogue $catalog)
for ($key = 0; $key < $tokenIterator->count(); ++$key) {
foreach ($this->sequences as $sequence) {
$message = '';
+ $domain = 'messages';
$tokenIterator->seek($key);
- foreach ($sequence as $item) {
+ foreach ($sequence as $sequenceKey => $item) {
$this->seekToNextRelevantToken($tokenIterator);
- if ($this->normalizeToken($tokenIterator->current()) == $item) {
+ if ($this->normalizeToken($tokenIterator->current()) === $item) {
$tokenIterator->next();
continue;
- } elseif (self::MESSAGE_TOKEN == $item) {
- $message = $this->getMessage($tokenIterator);
+ } elseif (self::MESSAGE_TOKEN === $item) {
+ $message = $this->getValue($tokenIterator);
+
+ if (count($sequence) === ($sequenceKey + 1)) {
+ break;
+ }
+ } elseif (self::METHOD_ARGUMENTS_TOKEN === $item) {
+ $this->skipMethodArgument($tokenIterator);
+ } elseif (self::DOMAIN_TOKEN === $item) {
+ $domain = $this->getValue($tokenIterator);
+
break;
} else {
break;
@@ -172,7 +227,7 @@ protected function parseTokens($tokens, MessageCatalogue $catalog)
}
if ($message) {
- $catalog->set($message, $this->prefix.$message);
+ $catalog->set($message, $this->prefix.$message, $domain);
break;
}
}
diff --git a/src/Symfony/Bundle/FrameworkBundle/composer.json b/src/Symfony/Bundle/FrameworkBundle/composer.json
index 1d8ce3d462fa7..267985e1158f9 100644
--- a/src/Symfony/Bundle/FrameworkBundle/composer.json
+++ b/src/Symfony/Bundle/FrameworkBundle/composer.json
@@ -27,7 +27,7 @@
"symfony/http-kernel": "~2.8.16",
"symfony/polyfill-mbstring": "~1.0",
"symfony/filesystem": "~2.3|~3.0.0",
- "symfony/routing": "~2.8|~3.0.0",
+ "symfony/routing": "~2.8.17",
"symfony/security-core": "~2.6.13|~2.7.9|~2.8|~3.0.0",
"symfony/security-csrf": "~2.6|~3.0.0",
"symfony/stopwatch": "~2.3|~3.0.0",
@@ -50,7 +50,8 @@
"symfony/yaml": "~2.0,>=2.0.5|~3.0.0",
"symfony/property-info": "~2.8|~3.0.0",
"phpdocumentor/reflection": "^1.0.7",
- "twig/twig": "~1.23|~2.0"
+ "twig/twig": "~1.23|~2.0",
+ "sensio/framework-extra-bundle": "^3.0.2"
},
"suggest": {
"symfony/console": "For using the console commands",
diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/MainConfiguration.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/MainConfiguration.php
index 55f09c48373b5..1fe40dc124aeb 100644
--- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/MainConfiguration.php
+++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/MainConfiguration.php
@@ -413,11 +413,11 @@ private function addProvidersSection(ArrayNodeDefinition $rootNode)
$providerNodeBuilder
->validate()
- ->ifTrue(function ($v) {return count($v) > 1;})
+ ->ifTrue(function ($v) { return count($v) > 1; })
->thenInvalid('You cannot set multiple provider types for the same provider')
->end()
->validate()
- ->ifTrue(function ($v) {return count($v) === 0;})
+ ->ifTrue(function ($v) { return count($v) === 0; })
->thenInvalid('You must set a provider definition for the provider.')
->end()
;
diff --git a/src/Symfony/Bundle/TwigBundle/DependencyInjection/Compiler/ExtensionPass.php b/src/Symfony/Bundle/TwigBundle/DependencyInjection/Compiler/ExtensionPass.php
index 36cea3d0fed1a..ab9479e46166a 100644
--- a/src/Symfony/Bundle/TwigBundle/DependencyInjection/Compiler/ExtensionPass.php
+++ b/src/Symfony/Bundle/TwigBundle/DependencyInjection/Compiler/ExtensionPass.php
@@ -91,7 +91,7 @@ public function process(ContainerBuilder $container)
$twigLoader = $container->getDefinition('twig.loader.native_filesystem');
if ($container->has('templating')) {
$loader = $container->getDefinition('twig.loader.filesystem');
- $loader->setMethodCalls($twigLoader->getMethodCalls());
+ $loader->setMethodCalls(array_merge($twigLoader->getMethodCalls(), $loader->getMethodCalls()));
$twigLoader->clearTag('twig.loader');
} else {
diff --git a/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Compiler/ExtensionPassTest.php b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Compiler/ExtensionPassTest.php
new file mode 100644
index 0000000000000..587801d8db622
--- /dev/null
+++ b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Compiler/ExtensionPassTest.php
@@ -0,0 +1,41 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Bundle\TwigBundle\Tests\DependencyInjection\Compiler;
+
+use Symfony\Bundle\TwigBundle\DependencyInjection\Compiler\ExtensionPass;
+use Symfony\Component\DependencyInjection\ContainerBuilder;
+use Symfony\Component\DependencyInjection\Definition;
+
+class ExtensionPassTest extends \PHPUnit_Framework_TestCase
+{
+ public function testProcessDoesNotDropExistingFileLoaderMethodCalls()
+ {
+ $container = new ContainerBuilder();
+ $container->setParameter('kernel.debug', false);
+
+ $container->register('twig.app_variable', '\Symfony\Bridge\Twig\AppVariable');
+ $container->register('templating', '\Symfony\Bundle\TwigBundle\TwigEngine');
+
+ $nativeTwigLoader = new Definition('\Twig_Loader_Filesystem');
+ $nativeTwigLoader->addMethodCall('addPath', array());
+ $container->setDefinition('twig.loader.native_filesystem', $nativeTwigLoader);
+
+ $filesystemLoader = new Definition('\Symfony\Bundle\TwigBundle\Loader\FilesystemLoader');
+ $filesystemLoader->addMethodCall('addPath', array());
+ $container->setDefinition('twig.loader.filesystem', $filesystemLoader);
+
+ $extensionPass = new ExtensionPass();
+ $extensionPass->process($container);
+
+ $this->assertCount(2, $filesystemLoader->getMethodCalls());
+ }
+}
diff --git a/src/Symfony/Bundle/TwigBundle/Tests/Functional/CacheWarmingTest.php b/src/Symfony/Bundle/TwigBundle/Tests/Functional/CacheWarmingTest.php
index 26ae8306b9927..ccd502f55aa33 100644
--- a/src/Symfony/Bundle/TwigBundle/Tests/Functional/CacheWarmingTest.php
+++ b/src/Symfony/Bundle/TwigBundle/Tests/Functional/CacheWarmingTest.php
@@ -17,7 +17,7 @@
use Symfony\Bundle\FrameworkBundle\FrameworkBundle;
use Symfony\Bundle\TwigBundle\TwigBundle;
-class NewCacheWamingTest extends \PHPUnit_Framework_TestCase
+class CacheWarmingTest extends \PHPUnit_Framework_TestCase
{
public function testCacheIsProperlyWarmedWhenTemplatingIsAvailable()
{
diff --git a/src/Symfony/Component/BrowserKit/Cookie.php b/src/Symfony/Component/BrowserKit/Cookie.php
index 7e855bf351dad..42f184d532e02 100644
--- a/src/Symfony/Component/BrowserKit/Cookie.php
+++ b/src/Symfony/Component/BrowserKit/Cookie.php
@@ -213,8 +213,6 @@ private static function parseDate($dateValue)
if (false !== $date = date_create($dateValue, new \DateTimeZone('GMT'))) {
return $date->format('U');
}
-
- throw new \InvalidArgumentException(sprintf('Could not parse date "%s".', $dateValue));
}
/**
diff --git a/src/Symfony/Component/BrowserKit/Tests/CookieTest.php b/src/Symfony/Component/BrowserKit/Tests/CookieTest.php
index 5a724333d350f..4722de6d7b04c 100644
--- a/src/Symfony/Component/BrowserKit/Tests/CookieTest.php
+++ b/src/Symfony/Component/BrowserKit/Tests/CookieTest.php
@@ -88,10 +88,11 @@ public function testFromStringThrowsAnExceptionIfCookieIsNotValid()
Cookie::fromString('foo');
}
- public function testFromStringThrowsAnExceptionIfCookieDateIsNotValid()
+ public function testFromStringIgnoresInvalidExpiresDate()
{
- $this->setExpectedException('InvalidArgumentException');
- Cookie::fromString('foo=bar; expires=Flursday July 31st 2020, 08:49:37 GMT');
+ $cookie = Cookie::fromString('foo=bar; expires=Flursday July 31st 2020, 08:49:37 GMT');
+
+ $this->assertFalse($cookie->isExpired());
}
public function testFromStringThrowsAnExceptionIfUrlIsNotValid()
diff --git a/src/Symfony/Component/ClassLoader/Tests/Fixtures/Namespaced/WithStrictTypes.php b/src/Symfony/Component/ClassLoader/Tests/Fixtures/Namespaced/WithStrictTypes.php
index 3c7870592b3cb..846611e38bbc4 100644
--- a/src/Symfony/Component/ClassLoader/Tests/Fixtures/Namespaced/WithStrictTypes.php
+++ b/src/Symfony/Component/ClassLoader/Tests/Fixtures/Namespaced/WithStrictTypes.php
@@ -4,7 +4,7 @@
* foo
*/
-declare (strict_types = 1);
+declare(strict_types=1);
namespace Namespaced;
diff --git a/src/Symfony/Component/Config/ResourceCheckerConfigCache.php b/src/Symfony/Component/Config/ResourceCheckerConfigCache.php
index ba7d600c7737b..0e3a411b07552 100644
--- a/src/Symfony/Component/Config/ResourceCheckerConfigCache.php
+++ b/src/Symfony/Component/Config/ResourceCheckerConfigCache.php
@@ -72,11 +72,6 @@ public function isFresh()
return true; // shortcut - if we don't have any checkers we don't need to bother with the meta file at all
}
- $metadata = $this->getMetaFile();
- if (!is_file($metadata)) {
- return true;
- }
-
$metadata = $this->getMetaFile();
if (!is_file($metadata)) {
return false;
diff --git a/src/Symfony/Component/Config/Tests/ResourceCheckerConfigCacheTest.php b/src/Symfony/Component/Config/Tests/ResourceCheckerConfigCacheTest.php
index d66c2e89d95b8..6c12c28a5b363 100644
--- a/src/Symfony/Component/Config/Tests/ResourceCheckerConfigCacheTest.php
+++ b/src/Symfony/Component/Config/Tests/ResourceCheckerConfigCacheTest.php
@@ -128,4 +128,16 @@ public function testCacheKeepsContent()
$this->assertSame('FOOBAR', file_get_contents($cache->getPath()));
}
+
+ public function testCacheIsNotFreshIfNotExistsMetaFile()
+ {
+ $checker = $this->getMockBuilder('\Symfony\Component\Config\ResourceCheckerInterface')->getMock();
+ $cache = new ResourceCheckerConfigCache($this->cacheFile, array($checker));
+ $cache->write('foo', array(new FileResource(__FILE__)));
+
+ $metaFile = "{$this->cacheFile}.meta";
+ unlink($metaFile);
+
+ $this->assertFalse($cache->isFresh());
+ }
}
diff --git a/src/Symfony/Component/Console/Helper/Table.php b/src/Symfony/Component/Console/Helper/Table.php
index d622294ed4cb1..dd775f6957d96 100644
--- a/src/Symfony/Component/Console/Helper/Table.php
+++ b/src/Symfony/Component/Console/Helper/Table.php
@@ -560,7 +560,7 @@ private function calculateColumnsWidth($rows)
foreach ($row as $i => $cell) {
if ($cell instanceof TableCell) {
- $textLength = strlen($cell);
+ $textLength = Helper::strlenWithoutDecoration($this->output->getFormatter(), $cell);
if ($textLength > 0) {
$contentColumns = str_split($cell, ceil($textLength / $cell->getColspan()));
foreach ($contentColumns as $position => $content) {
diff --git a/src/Symfony/Component/Console/Helper/TableCell.php b/src/Symfony/Component/Console/Helper/TableCell.php
index 69442d4249c66..a3064fc0981f6 100644
--- a/src/Symfony/Component/Console/Helper/TableCell.php
+++ b/src/Symfony/Component/Console/Helper/TableCell.php
@@ -37,6 +37,10 @@ class TableCell
*/
public function __construct($value = '', array $options = array())
{
+ if (is_numeric($value) && !is_string($value)) {
+ $value = (string) $value;
+ }
+
$this->value = $value;
// check option names
diff --git a/src/Symfony/Component/Console/Tests/Helper/ProcessHelperTest.php b/src/Symfony/Component/Console/Tests/Helper/ProcessHelperTest.php
index 1dcddf8badd49..b0d7f9c2f6f4c 100644
--- a/src/Symfony/Component/Console/Tests/Helper/ProcessHelperTest.php
+++ b/src/Symfony/Component/Console/Tests/Helper/ProcessHelperTest.php
@@ -16,6 +16,7 @@
use Symfony\Component\Console\Output\StreamOutput;
use Symfony\Component\Console\Helper\ProcessHelper;
use Symfony\Component\Process\Process;
+use Symfony\Component\Process\ProcessBuilder;
class ProcessHelperTest extends \PHPUnit_Framework_TestCase
{
@@ -83,9 +84,9 @@ public function provideCommandsAndOutput()
EOT;
$errorMessage = 'An error occurred';
- if ('\\' === DIRECTORY_SEPARATOR) {
- $successOutputProcessDebug = str_replace("'", '"', $successOutputProcessDebug);
- }
+ $args = new ProcessBuilder(array('php', '-r', 'echo 42;'));
+ $args = $args->getProcess()->getCommandLine();
+ $successOutputProcessDebug = str_replace("'php' '-r' 'echo 42;'", $args, $successOutputProcessDebug);
return array(
array('', 'php -r "echo 42;"', StreamOutput::VERBOSITY_VERBOSE, null),
diff --git a/src/Symfony/Component/Console/Tests/Helper/TableTest.php b/src/Symfony/Component/Console/Tests/Helper/TableTest.php
index 46a64eb27766c..6f32048c1951a 100644
--- a/src/Symfony/Component/Console/Tests/Helper/TableTest.php
+++ b/src/Symfony/Component/Console/Tests/Helper/TableTest.php
@@ -35,9 +35,9 @@ protected function tearDown()
/**
* @dataProvider testRenderProvider
*/
- public function testRender($headers, $rows, $style, $expected)
+ public function testRender($headers, $rows, $style, $expected, $decorated = false)
{
- $table = new Table($output = $this->getOutputStream());
+ $table = new Table($output = $this->getOutputStream($decorated));
$table
->setHeaders($headers)
->setRows($rows)
@@ -51,9 +51,9 @@ public function testRender($headers, $rows, $style, $expected)
/**
* @dataProvider testRenderProvider
*/
- public function testRenderAddRows($headers, $rows, $style, $expected)
+ public function testRenderAddRows($headers, $rows, $style, $expected, $decorated = false)
{
- $table = new Table($output = $this->getOutputStream());
+ $table = new Table($output = $this->getOutputStream($decorated));
$table
->setHeaders($headers)
->addRows($rows)
@@ -67,9 +67,9 @@ public function testRenderAddRows($headers, $rows, $style, $expected)
/**
* @dataProvider testRenderProvider
*/
- public function testRenderAddRowsOneByOne($headers, $rows, $style, $expected)
+ public function testRenderAddRowsOneByOne($headers, $rows, $style, $expected, $decorated = false)
{
- $table = new Table($output = $this->getOutputStream());
+ $table = new Table($output = $this->getOutputStream($decorated));
$table
->setHeaders($headers)
->setStyle($style)
@@ -485,6 +485,35 @@ public function testRenderProvider()
TABLE
),
+ 'Coslpan and table cells with comment style' => array(
+ array(
+ new TableCell('Long Title', array('colspan' => 3)),
+ ),
+ array(
+ array(
+ new TableCell('9971-5-0210-0', array('colspan' => 3)),
+ ),
+ new TableSeparator(),
+ array(
+ 'Dante Alighieri',
+ 'J. R. R. Tolkien',
+ 'J. R. R',
+ ),
+ ),
+ 'default',
+ <<
assertEquals($expected, $this->getOutputContent($output));
+ }
+
+ public function testTableCellWithNumericIntValue()
+ {
+ $table = new Table($output = $this->getOutputStream());
+
+ $table->setRows(array(array(new TableCell(12345))));
+ $table->render();
+
+ $expected =
+<<<'TABLE'
++-------+
+| 12345 |
++-------+
+
+TABLE;
+
+ $this->assertEquals($expected, $this->getOutputContent($output));
+ }
+
+ public function testTableCellWithNumericFloatValue()
+ {
+ $table = new Table($output = $this->getOutputStream());
+
+ $table->setRows(array(array(new TableCell(12345.01))));
+ $table->render();
+
+ $expected =
+<<<'TABLE'
++----------+
+| 12345.01 |
++----------+
+
TABLE;
$this->assertEquals($expected, $this->getOutputContent($output));
@@ -650,9 +715,9 @@ public function testGetStyleDefinition()
Table::getStyleDefinition('absent');
}
- protected function getOutputStream()
+ protected function getOutputStream($decorated = false)
{
- return new StreamOutput($this->stream, StreamOutput::VERBOSITY_NORMAL, false);
+ return new StreamOutput($this->stream, StreamOutput::VERBOSITY_NORMAL, $decorated);
}
protected function getOutputContent(StreamOutput $output)
diff --git a/src/Symfony/Component/Debug/ErrorHandler.php b/src/Symfony/Component/Debug/ErrorHandler.php
index d541b83a7e292..1b7201171cf78 100644
--- a/src/Symfony/Component/Debug/ErrorHandler.php
+++ b/src/Symfony/Component/Debug/ErrorHandler.php
@@ -375,12 +375,10 @@ private function reRegister($prev)
/**
* Handles errors by filtering then logging them according to the configured bit fields.
*
- * @param int $type One of the E_* constants
+ * @param int $type One of the E_* constants
* @param string $message
* @param string $file
* @param int $line
- * @param array $context
- * @param array $backtrace
*
* @return bool Returns false when no handling happens so that the PHP engine can handle the error itself
*
@@ -388,7 +386,7 @@ private function reRegister($prev)
*
* @internal
*/
- public function handleError($type, $message, $file, $line, array $context, array $backtrace = null)
+ public function handleError($type, $message, $file, $line)
{
$level = error_reporting() | E_RECOVERABLE_ERROR | E_USER_ERROR | E_DEPRECATED | E_USER_DEPRECATED;
$log = $this->loggedErrors & $type;
@@ -398,8 +396,17 @@ public function handleError($type, $message, $file, $line, array $context, array
if (!$type || (!$log && !$throw)) {
return $type && $log;
}
+ $scope = $this->scopedErrors & $type;
- if (isset($context['GLOBALS']) && ($this->scopedErrors & $type)) {
+ if (4 < $numArgs = func_num_args()) {
+ $context = $scope ? (func_get_arg(4) ?: array()) : array();
+ $backtrace = 5 < $numArgs ? func_get_arg(5) : null; // defined on HHVM
+ } else {
+ $context = array();
+ $backtrace = null;
+ }
+
+ if (isset($context['GLOBALS']) && $scope) {
$e = $context; // Whatever the signature of the method,
unset($e['GLOBALS'], $context); // $context is always a reference in 5.3
$context = $e;
@@ -418,7 +425,7 @@ public function handleError($type, $message, $file, $line, array $context, array
if (null !== self::$toStringException) {
$throw = self::$toStringException;
self::$toStringException = null;
- } elseif (($this->scopedErrors & $type) && class_exists('Symfony\Component\Debug\Exception\ContextErrorException')) {
+ } elseif ($scope && class_exists('Symfony\Component\Debug\Exception\ContextErrorException')) {
// Checking for class existence is a work around for https://bugs.php.net/42098
$throw = new ContextErrorException($this->levels[$type].': '.$message, 0, $type, $file, $line, $context);
} else {
@@ -490,7 +497,7 @@ public function handleError($type, $message, $file, $line, array $context, array
$e = compact('type', 'file', 'line', 'level');
if ($type & $level) {
- if ($this->scopedErrors & $type) {
+ if ($scope) {
$e['scope_vars'] = $context;
if ($trace) {
$e['stack'] = $backtrace ?: debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT);
diff --git a/src/Symfony/Component/Debug/FatalErrorHandler/ClassNotFoundFatalErrorHandler.php b/src/Symfony/Component/Debug/FatalErrorHandler/ClassNotFoundFatalErrorHandler.php
index abfe90d79262a..612bfcaf7f966 100644
--- a/src/Symfony/Component/Debug/FatalErrorHandler/ClassNotFoundFatalErrorHandler.php
+++ b/src/Symfony/Component/Debug/FatalErrorHandler/ClassNotFoundFatalErrorHandler.php
@@ -179,7 +179,7 @@ private function convertFileToClass($path, $file, $prefix)
);
if ($prefix) {
- $candidates = array_filter($candidates, function ($candidate) use ($prefix) {return 0 === strpos($candidate, $prefix);});
+ $candidates = array_filter($candidates, function ($candidate) use ($prefix) { return 0 === strpos($candidate, $prefix); });
}
// We cannot use the autoloader here as most of them use require; but if the class
diff --git a/src/Symfony/Component/DependencyInjection/Compiler/AutowirePass.php b/src/Symfony/Component/DependencyInjection/Compiler/AutowirePass.php
index cd5b61b29052b..09a237caad099 100644
--- a/src/Symfony/Component/DependencyInjection/Compiler/AutowirePass.php
+++ b/src/Symfony/Component/DependencyInjection/Compiler/AutowirePass.php
@@ -95,8 +95,10 @@ private function completeDefinition($id, Definition $definition)
throw new RuntimeException(sprintf('Unable to autowire argument index %d ($%s) for the service "%s". If this is an object, give it a type-hint. Otherwise, specify this argument\'s value explicitly.', $index, $parameter->name, $id));
}
- // specifically pass the default value
- $arguments[$index] = $parameter->getDefaultValue();
+ if (!array_key_exists($index, $arguments)) {
+ // specifically pass the default value
+ $arguments[$index] = $parameter->getDefaultValue();
+ }
continue;
}
diff --git a/src/Symfony/Component/DependencyInjection/Compiler/CheckCircularReferencesPass.php b/src/Symfony/Component/DependencyInjection/Compiler/CheckCircularReferencesPass.php
index 156bcc0c3ab7b..f39a89af2be71 100644
--- a/src/Symfony/Component/DependencyInjection/Compiler/CheckCircularReferencesPass.php
+++ b/src/Symfony/Component/DependencyInjection/Compiler/CheckCircularReferencesPass.php
@@ -60,7 +60,6 @@ private function checkOutEdges(array $edges)
$id = $node->getId();
if (empty($this->checkedNodes[$id])) {
-
// don't check circular dependencies for lazy services
if (!$node->getValue() || !$node->getValue()->isLazy()) {
$searchKey = array_search($id, $this->currentPath);
diff --git a/src/Symfony/Component/DependencyInjection/Definition.php b/src/Symfony/Component/DependencyInjection/Definition.php
index a002df28753b1..1b3a1c24e9aa0 100644
--- a/src/Symfony/Component/DependencyInjection/Definition.php
+++ b/src/Symfony/Component/DependencyInjection/Definition.php
@@ -164,7 +164,7 @@ public function setDecoratedService($id, $renamedId = null, $priority = 0)
}
/**
- * Gets the service that decorates this service.
+ * Gets the service that this service is decorating.
*
* @return null|array An array composed of the decorated service id, the new id for it and the priority of decoration, null if no service is decorated
*/
@@ -308,6 +308,10 @@ public function addArgument($argument)
*/
public function replaceArgument($index, $argument)
{
+ if (0 === count($this->arguments)) {
+ throw new OutOfBoundsException('Cannot replace arguments if none have been configured yet.');
+ }
+
if ($index < 0 || $index > count($this->arguments) - 1) {
throw new OutOfBoundsException(sprintf('The index "%d" is not in the range [0, %d].', $index, count($this->arguments) - 1));
}
diff --git a/src/Symfony/Component/DependencyInjection/Loader/YamlFileLoader.php b/src/Symfony/Component/DependencyInjection/Loader/YamlFileLoader.php
index dbfc0524d95a4..a377eee6f5439 100644
--- a/src/Symfony/Component/DependencyInjection/Loader/YamlFileLoader.php
+++ b/src/Symfony/Component/DependencyInjection/Loader/YamlFileLoader.php
@@ -85,7 +85,7 @@ public function supports($resource, $type = null)
* @param array $content
* @param string $file
*/
- private function parseImports($content, $file)
+ private function parseImports(array $content, $file)
{
if (!isset($content['imports'])) {
return;
@@ -112,7 +112,7 @@ private function parseImports($content, $file)
* @param array $content
* @param string $file
*/
- private function parseDefinitions($content, $file)
+ private function parseDefinitions(array $content, $file)
{
if (!isset($content['services'])) {
return;
@@ -130,9 +130,9 @@ private function parseDefinitions($content, $file)
/**
* Parses a definition.
*
- * @param string $id
- * @param array $service
- * @param string $file
+ * @param string $id
+ * @param array|string $service
+ * @param string $file
*
* @throws InvalidArgumentException When tags are invalid
*/
@@ -454,7 +454,7 @@ private function resolveServices($value)
*
* @param array $content
*/
- private function loadFromExtensions($content)
+ private function loadFromExtensions(array $content)
{
foreach ($content as $namespace => $values) {
if (in_array($namespace, array('imports', 'parameters', 'services'))) {
diff --git a/src/Symfony/Component/DependencyInjection/Tests/Compiler/AutowirePassTest.php b/src/Symfony/Component/DependencyInjection/Tests/Compiler/AutowirePassTest.php
index c9445c01dc1b1..2d34cbff1d7c0 100644
--- a/src/Symfony/Component/DependencyInjection/Tests/Compiler/AutowirePassTest.php
+++ b/src/Symfony/Component/DependencyInjection/Tests/Compiler/AutowirePassTest.php
@@ -443,6 +443,22 @@ public function testIgnoreServiceWithClassNotExisting()
$this->assertTrue($container->hasDefinition('bar'));
}
+
+ public function testEmptyStringIsKept()
+ {
+ $container = new ContainerBuilder();
+
+ $container->register('a', __NAMESPACE__.'\A');
+ $container->register('lille', __NAMESPACE__.'\Lille');
+ $container->register('foo', __NAMESPACE__.'\MultipleArgumentsOptionalScalar')
+ ->setAutowired(true)
+ ->setArguments(array('', ''));
+
+ $pass = new AutowirePass();
+ $pass->process($container);
+
+ $this->assertEquals(array(new Reference('a'), '', new Reference('lille')), $container->getDefinition('foo')->getArguments());
+ }
}
class Foo
diff --git a/src/Symfony/Component/DependencyInjection/Tests/DefinitionTest.php b/src/Symfony/Component/DependencyInjection/Tests/DefinitionTest.php
index 6041d816bdd22..c86a2eb445ac5 100644
--- a/src/Symfony/Component/DependencyInjection/Tests/DefinitionTest.php
+++ b/src/Symfony/Component/DependencyInjection/Tests/DefinitionTest.php
@@ -292,6 +292,7 @@ public function testGetArgumentShouldCheckBounds()
/**
* @expectedException \OutOfBoundsException
+ * @expectedExceptionMessage The index "1" is not in the range [0, 0].
*/
public function testReplaceArgumentShouldCheckBounds()
{
@@ -301,6 +302,16 @@ public function testReplaceArgumentShouldCheckBounds()
$def->replaceArgument(1, 'bar');
}
+ /**
+ * @expectedException \OutOfBoundsException
+ * @expectedExceptionMessage Cannot replace arguments if none have been configured yet.
+ */
+ public function testReplaceArgumentWithoutExistingArgumentsShouldCheckBounds()
+ {
+ $def = new Definition('stdClass');
+ $def->replaceArgument(0, 'bar');
+ }
+
public function testSetGetProperties()
{
$def = new Definition('stdClass');
diff --git a/src/Symfony/Component/DomCrawler/Crawler.php b/src/Symfony/Component/DomCrawler/Crawler.php
index 8c5d2eaf5ce24..bb429c2b6a122 100644
--- a/src/Symfony/Component/DomCrawler/Crawler.php
+++ b/src/Symfony/Component/DomCrawler/Crawler.php
@@ -169,7 +169,7 @@ public function addHtmlContent($content, $charset = 'UTF-8')
$dom = new \DOMDocument('1.0', $charset);
$dom->validateOnParse = true;
- set_error_handler(function () {throw new \Exception();});
+ set_error_handler(function () { throw new \Exception(); });
try {
// Convert charset to HTML-entities to work around bugs in DOMDocument::loadHTML()
diff --git a/src/Symfony/Component/Form/Extension/Core/Type/DateType.php b/src/Symfony/Component/Form/Extension/Core/Type/DateType.php
index 209ece5cae3ed..ee317994b438e 100644
--- a/src/Symfony/Component/Form/Extension/Core/Type/DateType.php
+++ b/src/Symfony/Component/Form/Extension/Core/Type/DateType.php
@@ -56,11 +56,11 @@ public function buildForm(FormBuilderInterface $builder, array $options)
throw new InvalidOptionsException('The "format" option must be one of the IntlDateFormatter constants (FULL, LONG, MEDIUM, SHORT) or a string representing a custom format.');
}
- if (null !== $pattern && (false === strpos($pattern, 'y') || false === strpos($pattern, 'M') || false === strpos($pattern, 'd'))) {
- throw new InvalidOptionsException(sprintf('The "format" option should contain the letters "y", "M" and "d". Its current value is "%s".', $pattern));
- }
-
if ('single_text' === $options['widget']) {
+ if (null !== $pattern && false === strpos($pattern, 'y') && false === strpos($pattern, 'M') && false === strpos($pattern, 'd')) {
+ throw new InvalidOptionsException(sprintf('The "format" option should contain the letters "y", "M" or "d". Its current value is "%s".', $pattern));
+ }
+
$builder->addViewTransformer(new DateTimeToLocalizedStringTransformer(
$options['model_timezone'],
$options['view_timezone'],
@@ -70,6 +70,10 @@ public function buildForm(FormBuilderInterface $builder, array $options)
$pattern
));
} else {
+ if (null !== $pattern && (false === strpos($pattern, 'y') || false === strpos($pattern, 'M') || false === strpos($pattern, 'd'))) {
+ throw new InvalidOptionsException(sprintf('The "format" option should contain the letters "y", "M" and "d". Its current value is "%s".', $pattern));
+ }
+
$yearOptions = $monthOptions = $dayOptions = array(
'error_bubbling' => true,
);
@@ -221,7 +225,7 @@ public function configureOptions(OptionsResolver $resolver)
array('year' => $default, 'month' => $default, 'day' => $default),
$choiceTranslationDomain
);
- };
+ }
return array(
'year' => $choiceTranslationDomain,
diff --git a/src/Symfony/Component/Form/Extension/Core/Type/TimeType.php b/src/Symfony/Component/Form/Extension/Core/Type/TimeType.php
index 8aae516a5e2e4..6af08fb32bb0d 100644
--- a/src/Symfony/Component/Form/Extension/Core/Type/TimeType.php
+++ b/src/Symfony/Component/Form/Extension/Core/Type/TimeType.php
@@ -222,7 +222,7 @@ public function configureOptions(OptionsResolver $resolver)
array('hour' => $default, 'minute' => $default, 'second' => $default),
$choiceTranslationDomain
);
- };
+ }
return array(
'hour' => $choiceTranslationDomain,
diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php
index 003bbf2f13679..50636386b7343 100644
--- a/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php
+++ b/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php
@@ -77,12 +77,28 @@ public function testSubmitFromSingleTextDateTimeWithDefaultFormat()
$this->assertEquals('2010-06-02', $form->getViewData());
}
+ public function testSubmitFromSingleTextDateTimeWithCustomFormat()
+ {
+ $form = $this->factory->create('date', null, array(
+ 'model_timezone' => 'UTC',
+ 'view_timezone' => 'UTC',
+ 'widget' => 'single_text',
+ 'input' => 'datetime',
+ 'format' => 'yyyy',
+ ));
+
+ $form->submit('2010');
+
+ $this->assertDateTimeEquals(new \DateTime('2010-01-01 UTC'), $form->getData());
+ $this->assertEquals('2010', $form->getViewData());
+ }
+
public function testSubmitFromSingleTextDateTime()
{
- // we test against "de_AT", so we need the full implementation
+ // we test against "de_DE", so we need the full implementation
IntlTestHelper::requireFullIntl($this, false);
- \Locale::setDefault('de_AT');
+ \Locale::setDefault('de_DE');
$form = $this->factory->create('Symfony\Component\Form\Extension\Core\Type\DateType', null, array(
'format' => \IntlDateFormatter::MEDIUM,
@@ -100,10 +116,10 @@ public function testSubmitFromSingleTextDateTime()
public function testSubmitFromSingleTextString()
{
- // we test against "de_AT", so we need the full implementation
+ // we test against "de_DE", so we need the full implementation
IntlTestHelper::requireFullIntl($this, false);
- \Locale::setDefault('de_AT');
+ \Locale::setDefault('de_DE');
$form = $this->factory->create('Symfony\Component\Form\Extension\Core\Type\DateType', null, array(
'format' => \IntlDateFormatter::MEDIUM,
@@ -121,10 +137,10 @@ public function testSubmitFromSingleTextString()
public function testSubmitFromSingleTextTimestamp()
{
- // we test against "de_AT", so we need the full implementation
+ // we test against "de_DE", so we need the full implementation
IntlTestHelper::requireFullIntl($this, false);
- \Locale::setDefault('de_AT');
+ \Locale::setDefault('de_DE');
$form = $this->factory->create('Symfony\Component\Form\Extension\Core\Type\DateType', null, array(
'format' => \IntlDateFormatter::MEDIUM,
@@ -144,10 +160,10 @@ public function testSubmitFromSingleTextTimestamp()
public function testSubmitFromSingleTextRaw()
{
- // we test against "de_AT", so we need the full implementation
+ // we test against "de_DE", so we need the full implementation
IntlTestHelper::requireFullIntl($this, false);
- \Locale::setDefault('de_AT');
+ \Locale::setDefault('de_DE');
$form = $this->factory->create('Symfony\Component\Form\Extension\Core\Type\DateType', null, array(
'format' => \IntlDateFormatter::MEDIUM,
@@ -347,6 +363,7 @@ public function testThrowExceptionIfFormatIsNoPattern()
/**
* @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException
+ * @expectedExceptionMessage The "format" option should contain the letters "y", "M" and "d". Its current value is "yy".
*/
public function testThrowExceptionIfFormatDoesNotContainYearMonthAndDay()
{
@@ -356,6 +373,18 @@ public function testThrowExceptionIfFormatDoesNotContainYearMonthAndDay()
));
}
+ /**
+ * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException
+ * @expectedExceptionMessage The "format" option should contain the letters "y", "M" or "d". Its current value is "wrong".
+ */
+ public function testThrowExceptionIfFormatMissesYearMonthAndDayWithSingleTextWidget()
+ {
+ $this->factory->create('date', null, array(
+ 'widget' => 'single_text',
+ 'format' => 'wrong',
+ ));
+ }
+
/**
* @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException
*/
@@ -408,10 +437,10 @@ public function testThrowExceptionIfDaysIsInvalid()
public function testSetDataWithNegativeTimezoneOffsetStringInput()
{
- // we test against "de_AT", so we need the full implementation
+ // we test against "de_DE", so we need the full implementation
IntlTestHelper::requireFullIntl($this, false);
- \Locale::setDefault('de_AT');
+ \Locale::setDefault('de_DE');
$form = $this->factory->create('Symfony\Component\Form\Extension\Core\Type\DateType', null, array(
'format' => \IntlDateFormatter::MEDIUM,
@@ -430,10 +459,10 @@ public function testSetDataWithNegativeTimezoneOffsetStringInput()
public function testSetDataWithNegativeTimezoneOffsetDateTimeInput()
{
- // we test against "de_AT", so we need the full implementation
+ // we test against "de_DE", so we need the full implementation
IntlTestHelper::requireFullIntl($this, false);
- \Locale::setDefault('de_AT');
+ \Locale::setDefault('de_DE');
$form = $this->factory->create('Symfony\Component\Form\Extension\Core\Type\DateType', null, array(
'format' => \IntlDateFormatter::MEDIUM,
diff --git a/src/Symfony/Component/HttpFoundation/Request.php b/src/Symfony/Component/HttpFoundation/Request.php
index 46cc6bea5d26e..ec1e6678104ea 100644
--- a/src/Symfony/Component/HttpFoundation/Request.php
+++ b/src/Symfony/Component/HttpFoundation/Request.php
@@ -596,6 +596,7 @@ public static function getTrustedHosts()
* * Request::HEADER_CLIENT_HOST: defaults to X-Forwarded-Host (see getHost())
* * Request::HEADER_CLIENT_PORT: defaults to X-Forwarded-Port (see getPort())
* * Request::HEADER_CLIENT_PROTO: defaults to X-Forwarded-Proto (see getScheme() and isSecure())
+ * * Request::HEADER_FORWARDED: defaults to Forwarded (see RFC 7239)
*
* Setting an empty value allows to disable the trusted header for the given key.
*
diff --git a/src/Symfony/Component/HttpKernel/DataCollector/DumpDataCollector.php b/src/Symfony/Component/HttpKernel/DataCollector/DumpDataCollector.php
index 3f5e6acf63444..6df03fa31e371 100644
--- a/src/Symfony/Component/HttpKernel/DataCollector/DumpDataCollector.php
+++ b/src/Symfony/Component/HttpKernel/DataCollector/DumpDataCollector.php
@@ -298,7 +298,7 @@ private function htmlEncode($s)
{
$html = '';
- $dumper = new HtmlDumper(function ($line) use (&$html) {$html .= $line;}, $this->charset);
+ $dumper = new HtmlDumper(function ($line) use (&$html) { $html .= $line; }, $this->charset);
$dumper->setDumpHeader('');
$dumper->setDumpBoundaries('', '');
diff --git a/src/Symfony/Component/HttpKernel/EventListener/AddRequestFormatsListener.php b/src/Symfony/Component/HttpKernel/EventListener/AddRequestFormatsListener.php
index 14a5d435115d7..280844c18313e 100644
--- a/src/Symfony/Component/HttpKernel/EventListener/AddRequestFormatsListener.php
+++ b/src/Symfony/Component/HttpKernel/EventListener/AddRequestFormatsListener.php
@@ -52,6 +52,6 @@ public function onKernelRequest(GetResponseEvent $event)
*/
public static function getSubscribedEvents()
{
- return array(KernelEvents::REQUEST => 'onKernelRequest');
+ return array(KernelEvents::REQUEST => array('onKernelRequest', 1));
}
}
diff --git a/src/Symfony/Component/HttpKernel/Kernel.php b/src/Symfony/Component/HttpKernel/Kernel.php
index acc77dc8c789b..ed22e35df5b5c 100644
--- a/src/Symfony/Component/HttpKernel/Kernel.php
+++ b/src/Symfony/Component/HttpKernel/Kernel.php
@@ -59,11 +59,11 @@ abstract class Kernel implements KernelInterface, TerminableInterface
protected $startTime;
protected $loadClassCache;
- const VERSION = '2.8.16';
- const VERSION_ID = 20816;
+ const VERSION = '2.8.17';
+ const VERSION_ID = 20817;
const MAJOR_VERSION = 2;
const MINOR_VERSION = 8;
- const RELEASE_VERSION = 16;
+ const RELEASE_VERSION = 17;
const EXTRA_VERSION = '';
const END_OF_MAINTENANCE = '11/2018';
diff --git a/src/Symfony/Component/HttpKernel/Tests/EventListener/AddRequestFormatsListenerTest.php b/src/Symfony/Component/HttpKernel/Tests/EventListener/AddRequestFormatsListenerTest.php
index 0f3577cbdb14b..c5b2c51e40ecb 100644
--- a/src/Symfony/Component/HttpKernel/Tests/EventListener/AddRequestFormatsListenerTest.php
+++ b/src/Symfony/Component/HttpKernel/Tests/EventListener/AddRequestFormatsListenerTest.php
@@ -45,7 +45,7 @@ public function testIsAnEventSubscriber()
public function testRegisteredEvent()
{
$this->assertEquals(
- array(KernelEvents::REQUEST => 'onKernelRequest'),
+ array(KernelEvents::REQUEST => array('onKernelRequest', 1)),
AddRequestFormatsListener::getSubscribedEvents()
);
}
diff --git a/src/Symfony/Component/Intl/Data/Generator/AbstractDataGenerator.php b/src/Symfony/Component/Intl/Data/Generator/AbstractDataGenerator.php
index 84b7f74373992..6b7cf5a0caf1d 100644
--- a/src/Symfony/Component/Intl/Data/Generator/AbstractDataGenerator.php
+++ b/src/Symfony/Component/Intl/Data/Generator/AbstractDataGenerator.php
@@ -42,9 +42,6 @@ public function __construct(GenrbCompiler $compiler, $dirName)
$this->dirName = $dirName;
}
- /**
- * {@inheritdoc}
- */
public function generateData(GeneratorConfig $config)
{
$filesystem = new Filesystem();
diff --git a/src/Symfony/Component/Intl/Data/Generator/LocaleDataGenerator.php b/src/Symfony/Component/Intl/Data/Generator/LocaleDataGenerator.php
index 5f4f95102fd85..e89e5e8757b67 100644
--- a/src/Symfony/Component/Intl/Data/Generator/LocaleDataGenerator.php
+++ b/src/Symfony/Component/Intl/Data/Generator/LocaleDataGenerator.php
@@ -57,9 +57,6 @@ public function __construct($dirName, LanguageDataProvider $languageDataProvider
$this->regionDataProvider = $regionDataProvider;
}
- /**
- * {@inheritdoc}
- */
public function generateData(GeneratorConfig $config)
{
$filesystem = new Filesystem();
diff --git a/src/Symfony/Component/Intl/Util/IntlTestHelper.php b/src/Symfony/Component/Intl/Util/IntlTestHelper.php
index 71fb4acdd72fa..c1e37a72ec8a4 100644
--- a/src/Symfony/Component/Intl/Util/IntlTestHelper.php
+++ b/src/Symfony/Component/Intl/Util/IntlTestHelper.php
@@ -41,7 +41,7 @@ public static function requireIntl(\PHPUnit_Framework_TestCase $testCase, $minim
// * the intl extension is loaded with version Intl::getIcuStubVersion()
// * the intl extension is not loaded
- if (($minimumIcuVersion || defined('HHVM_VERSION_ID')) && IcuVersion::compare(Intl::getIcuVersion(), $minimumIcuVersion, '!=', 1)) {
+ if (($minimumIcuVersion || defined('HHVM_VERSION_ID')) && IcuVersion::compare(Intl::getIcuVersion(), $minimumIcuVersion, '<', 1)) {
$testCase->markTestSkipped('ICU version '.$minimumIcuVersion.' is required.');
}
diff --git a/src/Symfony/Component/Process/ProcessUtils.php b/src/Symfony/Component/Process/ProcessUtils.php
index 0bd2f6b772f6f..c0fd9c12dba5a 100644
--- a/src/Symfony/Component/Process/ProcessUtils.php
+++ b/src/Symfony/Component/Process/ProcessUtils.php
@@ -71,7 +71,7 @@ public static function escapeArgument($argument)
return $escapedArgument;
}
- return escapeshellarg($argument);
+ return "'".str_replace("'", "'\\''", $argument)."'";
}
/**
diff --git a/src/Symfony/Component/Process/Tests/ProcessUtilsTest.php b/src/Symfony/Component/Process/Tests/ProcessUtilsTest.php
index e6564cde5ba6d..0f554b6151801 100644
--- a/src/Symfony/Component/Process/Tests/ProcessUtilsTest.php
+++ b/src/Symfony/Component/Process/Tests/ProcessUtilsTest.php
@@ -43,6 +43,7 @@ public function dataArguments()
array("'<|>\" \"'\\''f'", '<|>" "\'f'),
array("''", ''),
array("'with\\trailingbs\\'", 'with\trailingbs\\'),
+ array("'withNonAsciiAccentLikeéÉèÈàÀöä'", 'withNonAsciiAccentLikeéÉèÈàÀöä'),
);
}
}
diff --git a/src/Symfony/Component/Process/Tests/SignalListener.php b/src/Symfony/Component/Process/Tests/SignalListener.php
index 03536577c40f2..9e30ce3bbbbc6 100644
--- a/src/Symfony/Component/Process/Tests/SignalListener.php
+++ b/src/Symfony/Component/Process/Tests/SignalListener.php
@@ -9,7 +9,7 @@
* file that was distributed with this source code.
*/
-pcntl_signal(SIGUSR1, function () {echo 'SIGUSR1'; exit;});
+pcntl_signal(SIGUSR1, function () { echo 'SIGUSR1'; exit; });
echo 'Caught ';
diff --git a/src/Symfony/Component/PropertyAccess/PropertyAccess.php b/src/Symfony/Component/PropertyAccess/PropertyAccess.php
index 21b926e8282d4..8d36db2666539 100644
--- a/src/Symfony/Component/PropertyAccess/PropertyAccess.php
+++ b/src/Symfony/Component/PropertyAccess/PropertyAccess.php
@@ -31,7 +31,7 @@ public static function createPropertyAccessor()
/**
* Creates a property accessor builder.
*
- * @return PropertyAccessor
+ * @return PropertyAccessorBuilder
*/
public static function createPropertyAccessorBuilder()
{
diff --git a/src/Symfony/Component/PropertyAccess/PropertyAccessor.php b/src/Symfony/Component/PropertyAccess/PropertyAccessor.php
index da0c5da93cdef..d7ccc46438675 100644
--- a/src/Symfony/Component/PropertyAccess/PropertyAccessor.php
+++ b/src/Symfony/Component/PropertyAccess/PropertyAccessor.php
@@ -246,7 +246,7 @@ public static function handleError($type, $message, $file, $line, $context)
private static function throwInvalidArgumentException($message, $trace, $i)
{
if (isset($trace[$i]['file']) && __FILE__ === $trace[$i]['file']) {
- $pos = strpos($message, $delim = 'must be of the type ') ?: strpos($message, $delim = 'must be an instance of ');
+ $pos = strpos($message, $delim = 'must be of the type ') ?: (strpos($message, $delim = 'must be an instance of ') ?: strpos($message, $delim = 'must implement interface '));
$pos += strlen($delim);
$type = $trace[$i]['args'][0];
$type = is_object($type) ? get_class($type) : gettype($type);
diff --git a/src/Symfony/Component/PropertyAccess/Tests/Fixtures/TypeHinted.php b/src/Symfony/Component/PropertyAccess/Tests/Fixtures/TypeHinted.php
index ca4c5745ae06c..ce0f3d89aaa30 100644
--- a/src/Symfony/Component/PropertyAccess/Tests/Fixtures/TypeHinted.php
+++ b/src/Symfony/Component/PropertyAccess/Tests/Fixtures/TypeHinted.php
@@ -18,6 +18,11 @@ class TypeHinted
{
private $date;
+ /**
+ * @var \Countable
+ */
+ private $countable;
+
public function setDate(\DateTime $date)
{
$this->date = $date;
@@ -27,4 +32,20 @@ public function getDate()
{
return $this->date;
}
+
+ /**
+ * @return \Countable
+ */
+ public function getCountable()
+ {
+ return $this->countable;
+ }
+
+ /**
+ * @param \Countable $countable
+ */
+ public function setCountable(\Countable $countable)
+ {
+ $this->countable = $countable;
+ }
}
diff --git a/src/Symfony/Component/PropertyAccess/Tests/PropertyAccessorTest.php b/src/Symfony/Component/PropertyAccess/Tests/PropertyAccessorTest.php
index 3f1ef1c040a6a..a7e142e878e86 100644
--- a/src/Symfony/Component/PropertyAccess/Tests/PropertyAccessorTest.php
+++ b/src/Symfony/Component/PropertyAccess/Tests/PropertyAccessorTest.php
@@ -554,4 +554,15 @@ public function testArrayNotBeeingOverwritten()
$this->assertSame('baz', $this->propertyAccessor->getValue($object, 'publicAccessor[value2]'));
$this->assertSame(array('value1' => 'foo', 'value2' => 'baz'), $object->getPublicAccessor());
}
+
+ /**
+ * @expectedException \Symfony\Component\PropertyAccess\Exception\InvalidArgumentException
+ * @expectedExceptionMessage Expected argument of type "Countable", "string" given
+ */
+ public function testThrowTypeErrorWithInterface()
+ {
+ $object = new TypeHinted();
+
+ $this->propertyAccessor->setValue($object, 'countable', 'This is a string, \Countable expected.');
+ }
}
diff --git a/src/Symfony/Component/PropertyInfo/Extractor/PhpDocExtractor.php b/src/Symfony/Component/PropertyInfo/Extractor/PhpDocExtractor.php
index e60a623985d05..73e8ad3748977 100644
--- a/src/Symfony/Component/PropertyInfo/Extractor/PhpDocExtractor.php
+++ b/src/Symfony/Component/PropertyInfo/Extractor/PhpDocExtractor.php
@@ -253,6 +253,9 @@ private function getDocBlockFromMethod($class, $ucFirstProperty, $type)
try {
$reflectionMethod = new \ReflectionMethod($class, $methodName);
+ if ($reflectionMethod->isStatic()) {
+ continue;
+ }
if (
(self::ACCESSOR === $type && 0 === $reflectionMethod->getNumberOfRequiredParameters()) ||
diff --git a/src/Symfony/Component/PropertyInfo/Extractor/ReflectionExtractor.php b/src/Symfony/Component/PropertyInfo/Extractor/ReflectionExtractor.php
index 7fefbde2536a1..0e7bb091adc80 100644
--- a/src/Symfony/Component/PropertyInfo/Extractor/ReflectionExtractor.php
+++ b/src/Symfony/Component/PropertyInfo/Extractor/ReflectionExtractor.php
@@ -68,6 +68,10 @@ public function getProperties($class, array $context = array())
}
foreach ($reflectionClass->getMethods(\ReflectionMethod::IS_PUBLIC) as $reflectionMethod) {
+ if ($reflectionMethod->isStatic()) {
+ continue;
+ }
+
$propertyName = $this->getPropertyName($reflectionMethod->name);
if (!$propertyName || isset($properties[$propertyName])) {
continue;
@@ -258,6 +262,9 @@ private function getAccessorMethod($class, $property)
foreach (self::$accessorPrefixes as $prefix) {
try {
$reflectionMethod = new \ReflectionMethod($class, $prefix.$ucProperty);
+ if ($reflectionMethod->isStatic()) {
+ continue;
+ }
if (0 === $reflectionMethod->getNumberOfRequiredParameters()) {
return array($reflectionMethod, $prefix);
@@ -286,6 +293,9 @@ private function getMutatorMethod($class, $property)
foreach (self::$mutatorPrefixes as $prefix) {
try {
$reflectionMethod = new \ReflectionMethod($class, $prefix.$ucProperty);
+ if ($reflectionMethod->isStatic()) {
+ continue;
+ }
// Parameter can be optional to allow things like: method(array $foo = null)
if ($reflectionMethod->getNumberOfParameters() >= 1) {
diff --git a/src/Symfony/Component/PropertyInfo/PropertyInfoExtractor.php b/src/Symfony/Component/PropertyInfo/PropertyInfoExtractor.php
index 942318af605d8..031c8ac05e26a 100644
--- a/src/Symfony/Component/PropertyInfo/PropertyInfoExtractor.php
+++ b/src/Symfony/Component/PropertyInfo/PropertyInfoExtractor.php
@@ -44,7 +44,7 @@ class PropertyInfoExtractor implements PropertyInfoExtractorInterface
* @param PropertyDescriptionExtractorInterface[] $descriptionExtractors
* @param PropertyAccessExtractorInterface[] $accessExtractors
*/
- public function __construct(array $listExtractors = array(), array $typeExtractors = array(), array $descriptionExtractors = array(), array $accessExtractors = array())
+ public function __construct(array $listExtractors = array(), array $typeExtractors = array(), array $descriptionExtractors = array(), array $accessExtractors = array())
{
$this->listExtractors = $listExtractors;
$this->typeExtractors = $typeExtractors;
diff --git a/src/Symfony/Component/PropertyInfo/Tests/Extractors/PhpDocExtractorTest.php b/src/Symfony/Component/PropertyInfo/Tests/Extractors/PhpDocExtractorTest.php
index 332d1c4f8c318..b223888ede1dc 100644
--- a/src/Symfony/Component/PropertyInfo/Tests/Extractors/PhpDocExtractorTest.php
+++ b/src/Symfony/Component/PropertyInfo/Tests/Extractors/PhpDocExtractorTest.php
@@ -68,6 +68,8 @@ public function typesProvider()
array('e', array(new Type(Type::BUILTIN_TYPE_ARRAY, false, null, true, new Type(Type::BUILTIN_TYPE_INT), new Type(Type::BUILTIN_TYPE_RESOURCE))), null, null),
array('f', array(new Type(Type::BUILTIN_TYPE_ARRAY, false, null, true, new Type(Type::BUILTIN_TYPE_INT), new Type(Type::BUILTIN_TYPE_OBJECT, false, 'DateTime'))), null, null),
array('donotexist', null, null, null),
+ array('staticGetter', null, null, null),
+ array('staticSetter', null, null, null),
);
}
}
diff --git a/src/Symfony/Component/PropertyInfo/Tests/Extractors/ReflectionExtractorTest.php b/src/Symfony/Component/PropertyInfo/Tests/Extractors/ReflectionExtractorTest.php
index 8a828c21d66be..713d9431b42a4 100644
--- a/src/Symfony/Component/PropertyInfo/Tests/Extractors/ReflectionExtractorTest.php
+++ b/src/Symfony/Component/PropertyInfo/Tests/Extractors/ReflectionExtractorTest.php
@@ -72,6 +72,8 @@ public function typesProvider()
array('e', null),
array('f', array(new Type(Type::BUILTIN_TYPE_ARRAY, false, null, true, new Type(Type::BUILTIN_TYPE_INT), new Type(Type::BUILTIN_TYPE_OBJECT, false, 'DateTime')))),
array('donotexist', null),
+ array('staticGetter', null),
+ array('staticSetter', null),
);
}
diff --git a/src/Symfony/Component/PropertyInfo/Tests/Fixtures/Dummy.php b/src/Symfony/Component/PropertyInfo/Tests/Fixtures/Dummy.php
index 41a513ac362e1..96cb87db4a8fa 100644
--- a/src/Symfony/Component/PropertyInfo/Tests/Fixtures/Dummy.php
+++ b/src/Symfony/Component/PropertyInfo/Tests/Fixtures/Dummy.php
@@ -51,6 +51,21 @@ class Dummy extends ParentDummy
*/
public $B;
+ public static function getStatic()
+ {
+ }
+
+ /**
+ * @return string
+ */
+ public static function staticGetter()
+ {
+ }
+
+ public static function staticSetter(\DateTime $d)
+ {
+ }
+
/**
* A.
*
diff --git a/src/Symfony/Component/Routing/Loader/AnnotationClassLoader.php b/src/Symfony/Component/Routing/Loader/AnnotationClassLoader.php
index f175d341e7564..62ad9c3f9fae0 100644
--- a/src/Symfony/Component/Routing/Loader/AnnotationClassLoader.php
+++ b/src/Symfony/Component/Routing/Loader/AnnotationClassLoader.php
@@ -139,7 +139,7 @@ protected function addRoute(RouteCollection $collection, $annot, $globals, \Refl
$defaults = array_replace($globals['defaults'], $annot->getDefaults());
foreach ($method->getParameters() as $param) {
- if (!isset($defaults[$param->getName()]) && $param->isDefaultValueAvailable()) {
+ if (false !== strpos($globals['path'].$annot->getPath(), sprintf('{%s}', $param->getName())) && !isset($defaults[$param->getName()]) && $param->isDefaultValueAvailable()) {
$defaults[$param->getName()] = $param->getDefaultValue();
}
}
diff --git a/src/Symfony/Component/Routing/Tests/Loader/AnnotationClassLoaderTest.php b/src/Symfony/Component/Routing/Tests/Loader/AnnotationClassLoaderTest.php
index 83bf7108fb28b..44229633b5cbc 100644
--- a/src/Symfony/Component/Routing/Tests/Loader/AnnotationClassLoaderTest.php
+++ b/src/Symfony/Component/Routing/Tests/Loader/AnnotationClassLoaderTest.php
@@ -136,11 +136,10 @@ public function testLoad($className, $routeData = array(), $methodArgs = array()
array_intersect_assoc($routeData['options'], $route->getOptions()),
'->load preserves options annotation'
);
- $defaults = array_replace($methodArgs, $routeData['defaults']);
$this->assertCount(
- count($defaults),
- array_intersect_assoc($defaults, $route->getDefaults()),
- '->load preserves defaults annotation and merges them with default arguments in method signature'
+ count($routeData['defaults']),
+ $route->getDefaults(),
+ '->load preserves defaults annotation'
);
$this->assertEquals($routeData['schemes'], $route->getSchemes(), '->load preserves schemes annotation');
$this->assertEquals($routeData['methods'], $route->getMethods(), '->load preserves methods annotation');
diff --git a/src/Symfony/Component/Serializer/Tests/Encoder/JsonDecodeTest.php b/src/Symfony/Component/Serializer/Tests/Encoder/JsonDecodeTest.php
index c87ab21b510a2..7818aeaf55df8 100644
--- a/src/Symfony/Component/Serializer/Tests/Encoder/JsonDecodeTest.php
+++ b/src/Symfony/Component/Serializer/Tests/Encoder/JsonDecodeTest.php
@@ -61,7 +61,7 @@ public function decodeProvider()
*/
public function testDecodeWithException($value)
{
- $this->decode->decode($value, JsonEncoder::FORMAT);
+ $this->decode->decode($value, JsonEncoder::FORMAT);
}
public function decodeProviderException()
diff --git a/src/Symfony/Component/Serializer/Tests/Encoder/JsonEncodeTest.php b/src/Symfony/Component/Serializer/Tests/Encoder/JsonEncodeTest.php
index d255b21d22e7f..291c0f0965c80 100644
--- a/src/Symfony/Component/Serializer/Tests/Encoder/JsonEncodeTest.php
+++ b/src/Symfony/Component/Serializer/Tests/Encoder/JsonEncodeTest.php
@@ -54,6 +54,6 @@ public function encodeProvider()
*/
public function testEncodeWithError()
{
- $this->encode->encode("\xB1\x31", JsonEncoder::FORMAT);
+ $this->encode->encode("\xB1\x31", JsonEncoder::FORMAT);
}
}
diff --git a/src/Symfony/Component/Translation/Tests/Dumper/FileDumperTest.php b/src/Symfony/Component/Translation/Tests/Dumper/FileDumperTest.php
index e98443246b20a..75aba4d5d2765 100644
--- a/src/Symfony/Component/Translation/Tests/Dumper/FileDumperTest.php
+++ b/src/Symfony/Component/Translation/Tests/Dumper/FileDumperTest.php
@@ -26,7 +26,7 @@ public function testDump()
$dumper = new ConcreteFileDumper();
$dumper->dump($catalogue, array('path' => $tempDir));
- $this->assertTrue(file_exists($tempDir.'/messages.en.concrete'));
+ $this->assertFileExists($tempDir.'/messages.en.concrete');
}
public function testDumpBackupsFileIfExisting()
diff --git a/src/Symfony/Component/Translation/Util/ArrayConverter.php b/src/Symfony/Component/Translation/Util/ArrayConverter.php
index 60a55e9d3709c..9c0a420a8592f 100644
--- a/src/Symfony/Component/Translation/Util/ArrayConverter.php
+++ b/src/Symfony/Component/Translation/Util/ArrayConverter.php
@@ -62,7 +62,7 @@ private static function &getElementByPath(array &$tree, array $parts)
* $tree['foo'] was string before we found array {bar: test2}.
* Treat new element as string too, e.g. add $tree['foo.bar'] = 'test2';
*/
- $elem = &$elem[ implode('.', array_slice($parts, $i)) ];
+ $elem = &$elem[implode('.', array_slice($parts, $i))];
break;
}
$parentOfElem = &$elem;
diff --git a/src/Symfony/Component/Validator/Constraints/BicValidator.php b/src/Symfony/Component/Validator/Constraints/BicValidator.php
index f476713c74d14..d2188071fabf1 100644
--- a/src/Symfony/Component/Validator/Constraints/BicValidator.php
+++ b/src/Symfony/Component/Validator/Constraints/BicValidator.php
@@ -17,7 +17,7 @@
/**
* @author Michael Hirschler
*
- * @link https://en.wikipedia.org/wiki/ISO_9362#Structure
+ * @see https://en.wikipedia.org/wiki/ISO_9362#Structure
*/
class BicValidator extends ConstraintValidator
{
diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.de.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.de.xlf
index 541ebaa0a8f85..192b992f8f3ba 100644
--- a/src/Symfony/Component/Validator/Resources/translations/validators.de.xlf
+++ b/src/Symfony/Component/Validator/Resources/translations/validators.de.xlf
@@ -192,7 +192,7 @@
No temporary folder was configured in php.ini.
- Es wurde kein temporärer Ordner in der php.ini konfiguriert.
+ Es wurde kein temporärer Ordner in der php.ini konfiguriert oder der temporäre Ordner existiert nicht.
Cannot write temporary file to disk.
diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.en.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.en.xlf
index ec072eb716dfc..2a5c97d8cf2d0 100644
--- a/src/Symfony/Component/Validator/Resources/translations/validators.en.xlf
+++ b/src/Symfony/Component/Validator/Resources/translations/validators.en.xlf
@@ -192,7 +192,7 @@
No temporary folder was configured in php.ini.
- No temporary folder was configured in php.ini.
+ No temporary folder was configured in php.ini, or the configured folder does not exist.
Cannot write temporary file to disk.
diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.hr.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.hr.xlf
index a11e825ccadad..8c62d899fdaec 100644
--- a/src/Symfony/Component/Validator/Resources/translations/validators.hr.xlf
+++ b/src/Symfony/Component/Validator/Resources/translations/validators.hr.xlf
@@ -278,6 +278,42 @@
This value should not be identical to {{ compared_value_type }} {{ compared_value }}.
Ova vrijednost ne bi trebala biti {{ compared_value_type }} {{ compared_value }}.
+
+ The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.
+ Omjer slike je prevelik ({{ ratio }}). Dozvoljeni maksimalni omjer je {{ max_ratio }}.
+
+
+ The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.
+ Omjer slike je premali ({{ ratio }}). Minimalni očekivani omjer je {{ min_ratio }}.
+
+
+ The image is square ({{ width }}x{{ height }}px). Square images are not allowed.
+ Slika je kvadratnog oblika ({{ width }}x{{ height }}px). Kvadratne slike nisu dozvoljene.
+
+
+ The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.
+ Slika je orijentirana horizontalno ({{ width }}x{{ height }}px). Horizontalno orijentirane slike nisu dozvoljene.
+
+
+ The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.
+ Slika je orijentirana vertikalno ({{ width }}x{{ height }}px). Vertikalno orijentirane slike nisu dozvoljene.
+
+
+ An empty file is not allowed.
+ Prazna datoteka nije dozvoljena.
+
+
+ The host could not be resolved.
+ Poslužitelj nije mogao biti razriješen.
+
+
+ This value does not match the expected {{ charset }} charset.
+ Znakovne oznake vrijednosti ne odgovaraju očekivanom {{ charset }} skupu.
+
+
+ This is not a valid Business Identifier Code (BIC).
+ Ovo nije validan poslovni identifikacijski broj (BIC).
+