Merge branch '2.8'

Conflicts:
	CHANGELOG-2.3.md
	CHANGELOG-2.7.md
	composer.json
	src/Symfony/Bridge/Twig/composer.json
	src/Symfony/Bundle/FrameworkBundle/composer.json
	src/Symfony/Bundle/SecurityBundle/composer.json
	src/Symfony/Component/Console/Tests/Helper/LegacyProgressHelperTest.php
	src/Symfony/Component/Console/Tests/Helper/LegacyTableHelperTest.php
	src/Symfony/Component/Console/composer.json
	src/Symfony/Component/DomCrawler/composer.json
	src/Symfony/Component/Form/Tests/FormRegistryTest.php
	src/Symfony/Component/Form/composer.json
	src/Symfony/Component/HttpFoundation/composer.json
	src/Symfony/Component/HttpKernel/Tests/Profiler/MongoDbProfilerStorageTest.php
	src/Symfony/Component/Intl/composer.json
	src/Symfony/Component/Ldap/composer.json
	src/Symfony/Component/Security/Core/composer.json
	src/Symfony/Component/Security/Csrf/composer.json
	src/Symfony/Component/Security/Http/composer.json
	src/Symfony/Component/Security/composer.json
	src/Symfony/Component/Serializer/Encoder/JsonEncoder.php
	src/Symfony/Component/Serializer/composer.json
	src/Symfony/Component/Templating/PhpEngine.php
	src/Symfony/Component/Translation/composer.json
	src/Symfony/Component/VarDumper/Tests/HtmlDumperTest.php
	src/Symfony/Component/VarDumper/composer.json
This commit is contained in:
Tobias Schultze 2015-10-29 13:12:54 +01:00
commit d0acda84f2
120 changed files with 425 additions and 797 deletions

View File

@ -10,8 +10,8 @@ Symfony is the result of the work of many people who made the code better
- Tobias Schultze (tobion)
- Victor Berchet (victor)
- Jordi Boggiano (seldaek)
- Johannes S (johannes)
- Christophe Coevoet (stof)
- Johannes S (johannes)
- Kris Wallsmith (kriswallsmith)
- Jakub Zalas (jakubzalas)
- Christian Flothmann (xabbuh)
@ -28,12 +28,12 @@ Symfony is the result of the work of many people who made the code better
- Benjamin Eberlei (beberlei)
- Igor Wiedler (igorw)
- Martin Hasoň (hason)
- Wouter De Jong (wouterj)
- Eriksen Costa (eriksencosta)
- Grégoire Pineau (lyrixx)
- Wouter De Jong (wouterj)
- Javier Eguiluz (javier.eguiluz)
- Jonathan Wage (jwage)
- Kévin Dunglas (dunglas)
- Jonathan Wage (jwage)
- Alexandre Salomé (alexandresalome)
- William Durand (couac)
- ornicar
@ -52,16 +52,18 @@ Symfony is the result of the work of many people who made the code better
- Eric Clemmons (ericclemmons)
- Andrej Hudec (pulzarraider)
- Deni
- Maxime Steinhausser (ogizanagi)
- Henrik Westphal (snc)
- Dariusz Górecki (canni)
- Arnout Boks (aboks)
- Gábor Egyed (1ed)
- Christian Raue
- Arnout Boks (aboks)
- Michel Weimerskirch (mweimerskirch)
- Kevin Bond (kbond)
- Lee McDermott
- Brandon Turner
- Luis Cordova (cordoval)
- Douglas Greenshields (shieldo)
- Kevin Bond (kbond)
- Daniel Holmes (dholmes)
- Bart van den Burg (burgov)
- Jordan Alliot (jalliot)
@ -69,18 +71,16 @@ Symfony is the result of the work of many people who made the code better
- Fran Moreno (franmomu)
- Antoine Hérault (herzult)
- Toni Uebernickel (havvg)
- Gábor Egyed (1ed)
- Matthias Pigulla (mpdude)
- Arnaud Le Blanc (arnaud-lb)
- Maxime Steinhausser (ogizanagi)
- Tim Nagel (merk)
- Brice BERNARD (brikou)
- Jérôme Tamarelle (gromnan)
- marc.weistroff
- lenar
- Graham Campbell (graham)
- Włodzimierz Gajda (gajdaw)
- Jérôme Tamarelle (gromnan)
- Florian Voutzinos (florianv)
- Matthias Pigulla (mpdude)
- Colin Frei
- Adrien Brault (adrienbrault)
- excelwebzone
@ -88,6 +88,7 @@ Symfony is the result of the work of many people who made the code better
- Fabien Pennequin (fabienpennequin)
- Peter Rehm (rpet)
- Peter Kokot (maastermedia)
- Alexander Schwenn (xelaris)
- Gordon Franke (gimler)
- Robert Schönthal (digitalkaoz)
- Jérémy DERUSSÉ (jderusse)
@ -95,26 +96,26 @@ Symfony is the result of the work of many people who made the code better
- Michal Piotrowski (eventhorizon)
- Stefano Sala (stefano.sala)
- David Buchmann (dbu)
- Alexander Schwenn (xelaris)
- Issei Murasawa (issei_m)
- Iltar van der Berg (kjarli)
- Juti Noppornpitak (shiroyuki)
- Eric GELOEN (gelo)
- Sebastian Hörl (blogsh)
- Daniel Gomes (danielcsgomes)
- Hidenori Goto (hidenorigoto)
- Joshua Thijssen
- Guilherme Blanco (guilhermeblanco)
- Iltar van der Berg (kjarli)
- Pablo Godel (pgodel)
- Vladimir Reznichenko (kalessil)
- Jérémie Augustin (jaugustin)
- Sebastiaan Stok (sstok)
- Issei Murasawa (issei_m)
- Rafael Dohms (rdohms)
- Arnaud Kleinpeter (nanocom)
- Joshua Thijssen
- Tigran Azatyan (tigranazatyan)
- Richard Shank (iampersistent)
- Clemens Tolboom
- Helmer Aaviksoo
- Baptiste Clavié (talus)
- Hiromi Hishida (77web)
- Matthieu Ouellette-Vachon (maoueh)
- Michał Pipa (michal.pipa)
@ -122,6 +123,9 @@ Symfony is the result of the work of many people who made the code better
- Jonathan Ingram (jonathaningram)
- Artur Kotyrba
- Rouven Weßling (realityking)
- Charles Sarrazin (csarrazi)
- Pierre du Plessis (pierredup)
- Tugdual Saunier (tucksaun)
- Andréia Bohner (andreia)
- Dmitrii Chekaliuk (lazyhammer)
- Clément JOBEILI (dator)
@ -131,11 +135,13 @@ Symfony is the result of the work of many people who made the code better
- hacfi (hifi)
- Mario A. Alvarez Garcia (nomack84)
- Dennis Benkert (denderello)
- Alexander M. Turek (derrabus)
- Konstantin Myakshin (koc)
- Benjamin Dulau (dbenjamin)
- Andreas Hucks (meandmymonkey)
- Mikael Pajunen
- Noel Guilbert (noel)
- Joel Wurtz (brouznouf)
- Charles Sarrazin (csarrazi)
- bronze1man
- sun (sun)
- Larry Garfield (crell)
@ -146,19 +152,19 @@ Symfony is the result of the work of many people who made the code better
- fivestar
- Dominique Bongiraud
- Leszek Prabucki (l3l0)
- Alexander M. Turek (derrabus)
- François Zaninotto (fzaninotto)
- Dustin Whittle (dustinwhittle)
- jeff
- John Kary (johnkary)
- Justin Hileman (bobthecow)
- Michele Orselli (orso)
- Sven Paulus (subsven)
- Warnar Boekkooi (boekkooi)
- Lars Strojny (lstrojny)
- Rui Marinho (ruimarinho)
- Mikael Pajunen
- Julien Brochet (mewt)
- Tugdual Saunier (tucksaun)
- Sergey Linnik (linniksa)
- Jáchym Toušek
- Marcel Beerta (mazen)
- Vincent AUBERT (vincent)
- julien pauli (jpauli)
@ -166,12 +172,10 @@ Symfony is the result of the work of many people who made the code better
- Alexander Kotynia (olden)
- Daniel Tschinder
- Elnur Abdurrakhimov (elnur)
- John Kary (johnkary)
- Manuel Reinhard (sprain)
- Danny Berger (dpb587)
- Roman Marintšenko (inori)
- Xavier Montaña Carreras (xmontana)
- Michele Orselli (orso)
- Chris Wilkinson (thewilkybarkid)
- Xavier Perez
- Arjen Brouwer (arjenjb)
@ -192,10 +196,10 @@ Symfony is the result of the work of many people who made the code better
- Nikita Konstantinov
- Wodor Wodorski
- Matthieu Auger (matthieuauger)
- Michael Lee (zerustech)
- Sébastien Lavoie (lavoiesl)
- Beau Simensen (simensen)
- Robert Kiss (kepten)
- Konstantin Myakshin (koc)
- Ruben Gonzalez (rubenrua)
- Kim Hemsø Rasmussen (kimhemsoe)
- Diego Saint Esteben (dosten)
@ -205,6 +209,7 @@ Symfony is the result of the work of many people who made the code better
- Peter Kruithof (pkruithof)
- Michael Holm (hollo)
- Marc Weistroff (futurecat)
- Dawid Nowak
- Kristen Gilden (kgilden)
- Chris Smith (cs278)
- Florian Klein (docteurklein)
@ -220,6 +225,7 @@ Symfony is the result of the work of many people who made the code better
- Thomas Tourlourat (armetiz)
- Andrey Esaulov (andremaha)
- Grégoire Passault (gregwar)
- Ismael Ambrosi (iambrosi)
- Uwe Jäger (uwej711)
- Aurelijus Valeiša (aurelijus)
- Jan Decavele (jandc)
@ -248,6 +254,7 @@ Symfony is the result of the work of many people who made the code better
- Inal DJAFAR (inalgnu)
- Christian Gärtner (dagardner)
- Tomasz Kowalczyk (thunderer)
- François-Xavier de Guillebon (de-gui_f)
- Daniel Wehner
- Felix Labrecque
- Yaroslav Kiliba
@ -256,7 +263,6 @@ Symfony is the result of the work of many people who made the code better
- Evgeniy (ewgraf)
- Robbert Klarenbeek (robbertkl)
- Blanchon Vincent (blanchonvincent)
- Dawid Nowak
- hossein zolfi (ocean)
- Clément Gautier (clementgautier)
- Eduardo Gulias (egulias)
@ -265,7 +271,6 @@ Symfony is the result of the work of many people who made the code better
- Philipp Kräutli (pkraeutli)
- Kirill chEbba Chebunin (chebba)
- Greg Thornton (xdissent)
- Baptiste Clavié (talus)
- Costin Bereveanu (schniper)
- Loïc Chardonnet (gnusat)
- Marek Kalnik (marekkalnik)
@ -277,7 +282,6 @@ Symfony is the result of the work of many people who made the code better
- Pavel Volokitin (pvolok)
- Endre Fejes
- Tobias Naumann (tna)
- Ismael Ambrosi (iambrosi)
- Shein Alexey
- Joe Lencioni
- Daniel Tschinder
@ -298,7 +302,6 @@ Symfony is the result of the work of many people who made the code better
- Christophe L. (christophelau)
- Massimiliano Arione (garak)
- Anthon Pang (robocoder)
- Jáchym Toušek
- Jannik Zschiesche (apfelbox)
- Emanuele Gaspari (inmarelibero)
- Dariusz Rumiński
@ -308,12 +311,10 @@ Symfony is the result of the work of many people who made the code better
- Jeanmonod David (jeanmonod)
- Berny Cantos (xphere81)
- Thomas Lallement (raziel057)
- Michael Lee (zerustech)
- Jan Schumann
- Niklas Fiekas
- lancergr
- Antonio J. García Lagar (ajgarlag)
- Pierre du Plessis (pierredup)
- Olivier Dolbeau (odolbeau)
- Roumen Damianoff (roumen)
- vagrant
@ -329,11 +330,11 @@ Symfony is the result of the work of many people who made the code better
- Christian Schmidt
- Marcin Sikoń (marphi)
- Dominik Zogg (dominik.zogg)
- Mathieu Lemoine
- franek (franek)
- Damien Alexandre (damienalexandre)
- Adam Harvey
- Alex Bakhturin
- François-Xavier de Guillebon (de-gui_f)
- boombatower
- Fabrice Bernhard (fabriceb)
- Jérôme Macias (jeromemacias)
@ -364,6 +365,7 @@ Symfony is the result of the work of many people who made the code better
- Daniel Beyer
- Andrew Udvare (audvare)
- alexpods
- Richard van Laak (rvanlaak)
- Erik Trapman (eriktrapman)
- De Cock Xavier (xdecock)
- Scott Arciszewski
@ -379,12 +381,15 @@ Symfony is the result of the work of many people who made the code better
- Dawid Pakuła (zulusx)
- Florian Rey (nervo)
- Rodrigo Borrego Bernabé (rodrigobb)
- MatTheCat
- John Bafford (jbafford)
- Denis Gorbachev (starfall)
- Titouan Galopin (tgalopin)
- Steven Surowiec
- Kevin Saliou (kbsali)
- Ryan
- Alexander Deruwe (aderuwe)
- Alain Hippolyte (aloneh)
- Dave Hulbert (dave1010)
- François Pluchino (francoispluchino)
- Ivan Rey (ivanrey)
@ -445,6 +450,7 @@ Symfony is the result of the work of many people who made the code better
- umpirski
- Chris Heng (gigablah)
- Ulumuddin Yunus (joenoez)
- Florian Pfitzer (marmelatze)
- Luc Vieillescazes (iamluc)
- Johann Saunier (prophet777)
- Antoine Corcy
@ -471,7 +477,6 @@ Symfony is the result of the work of many people who made the code better
- develop
- Mark Sonnabaum
- Alexander Obuhovich (aik099)
- Mathieu Lemoine
- jochenvdv
- Filippo Tessarotto
- Arturas Smorgun (asarturas)
@ -538,7 +543,7 @@ Symfony is the result of the work of many people who made the code better
- Abhoryo
- Fabian Vogler (fabian)
- Korvin Szanto
- MatTheCat
- Alaattin Kahramanlar (alaattin)
- Maksim Kotlyar (makasim)
- Neil Ferreira
- Dmitry Parnas (parnas)
@ -555,21 +560,19 @@ Symfony is the result of the work of many people who made the code better
- Matt Robinson (inanimatt)
- Tristan Darricau (nicofuma)
- Aleksey Podskrebyshev
- Steffen Roßkamp
- David Marín Carreño (davefx)
- Jörn Lang (j.lang)
- Leo Feyer
- John Bafford (jbafford)
- mwsaz
- Benoît Bourgeois
- corphi
- grizlik
- Derek ROTH
- Alain Hippolyte (aloneh)
- Shin Ohno (ganchiku)
- Geert De Deckere (geertdd)
- Jan Kramer (jankramer)
- Jean-Baptiste GOMOND (mjbgo)
- Richard van Laak (rvanlaak)
- abdul malik ikhsan (samsonasik)
- Henry Snoek (snoek09)
- Timothée Barray (tyx)
@ -596,6 +599,7 @@ Symfony is the result of the work of many people who made the code better
- Daniel Cestari
- Brunet Laurent (lbrunet)
- Magnus Nordlander (magnusnordlander)
- Michiel Boeckaert (milio)
- Mikhail Yurasov (mym)
- LOUARDI Abdeltif (ouardisoft)
- Robert Gruendler (pulse00)
@ -620,6 +624,7 @@ Symfony is the result of the work of many people who made the code better
- Chris Jones (leek)
- Colin O'Dell (colinodell)
- xaav
- Jean-Christophe Cuvelier [Artack]
- Mahmoud Mostafa (mahmoud)
- Michael Tibben
- Sander Marechal
@ -628,6 +633,7 @@ Symfony is the result of the work of many people who made the code better
- Mei Gwilym (meigwilym)
- Michael H. Arieli (excelwebzone)
- Luciano Mammino (loige)
- Michael Hirschler (mvhirsch)
- fabios
- Jérôme Vasseur
- Sander Coolen (scoolen)
@ -668,15 +674,18 @@ Symfony is the result of the work of many people who made the code better
- Ville Mattila
- Boris Vujicic (boris.vujicic)
- Max Beutel
- Michal Trojanowski
- Catalin Dan
- nacho
- Piotr Antosik (antek88)
- Artem Lopata
- Samuel ROZE (sroze)
- Sergey Novikov (s12v)
- Marcos Quesada (marcos_quesada)
- Matthew Vickery (mattvick)
- Dan Finnie
- Ken Marfilla (marfillaster)
- Max Grigorian (maxakawizard)
- benatespina (benatespina)
- Denis Kop
- jfcixmedia
@ -709,9 +718,11 @@ Symfony is the result of the work of many people who made the code better
- Jochen Bayer (jocl)
- Jeremy Bush
- wizhippo
- Viacheslav Sychov
- rpg600
- Péter Buri (burci)
- Davide Borsatto (davide.borsatto)
- Teoh Han Hui (teohhanhui)
- kaiwa
- Charles Sanquer (csanquer)
- Albert Ganiev (helios-ag)
@ -723,9 +734,11 @@ Symfony is the result of the work of many people who made the code better
- Artem Kolesnikov (tyomo4ka)
- Gustavo Adrian
- Yannick
- spdionis
- Eduardo García Sanz (coma)
- James Gilliland
- Roy Van Ginneken
- Stephan Vock
- David de Boer (ddeboer)
- Gilles Doge (gido)
- abulford
@ -768,7 +781,9 @@ Symfony is the result of the work of many people who made the code better
- ConneXNL
- Aharon Perkel
- Abdul.Mohsen B. A. A
- Gintautas Miselis
- Benoît Burnichon
- Remi Collet
- pthompson
- Malaney J. Hill
- Christian Flach (cmfcmf)
@ -806,6 +821,7 @@ Symfony is the result of the work of many people who made the code better
- Berat Doğan
- twifty
- Anthony Ferrara
- Klaas Cuvelier (kcuvelier)
- ShiraNai7
- Janusz Jabłoński (yanoosh)
- George Giannoulopoulos
@ -868,6 +884,7 @@ Symfony is the result of the work of many people who made the code better
- Thomas Chmielowiec (chmielot)
- Jānis Lukss
- rkerner
- Alex Silcock
- Rob Bast
- Matthew J Mucklo
- fdgdfg (psampaz)
@ -964,12 +981,14 @@ Symfony is the result of the work of many people who made the code better
- Botond Dani (picur)
- Thierry Marianne (thierrymarianne)
- Nick Stemerdink
- David Stone
- jjanvier
- Julius Beckmann
- Romain Dorgueil
- Grayson Koonce (breerly)
- Karim Cassam Chenaï (ka)
- Nicolas Bastien (nicolas_bastien)
- Denis (yethee)
- Andrew Zhilin (zhil)
- Andy Stanberry
- Luiz “Felds” Liscia
@ -977,6 +996,7 @@ Symfony is the result of the work of many people who made the code better
- alefranz
- avi123
- alsar
- Aarón Nieves Fernández
- Mike Meier
- Kirill Saksin
- michalmarcinkowski
@ -1025,6 +1045,7 @@ Symfony is the result of the work of many people who made the code better
- J Bruni
- Alexey Prilipko
- bertillon
- Victor Bocharsky (bocharsky_bw)
- Luca Genuzio (genuzio)
- Hans Nilsson (hansnilsson)
- Andrew Marcinkevičius (ifdattic)
@ -1037,6 +1058,7 @@ Symfony is the result of the work of many people who made the code better
- tante kinast (tante)
- Vincent LEFORT (vlefort)
- Sadicov Vladimir (xtech)
- Peter van Dommelen
- Alexander Zogheb
- Rémi Blaise
- Joel Marcey
@ -1053,7 +1075,6 @@ Symfony is the result of the work of many people who made the code better
- Grégory Pelletier (ip512)
- John Nickell (jrnickell)
- Julien DIDIER (juliendidier)
- Florian Pfitzer (marmelatze)
- Martin Mayer (martin)
- Grzegorz Łukaszewicz (newicz)
- Omar Yepez (oyepez003)
@ -1068,6 +1089,7 @@ Symfony is the result of the work of many people who made the code better
- Joseph Maarek
- Alexander Menk
- Alex Pods
- hadriengem
- timaschew
- Ian Phillips
- Haritz
@ -1080,12 +1102,12 @@ Symfony is the result of the work of many people who made the code better
- Per Modin
- David Windell
- Gabriel Birke
- Steffen Roßkamp
- skafandri
- Alan Chen
- Maerlyn
- Even André Fiskvik
- Diego Agulló
- Dane Powell
- Gerrit Drost
- Lenar Lõhmus
- Cristian Gonzalez
@ -1141,6 +1163,7 @@ Symfony is the result of the work of many people who made the code better
- Alexey Popkov
- Joseph Deray
- Damian Sromek
- Ben
- Arnaud Buathier (arnapou)
- chesteroni (chesteroni)
- Mauricio Lopez (diaspar)
@ -1205,6 +1228,7 @@ Symfony is the result of the work of many people who made the code better
- Brian Freytag
- Skorney
- mieszko4
- Steve Preston
- Neophy7e
- bokonet
- Arrilot
@ -1235,6 +1259,7 @@ Symfony is the result of the work of many people who made the code better
- DanSync
- Peter Zwosta
- parhs
- Diego Campoy
- TeLiXj
- Oncle Tom
- Christian Stocker
@ -1247,11 +1272,12 @@ Symfony is the result of the work of many people who made the code better
- ilyes kooli
- Matthias Althaus
- Michaël VEROUX
- Julia
- arduanov
- sualko
- Nicolas Roudaire
- Alfonso (afgar)
- Andreas Forsblom (aforsblo)
- Alaattin Kahramanlar (alaattin)
- Alex Olmos (alexolmos)
- Antonio Mansilla (amansilla)
- Juan Ases García (ases)
@ -1305,6 +1331,7 @@ Symfony is the result of the work of many people who made the code better
- Philipp Hoffmann (philipphoffmann)
- Alex Carol (picard89)
- Daniel Perez Pinazo (pitiflautico)
- Brayden Williams (redstar504)
- Rich Sage (richsage)
- Ruud Kamphuis (ruudk)
- Bart Ruysseveldt (ruyss)
@ -1325,6 +1352,7 @@ Symfony is the result of the work of many people who made the code better
- Vincent (vincent1870)
- Eugene Babushkin (warl)
- Xavier Amado (xamado)
- Yonel Ceruto González (yonelceruto)
- Jesper Søndergaard Pedersen (zerrvox)
- Florent Cailhol
- szymek
@ -1349,7 +1377,6 @@ Symfony is the result of the work of many people who made the code better
- Maxime COLIN (maximecolin)
- Muharrem Demirci (mdemirci)
- Evgeny Z (meze)
- Michiel Boeckaert (milio)
- Nicolas de Marqué (nicola)
- Kevin (oxfouzer)
- Pierre Geyer (ptheg)

View File

@ -20,7 +20,14 @@
"doctrine/common": "~2.4",
"twig/twig": "~1.20|~2.0",
"psr/log": "~1.0",
"paragonie/random_compat": "~1.0"
"symfony/security-acl": "~2.7",
"symfony/polyfill-intl-icu": "~1.0",
"symfony/polyfill-mbstring": "~1.0",
"symfony/polyfill-php54": "~1.0",
"symfony/polyfill-php55": "~1.0",
"symfony/polyfill-php56": "~1.0",
"symfony/polyfill-php70": "~1.0",
"symfony/polyfill-util": "~1.0"
},
"replace": {
"symfony/asset": "self.version",
@ -93,10 +100,8 @@
"Symfony\\Component\\": "src/Symfony/Component/"
},
"classmap": [
"src/Symfony/Component/HttpFoundation/Resources/stubs",
"src/Symfony/Component/Intl/Resources/stubs"
],
"files": [ "src/Symfony/Component/Intl/Resources/stubs/functions.php" ]
]
},
"minimum-stability": "dev",
"extra": {

View File

@ -117,6 +117,9 @@ class DoctrineDataCollector extends DataCollector
private function sanitizeQuery($connectionName, $query)
{
$query['explainable'] = true;
if (null === $query['params']) {
$query['params'] = array();
}
if (!is_array($query['params'])) {
$query['params'] = array($query['params']);
}

View File

@ -39,7 +39,7 @@ class DoctrineOrmTypeGuesser implements FormTypeGuesserInterface
public function guessType($class, $property)
{
if (!$ret = $this->getMetadata($class)) {
return new TypeGuess('text', array(), Guess::LOW_CONFIDENCE);
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\TextType', array(), Guess::LOW_CONFIDENCE);
}
list($metadata, $name) = $ret;
@ -48,35 +48,35 @@ class DoctrineOrmTypeGuesser implements FormTypeGuesserInterface
$multiple = $metadata->isCollectionValuedAssociation($property);
$mapping = $metadata->getAssociationMapping($property);
return new TypeGuess('entity', array('em' => $name, 'class' => $mapping['targetEntity'], 'multiple' => $multiple), Guess::HIGH_CONFIDENCE);
return new TypeGuess('Symfony\Bridge\Doctrine\Form\Type\EntityType', array('em' => $name, 'class' => $mapping['targetEntity'], 'multiple' => $multiple), Guess::HIGH_CONFIDENCE);
}
switch ($metadata->getTypeOfField($property)) {
case Type::TARRAY:
return new TypeGuess('collection', array(), Guess::MEDIUM_CONFIDENCE);
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\CollectionType', array(), Guess::MEDIUM_CONFIDENCE);
case Type::BOOLEAN:
return new TypeGuess('checkbox', array(), Guess::HIGH_CONFIDENCE);
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\CheckboxType', array(), Guess::HIGH_CONFIDENCE);
case Type::DATETIME:
case Type::DATETIMETZ:
case 'vardatetime':
return new TypeGuess('datetime', array(), Guess::HIGH_CONFIDENCE);
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\DateTimeType', array(), Guess::HIGH_CONFIDENCE);
case Type::DATE:
return new TypeGuess('date', array(), Guess::HIGH_CONFIDENCE);
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\DateType', array(), Guess::HIGH_CONFIDENCE);
case Type::TIME:
return new TypeGuess('time', array(), Guess::HIGH_CONFIDENCE);
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\TimeType', array(), Guess::HIGH_CONFIDENCE);
case Type::DECIMAL:
case Type::FLOAT:
return new TypeGuess('number', array(), Guess::MEDIUM_CONFIDENCE);
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\NumberType', array(), Guess::MEDIUM_CONFIDENCE);
case Type::INTEGER:
case Type::BIGINT:
case Type::SMALLINT:
return new TypeGuess('integer', array(), Guess::MEDIUM_CONFIDENCE);
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\IntegerType', array(), Guess::MEDIUM_CONFIDENCE);
case Type::STRING:
return new TypeGuess('text', array(), Guess::MEDIUM_CONFIDENCE);
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\TextType', array(), Guess::MEDIUM_CONFIDENCE);
case Type::TEXT:
return new TypeGuess('textarea', array(), Guess::MEDIUM_CONFIDENCE);
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\TextareaType', array(), Guess::MEDIUM_CONFIDENCE);
default:
return new TypeGuess('text', array(), Guess::LOW_CONFIDENCE);
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\TextType', array(), Guess::LOW_CONFIDENCE);
}
}

View File

@ -99,16 +99,9 @@ class DbalLogger implements SQLLogger
}
// detect if the too long string must be shorten
if (function_exists('mb_strlen')) {
if (self::MAX_STRING_LENGTH < mb_strlen($params[$index], 'UTF-8')) {
$params[$index] = mb_substr($params[$index], 0, self::MAX_STRING_LENGTH - 6, 'UTF-8').' [...]';
continue;
}
} else {
if (self::MAX_STRING_LENGTH < strlen($params[$index])) {
$params[$index] = substr($params[$index], 0, self::MAX_STRING_LENGTH - 6).' [...]';
continue;
}
if (self::MAX_STRING_LENGTH < iconv_strlen($params[$index], 'UTF-8')) {
$params[$index] = iconv_substr($params[$index], 0, self::MAX_STRING_LENGTH - 6, 'UTF-8').' [...]';
continue;
}
}

View File

@ -79,9 +79,25 @@ class DoctrineDataCollectorTest extends \PHPUnit_Framework_TestCase
$c = $this->createCollector($queries);
$c->collect(new Request(), new Response());
$collected_queries = $c->getQueries();
$this->assertEquals($expected, $collected_queries['default'][0]['params'][0]);
$this->assertEquals($explainable, $collected_queries['default'][0]['explainable']);
$collectedQueries = $c->getQueries();
$this->assertEquals($expected, $collectedQueries['default'][0]['params'][0]);
$this->assertEquals($explainable, $collectedQueries['default'][0]['explainable']);
}
public function testCollectQueryWithNoParams()
{
$queries = array(
array('sql' => 'SELECT * FROM table1', 'params' => array(), 'types' => array(), 'executionMS' => 1),
array('sql' => 'SELECT * FROM table1', 'params' => null, 'types' => null, 'executionMS' => 1),
);
$c = $this->createCollector($queries);
$c->collect(new Request(), new Response());
$collectedQueries = $c->getQueries();
$this->assertEquals(array(), $collectedQueries['default'][0]['params']);
$this->assertTrue($collectedQueries['default'][0]['explainable']);
$this->assertEquals(array(), $collectedQueries['default'][1]['params']);
$this->assertTrue($collectedQueries['default'][1]['explainable']);
}
/**
@ -96,9 +112,9 @@ class DoctrineDataCollectorTest extends \PHPUnit_Framework_TestCase
$c->collect(new Request(), new Response());
$c = unserialize(serialize($c));
$collected_queries = $c->getQueries();
$this->assertEquals($expected, $collected_queries['default'][0]['params'][0]);
$this->assertEquals($explainable, $collected_queries['default'][0]['explainable']);
$collectedQueries = $c->getQueries();
$this->assertEquals($expected, $collectedQueries['default'][0]['params'][0]);
$this->assertEquals($explainable, $collectedQueries['default'][0]['explainable']);
}
public function paramProvider()

View File

@ -132,9 +132,6 @@ class DbalLoggerTest extends \PHPUnit_Framework_TestCase
));
}
/**
* @requires extension mbstring
*/
public function testLogUTF8LongString()
{
$logger = $this->getMock('Psr\\Log\\LoggerInterface');
@ -160,7 +157,7 @@ class DbalLoggerTest extends \PHPUnit_Framework_TestCase
$dbalLogger
->expects($this->once())
->method('log')
->with('SQL', array('short' => $shortString, 'long' => mb_substr($longString, 0, DbalLogger::MAX_STRING_LENGTH - 6, mb_detect_encoding($longString)).' [...]'))
->with('SQL', array('short' => $shortString, 'long' => mb_substr($longString, 0, DbalLogger::MAX_STRING_LENGTH - 6, 'UTF-8').' [...]'))
;
$dbalLogger->startQuery('SQL', array(

View File

@ -24,7 +24,6 @@ class SymfonyTestsListener extends \PHPUnit_Framework_BaseTestListener
private $skippedFile = false;
private $wasSkipped = array();
private $isSkipped = array();
private $testsStack = array();
public function __destruct()
{

View File

@ -24,7 +24,7 @@
"symfony/finder": "~2.8|~3.0",
"symfony/form": "~2.8|~3.0",
"symfony/http-kernel": "~2.8|~3.0",
"symfony/intl": "~2.8|~3.0",
"symfony/polyfill-intl-icu": "~1.0",
"symfony/routing": "~2.8|~3.0",
"symfony/templating": "~2.8|~3.0",
"symfony/translation": "~2.8|~3.0",

View File

@ -34,6 +34,10 @@ class ClassCacheCacheWarmer implements CacheWarmerInterface
return;
}
if (file_exists($cacheDir.'/classes.php')) {
return;
}
ClassCollectionLoader::load(include($classmap), $cacheDir, 'classes', false);
}

View File

@ -234,7 +234,7 @@ EOF
{
$string = trim(preg_replace('/\s+/', ' ', $string));
if (function_exists('mb_strlen') && false !== $encoding = mb_detect_encoding($string)) {
if (false !== $encoding = mb_detect_encoding($string, null, true)) {
if (mb_strlen($string, $encoding) > $length) {
return mb_substr($string, 0, $length - 3, $encoding).'...';
}

View File

@ -1,2 +1,2 @@
_fragmenttest_bundle:
resource: @TestBundle/Resources/config/routing.yml
resource: '@TestBundle/Resources/config/routing.yml'

View File

@ -1,2 +1,2 @@
_sessiontest_bundle:
resource: @TestBundle/Resources/config/routing.yml
resource: '@TestBundle/Resources/config/routing.yml'

View File

@ -1,2 +1,2 @@
_sessiontest_bundle:
resource: @TestBundle/Resources/config/routing.yml
resource: '@TestBundle/Resources/config/routing.yml'

View File

@ -24,6 +24,7 @@
"symfony/event-dispatcher": "~2.8|~3.0",
"symfony/http-foundation": "~2.8|~3.0",
"symfony/http-kernel": "~2.8|~3.0",
"symfony/polyfill-mbstring": "~1.0",
"symfony/filesystem": "~2.8|~3.0",
"symfony/routing": "~3.0",
"symfony/security-core": "~2.8|~3.0",
@ -40,7 +41,7 @@
"symfony/css-selector": "~2.8|~3.0",
"symfony/dom-crawler": "~2.8|~3.0",
"symfony/finder": "~2.8|~3.0",
"symfony/intl": "~2.8|~3.0",
"symfony/polyfill-intl-icu": "~1.0",
"symfony/security": "~2.8|~3.0",
"symfony/form": "~2.8|~3.0",
"symfony/expression-language": "~2.8|~3.0",

View File

@ -5,7 +5,7 @@ services:
csrf_form_login.form.type:
class: Symfony\Bundle\SecurityBundle\Tests\Functional\Bundle\CsrfFormLoginBundle\Form\UserLoginType
arguments:
- @request_stack
- '@request_stack'
tags:
- { name: form.type }

View File

@ -1,2 +1,2 @@
_csrf_form_login_bundle:
resource: @CsrfFormLoginBundle/Resources/config/routing.yml
resource: '@CsrfFormLoginBundle/Resources/config/routing.yml'

View File

@ -1,5 +1,5 @@
_form_login_bundle:
resource: @FormLoginBundle/Resources/config/routing.yml
resource: '@FormLoginBundle/Resources/config/routing.yml'
_form_login_localized:
resource: @FormLoginBundle/Resources/config/localized_routing.yml
resource: '@FormLoginBundle/Resources/config/localized_routing.yml'

View File

@ -19,11 +19,11 @@
"php": ">=5.5.9",
"symfony/security": "~2.8|~3.0",
"symfony/security-acl": "~2.8|~3.0",
"symfony/http-kernel": "~2.8|~3.0"
"symfony/http-kernel": "~2.8|~3.0",
"symfony/polyfill-php70": "~1.0"
},
"require-dev": {
"symfony/browser-kit": "~2.8|~3.0",
"symfony/config": "~2.8|~3.0",
"symfony/console": "~2.8|~3.0",
"symfony/css-selector": "~2.8|~3.0",
"symfony/dom-crawler": "~2.8|~3.0",

View File

@ -186,6 +186,7 @@ class ProfilerController
}
return new Response($this->twig->render('@WebProfiler/Profiler/toolbar.html.twig', array(
'request' => $request,
'position' => $position,
'profile' => $profile,
'templates' => $this->getTemplateManager()->getTemplates($profile),
@ -221,13 +222,13 @@ class ProfilerController
$limit =
$token = null;
} else {
$ip = $session->get('_profiler_search_ip');
$method = $session->get('_profiler_search_method');
$url = $session->get('_profiler_search_url');
$start = $session->get('_profiler_search_start');
$end = $session->get('_profiler_search_end');
$limit = $session->get('_profiler_search_limit');
$token = $session->get('_profiler_search_token');
$ip = $request->query->get('ip', $session->get('_profiler_search_ip'));
$method = $request->query->get('method', $session->get('_profiler_search_method'));
$url = $request->query->get('url', $session->get('_profiler_search_url'));
$start = $request->query->get('start', $session->get('_profiler_search_start'));
$end = $request->query->get('end', $session->get('_profiler_search_end'));
$limit = $request->query->get('limit', $session->get('_profiler_search_limit'));
$token = $request->query->get('token', $session->get('_profiler_search_token'));
}
return new Response(
@ -274,6 +275,7 @@ class ProfilerController
$limit = $request->query->get('limit');
return new Response($this->twig->render('@WebProfiler/Profiler/results.html.twig', array(
'request' => $request,
'token' => $token,
'profile' => $profile,
'tokens' => $this->profiler->find($ip, $url, $limit, $method, $start, $end),
@ -330,6 +332,7 @@ class ProfilerController
$tokens = $this->profiler->find($ip, $url, $limit, $method, $start, $end);
return new RedirectResponse($this->generator->generate('_profiler_search_results', array(
'request' => $request,
'token' => $tokens ? $tokens[0]['token'] : 'empty',
'ip' => $ip,
'method' => $method,

View File

@ -171,6 +171,8 @@
var text = requestStack.length + ' AJAX request' + (requestStack.length > 1 ? 's' : '');
infoSpan.textContent = text;
}
ajaxToolbarPanel.style.display = 'block';
} else {
ajaxToolbarPanel.style.display = 'none';
}

View File

@ -64,7 +64,7 @@
{{ include('@WebProfiler/Icon/search.svg') }} <span class="hidden-small">Search</span>
</a>
{{ render(path('_profiler_search_bar')) }}
{{ render(path('_profiler_search_bar', request.query.all)) }}
</div>
</div>

View File

@ -365,6 +365,32 @@ tr.status-warning td {
.highlight .number { color: #F5871F; font-weight: bold; }
.highlight .error { color: #C82829; }
{# Icons
========================================================================= #}
.sf-icon {
vertical-align: middle;
background-repeat: no-repeat;
background-size: contain;
width: 16px;
height: 16px;
display: inline-block;
}
.sf-icon svg {
width: 16px;
height: 16px;
}
.sf-icon.sf-medium,
.sf-icon.sf-medium svg {
width: 24px;
height: 24px;
}
.sf-icon.sf-large,
.sf-icon.sf-large svg {
width: 32px;
height: 32px;
}
{# Layout
========================================================================= #}
.container {
@ -849,6 +875,14 @@ table.logs .metadata strong {
vertical-align: middle;
}
#search-results .sf-search {
visibility: hidden;
margin-left: 2px;
}
#search-results tr:hover .sf-search {
visibility: visible;
}
{# Small screens
========================================================================= #}

View File

@ -31,9 +31,30 @@
<td class="text-center">
<span class="label {{ css_class }}">{{ result.status_code|default('n/a') }}</span>
</td>
<td class="nowrap">{{ result.ip }}</td>
<td>{{ result.method }}</td>
<td class="break-long-words">{{ result.url }}</td>
<td>
<span class="nowrap">{{ result.ip }}</span>
{% if request.session is not null %}
<a href="{{ path('_profiler_search_results', request.query.all|merge({'ip': result.ip, 'token': result.token})) }}" title="Search">
<span title="Search" class="sf-icon sf-search">{{ include('@WebProfiler/Icon/search.svg') }}</span>
</a>
{% endif %}
</td>
<td>
{{ result.method }}
{% if request.session is not null %}
<a href="{{ path('_profiler_search_results', request.query.all|merge({'method': result.method, 'token': result.token})) }}" title="Search">
<span title="Search" class="sf-icon sf-search">{{ include('@WebProfiler/Icon/search.svg') }}</span>
</a>
{% endif %}
</td>
<td class="break-long-words">
{{ result.url }}
{% if request.session is not null %}
<a href="{{ path('_profiler_search_results', request.query.all|merge({'url': result.url, 'token': result.token})) }}" title="Search">
<span title="Search" class="sf-icon sf-search">{{ include('@WebProfiler/Icon/search.svg') }}</span>
</a>
{% endif %}
</td>
<td class="text-small">
<span class="nowrap">{{ result.time|date('d-M-Y') }}</span>
<span class="nowrap newline">{{ result.time|date('H:i:s') }}</span>

View File

@ -1021,11 +1021,7 @@ class Application
private function stringWidth($string)
{
if (!function_exists('mb_strwidth')) {
return strlen($string);
}
if (false === $encoding = mb_detect_encoding($string)) {
if (false === $encoding = mb_detect_encoding($string, null, true)) {
return strlen($string);
}
@ -1037,12 +1033,7 @@ class Application
// str_split is not suitable for multi-byte characters, we should use preg_split to get char array properly.
// additionally, array_slice() is not enough as some character has doubled width.
// we need a function to split string not by character count but by string width
if (!function_exists('mb_strwidth')) {
return str_split($string, $width);
}
if (false === $encoding = mb_detect_encoding($string)) {
if (false === $encoding = mb_detect_encoding($string, null, true)) {
return str_split($string, $width);
}

View File

@ -51,11 +51,7 @@ abstract class Helper implements HelperInterface
*/
public static function strlen($string)
{
if (!function_exists('mb_strwidth')) {
return strlen($string);
}
if (false === $encoding = mb_detect_encoding($string)) {
if (false === $encoding = mb_detect_encoding($string, null, true)) {
return strlen($string);
}

View File

@ -351,7 +351,7 @@ class Table
}
// str_pad won't work properly with multi-byte strings, we need to fix the padding
if (function_exists('mb_strwidth') && false !== $encoding = mb_detect_encoding($cell)) {
if (false !== $encoding = mb_detect_encoding($cell, null, true)) {
$width += strlen($cell) - mb_strwidth($cell, $encoding);
}

View File

@ -534,9 +534,6 @@ class ApplicationTest extends \PHPUnit_Framework_TestCase
$this->assertStringEqualsFile(self::$fixturesPath.'/application_renderexception4.txt', $tester->getDisplay(true), '->renderException() wraps messages when they are bigger than the terminal');
}
/**
* @requires extension mbstring
*/
public function testRenderExceptionWithDoubleWidthCharacters()
{
$application = $this->getMock('Symfony\Component\Console\Application', array('getTerminalWidth'));

View File

@ -52,9 +52,6 @@ class FormatterHelperTest extends \PHPUnit_Framework_TestCase
);
}
/**
* @requires extension mbstring
*/
public function testFormatBlockWithDiacriticLetters()
{
$formatter = new FormatterHelper();
@ -68,9 +65,6 @@ class FormatterHelperTest extends \PHPUnit_Framework_TestCase
);
}
/**
* @requires extension mbstring
*/
public function testFormatBlockWithDoubleWidthDiacriticLetters()
{
$formatter = new FormatterHelper();

View File

@ -307,9 +307,6 @@ class ProgressBarTest extends \PHPUnit_Framework_TestCase
$bar->advance(1);
}
/**
* @requires extension mbstring
*/
public function testMultiByteSupport()
{
$bar = new ProgressBar($output = $this->getOutputStream());
@ -541,9 +538,6 @@ class ProgressBarTest extends \PHPUnit_Framework_TestCase
);
}
/**
* @requires extension mbstring
*/
public function testAnsiColorsAndEmojis()
{
$bar = new ProgressBar($output = $this->getOutputStream(), 15);

View File

@ -464,9 +464,6 @@ TABLE
);
}
/**
* @requires extension mbstring
*/
public function testRenderMultiByte()
{
$table = new Table($output = $this->getOutputStream());

View File

@ -16,7 +16,8 @@
}
],
"require": {
"php": ">=5.5.9"
"php": ">=5.5.9",
"symfony/polyfill-mbstring": "~1.0"
},
"require-dev": {
"symfony/event-dispatcher": "~2.8|~3.0",

View File

@ -153,10 +153,10 @@ class YamlDumper extends Dumper
private function addServiceAlias($alias, $id)
{
if ($id->isPublic()) {
return sprintf(" %s: @%s\n", $alias, $id);
} else {
return sprintf(" %s:\n alias: %s\n public: false", $alias, $id);
return sprintf(" %s: '@%s'\n", $alias, $id);
}
return sprintf(" %s:\n alias: %s\n public: false", $alias, $id);
}
/**

View File

@ -6,7 +6,7 @@ parameters:
- 0
- 1000.3
bar: foo
escape: @@escapeme
foo_bar: @foo_bar
escape: '@@escapeme'
foo_bar: '@foo_bar'
MixedCase:
MixedCaseKey: value

View File

@ -6,7 +6,7 @@ services:
calls:
- method: setLogger
arguments:
- @logger
- '@logger'
- method: setClass
arguments:
- User

View File

@ -3,9 +3,9 @@ services:
baz: { class: BazClass }
not_shared: { class: FooClass, shared: false }
file: { class: FooClass, file: %path%/foo.php }
arguments: { class: FooClass, arguments: [foo, @foo, [true, false]] }
arguments: { class: FooClass, arguments: [foo, '@foo', [true, false]] }
configurator1: { class: FooClass, configurator: sc_configure }
configurator2: { class: FooClass, configurator: [@baz, configure] }
configurator2: { class: FooClass, configurator: ['@baz', configure] }
configurator3: { class: FooClass, configurator: [BazClass, configureStatic] }
method_call1:
class: FooClass
@ -16,8 +16,8 @@ services:
method_call2:
class: FooClass
calls:
- [ setBar, [ foo, @foo, [true, false] ] ]
alias_for_foo: @foo
- [ setBar, [ foo, '@foo', [true, false] ] ]
alias_for_foo: '@foo'
another_alias_for_foo:
alias: foo
public: false
@ -35,5 +35,5 @@ services:
decoration_inner_name: decorated.pif-pouf
decoration_priority: 5
new_factory1: { class: FooBarClass, factory: factory}
new_factory2: { class: FooBarClass, factory: [@baz, getClass]}
new_factory2: { class: FooBarClass, factory: ['@baz', getClass]}
new_factory3: { class: FooBarClass, factory: [BazClass, getInstance]}

View File

@ -93,5 +93,5 @@ services:
service_from_static_method:
class: Bar\FooClass
factory: [Bar\FooClass, getInstance]
alias_for_foo: @foo
alias_for_alias: @foo
alias_for_foo: '@foo'
alias_for_alias: '@foo'

View File

@ -178,34 +178,7 @@ class Crawler implements \Countable, \IteratorAggregate
try {
// Convert charset to HTML-entities to work around bugs in DOMDocument::loadHTML()
if (function_exists('mb_convert_encoding')) {
$content = mb_convert_encoding($content, 'HTML-ENTITIES', $charset);
} elseif (function_exists('iconv')) {
$content = preg_replace_callback(
'/[\x80-\xFF]+/',
function ($m) {
$m = unpack('C*', $m[0]);
$i = 1;
$entities = '';
while (isset($m[$i])) {
if (0xF0 <= $m[$i]) {
$c = (($m[$i++] - 0xF0) << 18) + (($m[$i++] - 0x80) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80;
} elseif (0xE0 <= $m[$i]) {
$c = (($m[$i++] - 0xE0) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80;
} else {
$c = (($m[$i++] - 0xC0) << 6) + $m[$i++] - 0x80;
}
$entities .= '&#'.$c.';';
}
return $entities;
},
iconv($charset, 'UTF-8', $content)
);
}
$content = mb_convert_encoding($content, 'HTML-ENTITIES', $charset);
} catch (\Exception $e) {
}

View File

@ -112,7 +112,6 @@ class CrawlerTest extends \PHPUnit_Framework_TestCase
/**
* @covers Symfony\Component\DomCrawler\Crawler::addHtmlContent
* @requires extension mbstring
*/
public function testAddHtmlContentCharset()
{
@ -147,7 +146,6 @@ class CrawlerTest extends \PHPUnit_Framework_TestCase
/**
* @covers Symfony\Component\DomCrawler\Crawler::addHtmlContent
* @requires extension mbstring
*/
public function testAddHtmlContentCharsetGbk()
{

View File

@ -16,7 +16,8 @@
}
],
"require": {
"php": ">=5.5.9"
"php": ">=5.5.9",
"symfony/polyfill-mbstring": "~1.0"
},
"require-dev": {
"symfony/css-selector": "~2.8|~3.0"

View File

@ -173,7 +173,7 @@ class NumberToLocalizedStringTransformer implements DataTransformerInterface
throw new TransformationFailedException('I don\'t have a clear idea what infinity looks like');
}
if (function_exists('mb_detect_encoding') && false !== $encoding = mb_detect_encoding($value)) {
if (false !== $encoding = mb_detect_encoding($value, null, true)) {
$length = mb_strlen($value, $encoding);
$remainder = mb_substr($value, $position, $length, $encoding);
} else {

View File

@ -83,79 +83,79 @@ class ValidatorTypeGuesser implements FormTypeGuesserInterface
case 'Symfony\Component\Validator\Constraints\Type':
switch ($constraint->type) {
case 'array':
return new TypeGuess('collection', array(), Guess::MEDIUM_CONFIDENCE);
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\CollectionType', array(), Guess::MEDIUM_CONFIDENCE);
case 'boolean':
case 'bool':
return new TypeGuess('checkbox', array(), Guess::MEDIUM_CONFIDENCE);
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\CheckboxType', array(), Guess::MEDIUM_CONFIDENCE);
case 'double':
case 'float':
case 'numeric':
case 'real':
return new TypeGuess('number', array(), Guess::MEDIUM_CONFIDENCE);
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\NumberType', array(), Guess::MEDIUM_CONFIDENCE);
case 'integer':
case 'int':
case 'long':
return new TypeGuess('integer', array(), Guess::MEDIUM_CONFIDENCE);
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\IntegerType', array(), Guess::MEDIUM_CONFIDENCE);
case '\DateTime':
return new TypeGuess('date', array(), Guess::MEDIUM_CONFIDENCE);
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\DateType', array(), Guess::MEDIUM_CONFIDENCE);
case 'string':
return new TypeGuess('text', array(), Guess::LOW_CONFIDENCE);
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\TextType', array(), Guess::LOW_CONFIDENCE);
}
break;
case 'Symfony\Component\Validator\Constraints\Country':
return new TypeGuess('country', array(), Guess::HIGH_CONFIDENCE);
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\CountryType', array(), Guess::HIGH_CONFIDENCE);
case 'Symfony\Component\Validator\Constraints\Currency':
return new TypeGuess('currency', array(), Guess::HIGH_CONFIDENCE);
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\CurrencyType', array(), Guess::HIGH_CONFIDENCE);
case 'Symfony\Component\Validator\Constraints\Date':
return new TypeGuess('date', array('input' => 'string'), Guess::HIGH_CONFIDENCE);
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\DateType', array('input' => 'string'), Guess::HIGH_CONFIDENCE);
case 'Symfony\Component\Validator\Constraints\DateTime':
return new TypeGuess('datetime', array('input' => 'string'), Guess::HIGH_CONFIDENCE);
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\DateTimeType', array('input' => 'string'), Guess::HIGH_CONFIDENCE);
case 'Symfony\Component\Validator\Constraints\Email':
return new TypeGuess('email', array(), Guess::HIGH_CONFIDENCE);
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\EmailType', array(), Guess::HIGH_CONFIDENCE);
case 'Symfony\Component\Validator\Constraints\File':
case 'Symfony\Component\Validator\Constraints\Image':
return new TypeGuess('file', array(), Guess::HIGH_CONFIDENCE);
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\FileType', array(), Guess::HIGH_CONFIDENCE);
case 'Symfony\Component\Validator\Constraints\Language':
return new TypeGuess('language', array(), Guess::HIGH_CONFIDENCE);
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\LanguageType', array(), Guess::HIGH_CONFIDENCE);
case 'Symfony\Component\Validator\Constraints\Locale':
return new TypeGuess('locale', array(), Guess::HIGH_CONFIDENCE);
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\LocaleType', array(), Guess::HIGH_CONFIDENCE);
case 'Symfony\Component\Validator\Constraints\Time':
return new TypeGuess('time', array('input' => 'string'), Guess::HIGH_CONFIDENCE);
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\TimeType', array('input' => 'string'), Guess::HIGH_CONFIDENCE);
case 'Symfony\Component\Validator\Constraints\Url':
return new TypeGuess('url', array(), Guess::HIGH_CONFIDENCE);
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\UrlType', array(), Guess::HIGH_CONFIDENCE);
case 'Symfony\Component\Validator\Constraints\Ip':
return new TypeGuess('text', array(), Guess::MEDIUM_CONFIDENCE);
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\TextType', array(), Guess::MEDIUM_CONFIDENCE);
case 'Symfony\Component\Validator\Constraints\Length':
case 'Symfony\Component\Validator\Constraints\Regex':
return new TypeGuess('text', array(), Guess::LOW_CONFIDENCE);
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\TextType', array(), Guess::LOW_CONFIDENCE);
case 'Symfony\Component\Validator\Constraints\Range':
return new TypeGuess('number', array(), Guess::LOW_CONFIDENCE);
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\NumberType', array(), Guess::LOW_CONFIDENCE);
case 'Symfony\Component\Validator\Constraints\Count':
return new TypeGuess('collection', array(), Guess::LOW_CONFIDENCE);
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\CollectionType', array(), Guess::LOW_CONFIDENCE);
case 'Symfony\Component\Validator\Constraints\True':
case 'Symfony\Component\Validator\Constraints\False':
case 'Symfony\Component\Validator\Constraints\IsTrue':
case 'Symfony\Component\Validator\Constraints\IsFalse':
return new TypeGuess('checkbox', array(), Guess::MEDIUM_CONFIDENCE);
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\CheckboxType', array(), Guess::MEDIUM_CONFIDENCE);
}
}

View File

@ -69,10 +69,6 @@ class FormRegistry implements FormRegistryInterface
*/
public function getType($name)
{
if (!is_string($name)) {
throw new UnexpectedTypeException($name, 'string');
}
if (!isset($this->types[$name])) {
$type = null;

View File

@ -27,7 +27,6 @@ interface FormRegistryInterface
*
* @return ResolvedFormTypeInterface The type
*
* @throws Exception\UnexpectedTypeException if the passed name is not a string
* @throws Exception\InvalidArgumentException if the type can not be retrieved from any extension
*/
public function getType($name);

View File

@ -238,8 +238,6 @@ class NumberToLocalizedStringTransformerTest extends \PHPUnit_Framework_TestCase
/**
* @see https://github.com/symfony/symfony/issues/7609
*
* @requires extension mbstring
*/
public function testReverseTransformWithGroupingAndFixedSpaces()
{
@ -583,7 +581,6 @@ class NumberToLocalizedStringTransformerTest extends \PHPUnit_Framework_TestCase
/**
* @expectedException \Symfony\Component\Form\Exception\TransformationFailedException
* @expectedExceptionMessage The number contains unrecognized characters: "foo8"
* @requires extension mbstring
*/
public function testReverseTransformDisallowsCenteredExtraCharactersMultibyte()
{
@ -600,7 +597,6 @@ class NumberToLocalizedStringTransformerTest extends \PHPUnit_Framework_TestCase
/**
* @expectedException \Symfony\Component\Form\Exception\TransformationFailedException
* @expectedExceptionMessage The number contains unrecognized characters: "foo8"
* @requires extension mbstring
*/
public function testReverseTransformIgnoresTrailingSpacesInExceptionMessage()
{
@ -628,7 +624,6 @@ class NumberToLocalizedStringTransformerTest extends \PHPUnit_Framework_TestCase
/**
* @expectedException \Symfony\Component\Form\Exception\TransformationFailedException
* @expectedExceptionMessage The number contains unrecognized characters: "foo"
* @requires extension mbstring
*/
public function testReverseTransformDisallowsTrailingExtraCharactersMultibyte()
{

View File

@ -388,7 +388,7 @@ class FormFactoryTest extends \PHPUnit_Framework_TestCase
->method('guessType')
->with('Application\Author', 'firstName')
->will($this->returnValue(new TypeGuess(
'password',
'Symfony\Component\Form\Extension\Core\Type\PasswordType',
array('attr' => array('maxlength' => 7)),
Guess::HIGH_CONFIDENCE
)));
@ -397,7 +397,7 @@ class FormFactoryTest extends \PHPUnit_Framework_TestCase
$factory->expects($this->once())
->method('createNamedBuilder')
->with('firstName', 'password', null, array('attr' => array('maxlength' => 7)))
->with('firstName', 'Symfony\Component\Form\Extension\Core\Type\PasswordType', null, array('attr' => array('maxlength' => 7)))
->will($this->returnValue('builderInstance'));
$this->builder = $factory->createBuilderForProperty('Application\Author', 'firstName');

View File

@ -155,18 +155,6 @@ class FormRegistryTest extends \PHPUnit_Framework_TestCase
$this->assertSame($resolvedType, $this->registry->getType(get_class($type)));
}
/**
* @expectedException \Symfony\Component\Form\Exception\UnexpectedTypeException
*/
public function testGetTypeThrowsExceptionIfParentNotFound()
{
$type = new FooSubType();
$this->extension1->addType($type);
$this->registry->getType($type);
}
/**
* @expectedException \Symfony\Component\Form\Exception\InvalidArgumentException
*/
@ -175,14 +163,6 @@ class FormRegistryTest extends \PHPUnit_Framework_TestCase
$this->registry->getType('bar');
}
/**
* @expectedException \Symfony\Component\Form\Exception\UnexpectedTypeException
*/
public function testGetTypeThrowsExceptionIfNoString()
{
$this->registry->getType(array());
}
public function testHasTypeAfterLoadingFromExtension()
{
$type = new FooType();

View File

@ -24,7 +24,6 @@ class StringUtilTest extends \PHPUnit_Framework_TestCase
/**
* @dataProvider spaceProvider
* @requires extension mbstring
*/
public function testTrimUtf8Separators($hex)
{

View File

@ -20,6 +20,7 @@
"symfony/event-dispatcher": "~2.8|~3.0",
"symfony/intl": "~2.8|~3.0",
"symfony/options-resolver": "~2.8|~3.0",
"symfony/polyfill-mbstring": "~1.0",
"symfony/property-access": "~2.8|~3.0"
},
"require-dev": {

View File

@ -34,18 +34,6 @@ $response->send();
The Request and the Response classes have many other methods that implement
the HTTP specification.
Loading
-------
If you are not using Composer but are using PHP 5.3.x, you must add the following to your autoloader:
```php
// SessionHandlerInterface
if (!interface_exists('SessionHandlerInterface')) {
$loader->registerPrefixFallback(__DIR__.'/../vendor/symfony/src/Symfony/Component/HttpFoundation/Resources/stubs');
}
```
Resources
---------

View File

@ -1,102 +0,0 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* SessionHandlerInterface for PHP < 5.4.
*
* The order in which these methods are invoked by PHP are:
* 1. open [session_start]
* 2. read
* 3. gc [optional depending on probability settings: gc_probability / gc_divisor]
* 4. destroy [optional when session_regenerate_id(true) is used]
* 5. write [session_write_close] or destroy [session_destroy]
* 6. close
*
* Extensive documentation can be found at php.net, see links:
*
* @see http://php.net/sessionhandlerinterface
* @see http://php.net/session.customhandler
* @see http://php.net/session-set-save-handler
*
* @author Drak <drak@zikula.org>
* @author Tobias Schultze <http://tobion.de>
*/
interface SessionHandlerInterface
{
/**
* Re-initializes existing session, or creates a new one.
*
* @see http://php.net/sessionhandlerinterface.open
*
* @param string $savePath Save path
* @param string $sessionName Session name, see http://php.net/function.session-name.php
*
* @return bool true on success, false on failure
*/
public function open($savePath, $sessionName);
/**
* Closes the current session.
*
* @see http://php.net/sessionhandlerinterface.close
*
* @return bool true on success, false on failure
*/
public function close();
/**
* Reads the session data.
*
* @see http://php.net/sessionhandlerinterface.read
*
* @param string $sessionId Session ID, see http://php.net/function.session-id
*
* @return string Same session data as passed in write() or empty string when non-existent or on failure
*/
public function read($sessionId);
/**
* Writes the session data to the storage.
*
* Care, the session ID passed to write() can be different from the one previously
* received in read() when the session ID changed due to session_regenerate_id().
*
* @see http://php.net/sessionhandlerinterface.write
*
* @param string $sessionId Session ID , see http://php.net/function.session-id
* @param string $data Serialized session data to save
*
* @return bool true on success, false on failure
*/
public function write($sessionId, $data);
/**
* Destroys a session.
*
* @see http://php.net/sessionhandlerinterface.destroy
*
* @param string $sessionId Session ID, see http://php.net/function.session-id
*
* @return bool true on success, false on failure
*/
public function destroy($sessionId);
/**
* Cleans up expired sessions (garbage collection).
*
* @see http://php.net/sessionhandlerinterface.gc
*
* @param string|int $maxlifetime Sessions that have not updated for the last maxlifetime seconds will be removed
*
* @return bool true on success, false on failure
*/
public function gc($maxlifetime);
}

View File

@ -34,6 +34,7 @@ class MongoDbSessionHandlerTest extends \PHPUnit_Framework_TestCase
$mongoClass = version_compare(phpversion('mongo'), '1.3.0', '<') ? 'Mongo' : 'MongoClient';
$this->mongo = $this->getMockBuilder($mongoClass)
->disableOriginalConstructor()
->getMock();
$this->options = array(
@ -245,13 +246,8 @@ class MongoDbSessionHandlerTest extends \PHPUnit_Framework_TestCase
private function createMongoCollectionMock()
{
$mongoClient = $this->getMockBuilder('MongoClient')
->getMock();
$mongoDb = $this->getMockBuilder('MongoDB')
->setConstructorArgs(array($mongoClient, 'database-name'))
->getMock();
$collection = $this->getMockBuilder('MongoCollection')
->setConstructorArgs(array($mongoDb, 'collection-name'))
->disableOriginalConstructor()
->getMock();
return $collection;

View File

@ -16,14 +16,14 @@
}
],
"require": {
"php": ">=5.5.9"
"php": ">=5.5.9",
"symfony/polyfill-php54": "~1.0"
},
"require-dev": {
"symfony/expression-language": "~2.8|~3.0"
},
"autoload": {
"psr-4": { "Symfony\\Component\\HttpFoundation\\": "" },
"classmap": [ "Resources/stubs" ]
"psr-4": { "Symfony\\Component\\HttpFoundation\\": "" }
},
"minimum-stability": "dev",
"extra": {

View File

@ -15,6 +15,9 @@ use Symfony\Component\HttpKernel\DataCollector\TimeDataCollector;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
/**
* @group time-sensitive
*/
class TimeDataCollectorTest extends \PHPUnit_Framework_TestCase
{
public function testCollect()

View File

@ -23,6 +23,8 @@ use Symfony\Component\HttpKernel\Tests\Logger;
* ExceptionListenerTest.
*
* @author Robert Schönthal <seroscho@googlemail.com>
*
* @group time-sensitive
*/
class ExceptionListenerTest extends \PHPUnit_Framework_TestCase
{

View File

@ -30,6 +30,8 @@ use Symfony\Component\Intl\Locale\Locale;
*
* @author Igor Wiedler <igor@wiedler.ch>
* @author Bernhard Schussek <bschussek@gmail.com>
*
* @internal
*/
class Collator
{

View File

@ -15,6 +15,8 @@ namespace Symfony\Component\Intl\DateFormatter\DateFormat;
* Parser and formatter for AM/PM markers format.
*
* @author Igor Wiedler <igor@wiedler.ch>
*
* @internal
*/
class AmPmTransformer extends Transformer
{

View File

@ -15,6 +15,8 @@ namespace Symfony\Component\Intl\DateFormatter\DateFormat;
* Parser and formatter for day of week format.
*
* @author Igor Wiedler <igor@wiedler.ch>
*
* @internal
*/
class DayOfWeekTransformer extends Transformer
{

View File

@ -15,6 +15,8 @@ namespace Symfony\Component\Intl\DateFormatter\DateFormat;
* Parser and formatter for day of year format.
*
* @author Igor Wiedler <igor@wiedler.ch>
*
* @internal
*/
class DayOfYearTransformer extends Transformer
{

View File

@ -15,6 +15,8 @@ namespace Symfony\Component\Intl\DateFormatter\DateFormat;
* Parser and formatter for day format.
*
* @author Igor Wiedler <igor@wiedler.ch>
*
* @internal
*/
class DayTransformer extends Transformer
{

View File

@ -18,6 +18,8 @@ use Symfony\Component\Intl\Globals\IntlGlobals;
* Parser and formatter for date formats.
*
* @author Igor Wiedler <igor@wiedler.ch>
*
* @internal
*/
class FullTransformer
{

View File

@ -15,6 +15,8 @@ namespace Symfony\Component\Intl\DateFormatter\DateFormat;
* Parser and formatter for 12 hour format (0-11).
*
* @author Igor Wiedler <igor@wiedler.ch>
*
* @internal
*/
class Hour1200Transformer extends HourTransformer
{

View File

@ -15,6 +15,8 @@ namespace Symfony\Component\Intl\DateFormatter\DateFormat;
* Parser and formatter for 12 hour format (1-12).
*
* @author Igor Wiedler <igor@wiedler.ch>
*
* @internal
*/
class Hour1201Transformer extends HourTransformer
{

View File

@ -15,6 +15,8 @@ namespace Symfony\Component\Intl\DateFormatter\DateFormat;
* Parser and formatter for 24 hour format (0-23).
*
* @author Igor Wiedler <igor@wiedler.ch>
*
* @internal
*/
class Hour2400Transformer extends HourTransformer
{

View File

@ -15,6 +15,8 @@ namespace Symfony\Component\Intl\DateFormatter\DateFormat;
* Parser and formatter for 24 hour format (1-24).
*
* @author Igor Wiedler <igor@wiedler.ch>
*
* @internal
*/
class Hour2401Transformer extends HourTransformer
{

View File

@ -15,6 +15,8 @@ namespace Symfony\Component\Intl\DateFormatter\DateFormat;
* Base class for hour transformers.
*
* @author Eriksen Costa <eriksen.costa@infranology.com.br>
*
* @internal
*/
abstract class HourTransformer extends Transformer
{

View File

@ -15,6 +15,8 @@ namespace Symfony\Component\Intl\DateFormatter\DateFormat;
* Parser and formatter for minute format.
*
* @author Igor Wiedler <igor@wiedler.ch>
*
* @internal
*/
class MinuteTransformer extends Transformer
{

View File

@ -15,6 +15,8 @@ namespace Symfony\Component\Intl\DateFormatter\DateFormat;
* Parser and formatter for month format.
*
* @author Igor Wiedler <igor@wiedler.ch>
*
* @internal
*/
class MonthTransformer extends Transformer
{

View File

@ -15,6 +15,8 @@ namespace Symfony\Component\Intl\DateFormatter\DateFormat;
* Parser and formatter for quarter format.
*
* @author Igor Wiedler <igor@wiedler.ch>
*
* @internal
*/
class QuarterTransformer extends Transformer
{

View File

@ -15,6 +15,8 @@ namespace Symfony\Component\Intl\DateFormatter\DateFormat;
* Parser and formatter for the second format.
*
* @author Igor Wiedler <igor@wiedler.ch>
*
* @internal
*/
class SecondTransformer extends Transformer
{

View File

@ -17,6 +17,8 @@ use Symfony\Component\Intl\Exception\NotImplementedException;
* Parser and formatter for time zone format.
*
* @author Igor Wiedler <igor@wiedler.ch>
*
* @internal
*/
class TimeZoneTransformer extends Transformer
{

View File

@ -15,6 +15,8 @@ namespace Symfony\Component\Intl\DateFormatter\DateFormat;
* Parser and formatter for date formats.
*
* @author Igor Wiedler <igor@wiedler.ch>
*
* @internal
*/
abstract class Transformer
{

View File

@ -15,6 +15,8 @@ namespace Symfony\Component\Intl\DateFormatter\DateFormat;
* Parser and formatter for year format.
*
* @author Igor Wiedler <igor@wiedler.ch>
*
* @internal
*/
class YearTransformer extends Transformer
{

View File

@ -43,6 +43,8 @@ use Symfony\Component\Intl\Locale\Locale;
*
* @author Igor Wiedler <igor@wiedler.ch>
* @author Bernhard Schussek <bschussek@gmail.com>
*
* @internal
*/
class IntlDateFormatter
{

View File

@ -15,6 +15,8 @@ namespace Symfony\Component\Intl\Globals;
* Provides fake static versions of the global functions in the intl extension.
*
* @author Bernhard Schussek <bschussek@gmail.com>
*
* @internal
*/
abstract class IntlGlobals
{

View File

@ -21,6 +21,8 @@ use Symfony\Component\Intl\Exception\MethodNotImplementedException;
*
* @author Eriksen Costa <eriksen.costa@infranology.com.br>
* @author Bernhard Schussek <bschussek@gmail.com>
*
* @internal
*/
class Locale
{

View File

@ -37,6 +37,8 @@ use Symfony\Component\Intl\Locale\Locale;
*
* @author Eriksen Costa <eriksen.costa@infranology.com.br>
* @author Bernhard Schussek <bschussek@gmail.com>
*
* @internal
*/
class NumberFormatter
{

View File

@ -1,78 +0,0 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
use Symfony\Component\Intl\Globals\IntlGlobals;
if (!function_exists('intl_is_failure')) {
/**
* Stub implementation for the {@link intl_is_failure()} function of the intl
* extension.
*
* @author Bernhard Schussek <bschussek@gmail.com>
*
* @param int $errorCode The error code returned by intl_get_error_code().
*
* @return bool Whether the error code indicates an error.
*
* @see IntlGlobals::isFailure()
*/
function intl_is_failure($errorCode)
{
return IntlGlobals::isFailure($errorCode);
}
/**
* Stub implementation for the {@link intl_get_error_code()} function of the
* intl extension.
*
* @author Bernhard Schussek <bschussek@gmail.com>
*
* @return bool The error code of the last intl function call or
* IntlGlobals::U_ZERO_ERROR if no error occurred.
*
* @see IntlGlobals::getErrorCode()
*/
function intl_get_error_code()
{
return IntlGlobals::getErrorCode();
}
/**
* Stub implementation for the {@link intl_get_error_code()} function of the
* intl extension.
*
* @author Bernhard Schussek <bschussek@gmail.com>
*
* @return bool The error message of the last intl function call or
* "U_ZERO_ERROR" if no error occurred.
*
* @see IntlGlobals::getErrorMessage()
*/
function intl_get_error_message()
{
return IntlGlobals::getErrorMessage();
}
/**
* Stub implementation for the {@link intl_error_name()} function of the intl
* extension.
*
* @param int $errorCode The error code.
*
* @return string The name of the error code constant.
*
* @see IntlGlobals::getErrorName()
*/
function intl_error_name($errorCode)
{
return IntlGlobals::getErrorName($errorCode);
}
}

View File

@ -24,7 +24,9 @@
}
],
"require": {
"php": ">=5.5.9"
"php": ">=5.5.9",
"symfony/polyfill-intl-icu": "~1.0",
"symfony/polyfill-php54": "~1.0"
},
"require-dev": {
"symfony/filesystem": "~2.8|~3.0"
@ -34,8 +36,7 @@
},
"autoload": {
"psr-4": { "Symfony\\Component\\Intl\\": "" },
"classmap": [ "Resources/stubs" ],
"files": [ "Resources/stubs/functions.php" ]
"classmap": [ "Resources/stubs" ]
},
"minimum-stability": "dev",
"extra": {

View File

@ -97,11 +97,7 @@ class LdapClient implements LdapClientInterface
*/
public function escape($subject, $ignore = '', $flags = 0)
{
if (function_exists('ldap_escape')) {
return ldap_escape($subject, $ignore, $flags);
}
return $this->doEscape($subject, $ignore, $flags);
return ldap_escape($subject, $ignore, $flags);
}
private function connect()
@ -132,98 +128,4 @@ class LdapClient implements LdapClientInterface
$this->connection = null;
}
/**
* Stub implementation of the {@link ldap_escape()} function of the ldap
* extension.
*
* Escape strings for safe use in LDAP filters and DNs.
*
* @author Chris Wright <ldapi@daverandom.com>
*
* @param string $subject
* @param string $ignore
* @param int $flags
*
* @return string
*
* @see http://stackoverflow.com/a/8561604
*/
private function doEscape($subject, $ignore = '', $flags = 0)
{
$charMaps = $this->getCharmaps();
// Create the base char map to escape
$flags = (int) $flags;
$charMap = array();
if ($flags & self::LDAP_ESCAPE_FILTER) {
$charMap += $charMaps[self::LDAP_ESCAPE_FILTER];
}
if ($flags & self::LDAP_ESCAPE_DN) {
$charMap += $charMaps[self::LDAP_ESCAPE_DN];
}
if (!$charMap) {
$charMap = $charMaps[0];
}
// Remove any chars to ignore from the list
$ignore = (string) $ignore;
for ($i = 0, $l = strlen($ignore); $i < $l; ++$i) {
unset($charMap[$ignore[$i]]);
}
// Do the main replacement
$result = strtr($subject, $charMap);
// Encode leading/trailing spaces if LDAP_ESCAPE_DN is passed
if ($flags & self::LDAP_ESCAPE_DN) {
if ($result[0] === ' ') {
$result = '\\20'.substr($result, 1);
}
if ($result[strlen($result) - 1] === ' ') {
$result = substr($result, 0, -1).'\\20';
}
}
return $result;
}
private function getCharmaps()
{
if (null !== $this->charmaps) {
return $this->charmaps;
}
$charMaps = array(
self::LDAP_ESCAPE_FILTER => array('\\', '*', '(', ')', "\x00"),
self::LDAP_ESCAPE_DN => array('\\', ',', '=', '+', '<', '>', ';', '"', '#'),
);
$charMaps[0] = array();
for ($i = 0; $i < 256; ++$i) {
$charMaps[0][chr($i)] = sprintf('\\%02x', $i);
}
for ($i = 0, $l = count($charMaps[self::LDAP_ESCAPE_FILTER]); $i < $l; ++$i) {
$chr = $charMaps[self::LDAP_ESCAPE_FILTER][$i];
unset($charMaps[self::LDAP_ESCAPE_FILTER][$i]);
$charMaps[self::LDAP_ESCAPE_FILTER][$chr] = $charMaps[0][$chr];
}
for ($i = 0, $l = count($charMaps[self::LDAP_ESCAPE_DN]); $i < $l; ++$i) {
$chr = $charMaps[self::LDAP_ESCAPE_DN][$i];
unset($charMaps[self::LDAP_ESCAPE_DN][$i]);
$charMaps[self::LDAP_ESCAPE_DN][$chr] = $charMaps[0][$chr];
}
$this->charmaps = $charMaps;
return $this->charmaps;
}
}

View File

@ -1,52 +0,0 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\Security\Core\Tests\Authentication\Provider;
use Symfony\Component\Ldap\LdapClient;
/**
* @requires extension ldap
*/
class LdapClientTest extends \PHPUnit_Framework_TestCase
{
/**
* @dataProvider provideLdapEscapeValues
*/
public function testLdapEscape($subject, $ignore, $flags, $expected)
{
$ldap = new LdapClient();
$this->assertSame($expected, $ldap->escape($subject, $ignore, $flags));
}
/**
* Provides values for the ldap_escape shim. These tests come from the official
* extension.
*
* @see https://github.com/php/php-src/blob/master/ext/ldap/tests/ldap_escape_dn.phpt
* @see https://github.com/php/php-src/blob/master/ext/ldap/tests/ldap_escape_all.phpt
* @see https://github.com/php/php-src/blob/master/ext/ldap/tests/ldap_escape_both.phpt
* @see https://github.com/php/php-src/blob/master/ext/ldap/tests/ldap_escape_filter.phpt
* @see https://github.com/php/php-src/blob/master/ext/ldap/tests/ldap_escape_ignore.phpt
*
* @return array
*/
public function provideLdapEscapeValues()
{
return array(
array('foo=bar(baz)*', null, LdapClient::LDAP_ESCAPE_DN, 'foo\3dbar(baz)*'),
array('foo=bar(baz)*', null, null, '\66\6f\6f\3d\62\61\72\28\62\61\7a\29\2a'),
array('foo=bar(baz)*', null, LdapClient::LDAP_ESCAPE_DN | LdapClient::LDAP_ESCAPE_FILTER, 'foo\3dbar\28baz\29\2a'),
array('foo=bar(baz)*', null, LdapClient::LDAP_ESCAPE_FILTER, 'foo=bar\28baz\29\2a'),
array('foo=bar(baz)*', 'ao', null, '\66oo\3d\62a\72\28\62a\7a\29\2a'),
);
}
}

View File

@ -17,6 +17,7 @@
],
"require": {
"php": ">=5.5.9",
"symfony/polyfill-php56": "~1.0",
"ext-ldap": "*"
},
"autoload": {

View File

@ -15,6 +15,8 @@ namespace Symfony\Component\Routing\Matcher\Dumper;
* Collection of routes.
*
* @author Arnaud Le Blanc <arnaud.lb@gmail.com>
*
* @internal
*/
class DumperCollection implements \IteratorAggregate
{

View File

@ -15,6 +15,8 @@ namespace Symfony\Component\Routing\Matcher\Dumper;
* Prefix tree of routes preserving routes order.
*
* @author Arnaud Le Blanc <arnaud.lb@gmail.com>
*
* @internal
*/
class DumperPrefixCollection extends DumperCollection
{

View File

@ -17,6 +17,8 @@ use Symfony\Component\Routing\Route;
* Container for a Route.
*
* @author Arnaud Le Blanc <arnaud.lb@gmail.com>
*
* @internal
*/
class DumperRoute
{

View File

@ -11,8 +11,6 @@
namespace Symfony\Component\Security\Core\Encoder;
use Symfony\Component\Security\Core\Util\StringUtils;
/**
* BasePasswordEncoder is the base class for all password encoders.
*
@ -83,7 +81,7 @@ abstract class BasePasswordEncoder implements PasswordEncoderInterface
*/
protected function comparePasswords($password1, $password2)
{
return StringUtils::equals($password1, $password2);
return hash_equals($password1, $password2);
}
/**

View File

@ -15,6 +15,8 @@ use Symfony\Component\Security\Core\Util\StringUtils;
/**
* Data from PHP.net's hash_equals tests.
*
* @group legacy
*/
class StringUtilsTest extends \PHPUnit_Framework_TestCase
{

View File

@ -11,10 +11,16 @@
namespace Symfony\Component\Security\Core\Util;
@trigger_error('The '.__NAMESPACE__.'\\StringUtils class is deprecated since version 2.8 and will be removed in 3.0. Use hash_equals() instead.', E_USER_DEPRECATED);
use Symfony\Component\Polyfill\Util\Binary;
/**
* String utility functions.
*
* @author Fabien Potencier <fabien@symfony.com>
*
* @deprecated since 2.8, to be removed in 3.0.
*/
class StringUtils
{
@ -47,25 +53,7 @@ class StringUtils
$userInput = (string) $userInput;
}
if (function_exists('hash_equals')) {
return hash_equals($knownString, $userInput);
}
$knownLen = self::safeStrlen($knownString);
$userLen = self::safeStrlen($userInput);
if ($userLen !== $knownLen) {
return false;
}
$result = 0;
for ($i = 0; $i < $knownLen; ++$i) {
$result |= (ord($knownString[$i]) ^ ord($userInput[$i]));
}
// They are only identical strings if $result is exactly 0...
return 0 === $result;
return hash_equals($knownString, $userInput);
}
/**
@ -77,17 +65,6 @@ class StringUtils
*/
public static function safeStrlen($string)
{
// Premature optimization
// Since this cannot be changed at runtime, we can cache it
static $funcExists = null;
if (null === $funcExists) {
$funcExists = function_exists('mb_strlen');
}
if ($funcExists) {
return mb_strlen($string, '8bit');
}
return strlen($string);
return Binary::strlen($string);
}
}

View File

@ -17,15 +17,18 @@
],
"require": {
"php": ">=5.5.9",
"paragonie/random_compat": "~1.0"
"symfony/polyfill-php55": "~1.0",
"symfony/polyfill-php56": "~1.0",
"symfony/polyfill-php70": "~1.0",
"symfony/polyfill-util": "~1.0"
},
"require-dev": {
"symfony/event-dispatcher": "~2.8|~3.0",
"symfony/expression-language": "~2.8|~3.0",
"symfony/http-foundation": "~2.8|~3.0",
"symfony/ldap": "~2.8|~3.0",
"symfony/translation": "~2.8|~3.0",
"symfony/validator": "~2.8|~3.0",
"symfony/ldap": "~2.8|~3.0",
"psr/log": "~1.0"
},
"suggest": {

View File

@ -11,7 +11,6 @@
namespace Symfony\Component\Security\Csrf;
use Symfony\Component\Security\Core\Util\StringUtils;
use Symfony\Component\Security\Csrf\TokenGenerator\UriSafeTokenGenerator;
use Symfony\Component\Security\Csrf\TokenGenerator\TokenGeneratorInterface;
use Symfony\Component\Security\Csrf\TokenStorage\NativeSessionTokenStorage;
@ -92,6 +91,6 @@ class CsrfTokenManager implements CsrfTokenManagerInterface
return false;
}
return StringUtils::equals($this->storage->getToken($token->getId()), $token->getValue());
return hash_equals($this->storage->getToken($token->getId()), $token->getValue());
}
}

View File

@ -17,8 +17,9 @@
],
"require": {
"php": ">=5.5.9",
"symfony/security-core": "~2.8|~3.0",
"paragonie/random_compat": "~1.0"
"symfony/polyfill-php56": "~1.0",
"symfony/polyfill-php70": "~1.0",
"symfony/security-core": "~2.8|~3.0"
},
"require-dev": {
"symfony/http-foundation": "~2.8|~3.0"

View File

@ -17,7 +17,6 @@ use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Exception\AuthenticationException;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\Util\StringUtils;
/**
* Concrete implementation of the RememberMeServicesInterface providing
@ -54,7 +53,7 @@ class TokenBasedRememberMeServices extends AbstractRememberMeServices
throw new \RuntimeException(sprintf('The UserProviderInterface implementation must return an instance of UserInterface, but returned "%s".', get_class($user)));
}
if (true !== StringUtils::equals($this->generateCookieHash($class, $username, $expires, $user->getPassword()), $hash)) {
if (true !== hash_equals($this->generateCookieHash($class, $username, $expires, $user->getPassword()), $hash)) {
throw new AuthenticationException('The cookie\'s hash is invalid.');
}

View File

@ -21,8 +21,9 @@
"symfony/event-dispatcher": "~2.8|~3.0",
"symfony/http-foundation": "~2.8|~3.0",
"symfony/http-kernel": "~2.8|~3.0",
"symfony/property-access": "~2.8|~3.0",
"paragonie/random_compat": "~1.0"
"symfony/polyfill-php56": "~1.0",
"symfony/polyfill-php70": "~1.0",
"symfony/property-access": "~2.8|~3.0"
},
"require-dev": {
"symfony/routing": "~2.8|~3.0",

View File

@ -20,8 +20,11 @@
"symfony/event-dispatcher": "~2.8|~3.0",
"symfony/http-foundation": "~2.8|~3.0",
"symfony/http-kernel": "~2.8|~3.0",
"symfony/polyfill-php55": "~1.0",
"symfony/polyfill-php56": "~1.0",
"symfony/polyfill-php70": "~1.0",
"symfony/polyfill-util": "~1.0",
"symfony/property-access": "~2.8|~3.0",
"paragonie/random_compat": "~1.0"
},
"replace": {
"symfony/security-core": "self.version",
@ -31,7 +34,7 @@
},
"require-dev": {
"symfony/finder": "~2.8|~3.0",
"symfony/intl": "~2.8|~3.0",
"symfony/polyfill-intl-icu": "~1.0",
"symfony/routing": "~2.8|~3.0",
"symfony/translation": "~2.8|~3.0",
"symfony/validator": "~2.8|~3.0",

View File

@ -88,7 +88,7 @@ class JsonDecode implements DecoderInterface
$decodedData = json_decode($data, $associative, $recursionDepth, $options);
if (JSON_ERROR_NONE !== $this->lastError = json_last_error()) {
throw new UnexpectedValueException(JsonEncoder::getLastErrorMessage());
throw new UnexpectedValueException(json_last_error_message());
}
return $decodedData;

View File

@ -40,7 +40,7 @@ class JsonEncode implements EncoderInterface
$encodedJson = json_encode($data, $context['json_encode_options']);
if (JSON_ERROR_NONE !== $this->lastError = json_last_error()) {
throw new UnexpectedValueException(JsonEncoder::getLastErrorMessage());
throw new UnexpectedValueException(json_last_error_message());
}
return $encodedJson;

View File

@ -72,9 +72,13 @@ class JsonEncoder implements EncoderInterface, DecoderInterface
* Resolves json_last_error message.
*
* @return string
*
* @deprecated since 2.8, to be removed in 3.0. Use json_last_error_msg() instead.
*/
public static function getLastErrorMessage()
{
@trigger_error('The '.__METHOD__.' method is deprecated since version 2.8 and will be removed in 3.0. Use json_last_error_msg() instead.', E_USER_DEPRECATED);
return json_last_error_msg();
}
}

View File

@ -16,7 +16,8 @@
}
],
"require": {
"php": ">=5.5.9"
"php": ">=5.5.9",
"symfony/polyfill-php54": "~1.0"
},
"require-dev": {
"symfony/yaml": "~2.8|~3.0",

View File

@ -330,6 +330,9 @@ class PhpEngine implements EngineInterface, \ArrayAccess
*/
public function setCharset($charset)
{
if ('UTF8' === $charset = strtoupper($charset)) {
$charset = 'UTF-8'; // iconv on Windows requires "UTF-8" instead of "UTF8"
}
$this->charset = $charset;
foreach ($this->helpers as $helper) {
@ -443,7 +446,7 @@ class PhpEngine implements EngineInterface, \ArrayAccess
*/
function ($value) {
if ('UTF-8' != $this->getCharset()) {
$value = $this->convertEncoding($value, 'UTF-8', $this->getCharset());
$value = iconv($this->getCharset(), 'UTF-8', $value);
}
$callback = function ($matches) {
@ -455,7 +458,7 @@ class PhpEngine implements EngineInterface, \ArrayAccess
}
// \uHHHH
$char = $this->convertEncoding($char, 'UTF-16BE', 'UTF-8');
$char = iconv('UTF-8', 'UTF-16BE', $char);
return '\\u'.substr('0000'.bin2hex($char), -4);
};
@ -465,7 +468,7 @@ class PhpEngine implements EngineInterface, \ArrayAccess
}
if ('UTF-8' != $this->getCharset()) {
$value = $this->convertEncoding($value, $this->getCharset(), 'UTF-8');
$value = iconv('UTF-8', $this->getCharset(), $value);
}
return $value;
@ -484,17 +487,13 @@ class PhpEngine implements EngineInterface, \ArrayAccess
*
* @return string The string with the new encoding
*
* @throws \RuntimeException if no suitable encoding function is found (iconv or mbstring)
* @deprecated since 2.8, to be removed in 3.0. Use iconv() instead.
*/
public function convertEncoding($string, $to, $from)
{
if (function_exists('mb_convert_encoding')) {
return mb_convert_encoding($string, $to, $from);
} elseif (function_exists('iconv')) {
return iconv($from, $to, $string);
}
@trigger_error('The '.__METHOD__.' method is deprecated since version 2.8 and will be removed in 3.0. Use iconv() instead.', E_USER_DEPRECATED);
throw new \RuntimeException('No suitable convert encoding function (use UTF-8 as your encoding or install the iconv or mbstring extension).');
return iconv($from, $to, $string);
}
/**

View File

@ -137,7 +137,7 @@ class TranslationDataCollector extends DataCollector implements LateDataCollecto
{
$string = trim(preg_replace('/\s+/', ' ', $string));
if (function_exists('mb_strlen') && false !== $encoding = mb_detect_encoding($string)) {
if (false !== $encoding = mb_detect_encoding($string, null, true)) {
if (mb_strlen($string, $encoding) > $length) {
return mb_substr($string, 0, $length - 3, $encoding).'...';
}

Some files were not shown because too many files have changed in this diff Show More