Merge branch '2.7' into 2.8

* 2.7:
  [FrameworkBundle] Check for class existence before is_subclass_of
  Update GroupSequence.php
  Code enhancement and cleanup
  [DI] Add anti-regression test
  Revert "minor #19689 [DI] Cleanup array_key_exists (ro0NL)"
  [BrowserKit] Fix cookie expiration on 32 bit systems
  bumped Symfony version to 2.7.18
  updated VERSION for 2.7.17
  update CONTRIBUTORS for 2.7.17
  updated CHANGELOG for 2.7.17
  Update misleading comment about RFC4627
This commit is contained in:
Nicolas Grekas 2016-09-06 12:55:00 +02:00
commit ccf63e6b8d
48 changed files with 168 additions and 95 deletions

View File

@ -7,6 +7,31 @@ 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.17 (2016-09-02)
* bug #19794 [VarDumper] Various minor fixes & cleanups (nicolas-grekas)
* bug #19751 Fixes the calendar in constructor to handle null (wakqasahmed)
* bug #19388 [Validator][GroupSequence] fixed GroupSequence validation ignores PropetyMetadata of parent classes (Sandro Hopf)
* bug #19601 [FrameworkBundle] Added friendly exception when constraint validator class does not exist (yceruto)
* bug #19580 [Validator] fixed duplicate constraints with parent class interfaces (dmaicher)
* bug #19647 [Debug] Swap dumper services at bootstrap (lyrixx)
* bug #19685 [DI] Include dynamic services in alternatives (ro0NL)
* bug #19702 [Debug][HttpKernel][VarDumper] Prepare for committed 7.2 changes (aka "small-bc-breaks") (nicolas-grekas)
* bug #19704 [DependencyInjection] PhpDumper::isFrozen inconsistency (allflame)
* bug #19666 Verify explicitly that the request IP is a valid IPv4 address (nesk)
* bug #19660 Disable CLI color for Windows 10 greater than 10.0.10586 (mlocati)
* bug #19663 Exception details break the layout (Dionysis Arvanitis)
* bug #19651 [HttpKernel] Fix HttpCache validation HTTP method (tgalopin)
* bug #19623 [VarDumper] Fix dumping continuations (nicolas-grekas)
* bug #19549 [HttpFoundation] fixed Request::getContent() reusage bug (1ma)
* bug #19373 [Form] Skip CSRF validation on form when POST max size is exceeded (jameshalsall)
* bug #19541 Fix #19531 [Form] DateType fails parsing when midnight is not a valid time (mbeccati)
* bug #19579 [Process] Strengthen Windows pipe files opening (again...) (nicolas-grekas)
* bug #19564 Added class existence check if is_subclass_of() fails in compiler passes (SCIF)
* bug #19522 [SwiftMailerBridge] Fix flawed deprecation message (chalasr)
* bug #19510 [Process] Fix double-fread() when reading unix pipes (nicolas-grekas)
* bug #19508 [Process] Fix AbstractPipes::write() for a situation seen on HHVM (at least) (nicolas-grekas)
* 2.7.16 (2016-07-30)
* bug #19470 undefined offset fix (#19406) (ReenExe)

View File

@ -16,8 +16,8 @@ Symfony is the result of the work of many people who made the code better
- Kris Wallsmith (kriswallsmith)
- Jakub Zalas (jakubzalas)
- Ryan Weaver (weaverryan)
- Javier Eguiluz (javier.eguiluz)
- Kévin Dunglas (dunglas)
- Javier Eguiluz (javier.eguiluz)
- Hugo Hamon (hhamon)
- Abdellatif Ait boudad (aitboudad)
- Pascal Borreli (pborreli)
@ -56,17 +56,18 @@ Symfony is the result of the work of many people who made the code better
- Ener-Getick (energetick)
- Iltar van der Berg (kjarli)
- Kevin Bond (kbond)
- Andrej Hudec (pulzarraider)
- Gábor Egyed (1ed)
- Michel Weimerskirch (mweimerskirch)
- Eric Clemmons (ericclemmons)
- Matthias Pigulla (mpdude)
- Andrej Hudec (pulzarraider)
- Christian Raue
- Arnout Boks (aboks)
- Charles Sarrazin (csarrazi)
- Robin Chalas (chalas_r)
- Deni
- Henrik Westphal (snc)
- Dariusz Górecki (canni)
- Arnout Boks (aboks)
- Douglas Greenshields (shieldo)
- Lee McDermott
- Brandon Turner
@ -80,14 +81,14 @@ Symfony is the result of the work of many people who made the code better
- Toni Uebernickel (havvg)
- Fran Moreno (franmomu)
- Antoine Hérault (herzult)
- Robin Chalas (chalas_r)
- Arnaud Le Blanc (arnaud-lb)
- Jérôme Tamarelle (gromnan)
- Paráda József (paradajozsef)
- Titouan Galopin (tgalopin)
- Michal Piotrowski (eventhorizon)
- Tim Nagel (merk)
- Brice BERNARD (brikou)
- Konstantin Myakshin (koc)
- Brice BERNARD (brikou)
- Alexander M. Turek (derrabus)
- Dariusz Ruminski
- marc.weistroff
@ -114,15 +115,14 @@ Symfony is the result of the work of many people who made the code better
- Théo FIDRY (theofidry)
- Robert Schönthal (digitalkaoz)
- Florian Lonqueu-Brochard (florianlb)
- Titouan Galopin (tgalopin)
- Stefano Sala (stefano.sala)
- Evgeniy (ewgraf)
- Juti Noppornpitak (shiroyuki)
- Tigran Azatyan (tigranazatyan)
- Sebastian Hörl (blogsh)
- Daniel Gomes (danielcsgomes)
- Hidenori Goto (hidenorigoto)
- Sebastiaan Stok (sstok)
- Evgeniy (ewgraf)
- Tugdual Saunier (tucksaun)
- Guilherme Blanco (guilhermeblanco)
- Pablo Godel (pgodel)
@ -132,6 +132,7 @@ Symfony is the result of the work of many people who made the code better
- Arnaud Kleinpeter (nanocom)
- Joel Wurtz (brouznouf)
- Philipp Wahala (hifi)
- Vyacheslav Pavlov
- Richard Shank (iampersistent)
- Thomas Rabaix (rande)
- Vincent AUBERT (vincent)
@ -161,9 +162,9 @@ Symfony is the result of the work of many people who made the code better
- Noel Guilbert (noel)
- Stepan Anchugov (kix)
- bronze1man
- Roland Franssen (ro0)
- sun (sun)
- Larry Garfield (crell)
- Vyacheslav Pavlov
- Martin Schuhfuß (usefulthink)
- Matthieu Bontemps (mbontemps)
- Pierre Minnieur (pminnieur)
@ -179,12 +180,15 @@ Symfony is the result of the work of many people who made the code better
- Justin Hileman (bobthecow)
- Blanchon Vincent (blanchonvincent)
- Michele Orselli (orso)
- Tom Van Looy (tvlooy)
- Sven Paulus (subsven)
- Lars Strojny (lstrojny)
- Rui Marinho (ruimarinho)
- Daniel Espendiller
- Dawid Nowak
- Eugene Wissner
- Julien Brochet (mewt)
- Yonel Ceruto González (yonelceruto)
- Sergey Linnik (linniksa)
- Michaël Perrin (michael.perrin)
- Marcel Beerta (mazen)
@ -205,8 +209,8 @@ Symfony is the result of the work of many people who made the code better
- Danny Berger (dpb587)
- Jérôme Vasseur
- Roman Marintšenko (inori)
- Christian Schmidt
- Xavier Montaña Carreras (xmontana)
- Tom Van Looy (tvlooy)
- Chris Wilkinson (thewilkybarkid)
- Mickaël Andrieu (mickaelandrieu)
- Xavier Perez
@ -214,8 +218,8 @@ Symfony is the result of the work of many people who made the code better
- Katsuhiro OGAWA
- Alif Rachmawadi
- Kristen Gilden (kgilden)
- Dawid Nowak
- Pierre-Yves LEBECQ (pylebecq)
- Alex Pott
- Jakub Kucharovic (jkucharovic)
- Eugene Leonovich (rybakit)
- Filippo Tessarotto
@ -227,8 +231,10 @@ Symfony is the result of the work of many people who made the code better
- Ray
- Grégoire Paris (greg0ire)
- Chekote
- Tobias Nyholm (tobias)
- Thomas Adam
- Albert Casademont (acasademont)
- Jhonny Lidfors (jhonne)
- Diego Agulló (aeoris)
- jdhoek
- Nikita Konstantinov
@ -242,7 +248,6 @@ Symfony is the result of the work of many people who made the code better
- Roumen Damianoff (roumen)
- Antonio J. García Lagar (ajgarlag)
- Kim Hemsø Rasmussen (kimhemsoe)
- Christian Schmidt
- Wouter Van Hecke
- Peter Kruithof (pkruithof)
- Michael Holm (hollo)
@ -257,17 +262,15 @@ Symfony is the result of the work of many people who made the code better
- Andrew Moore (finewolf)
- Bertrand Zuchuat (garfield-fr)
- Gabor Toth (tgabi333)
- Alex Pott
- realmfoo
- Thomas Tourlourat (armetiz)
- Andrey Esaulov (andremaha)
- Tobias Nyholm (tobias)
- Grégoire Passault (gregwar)
- Leo Feyer
- Ismael Ambrosi (iambrosi)
- Uwe Jäger (uwej711)
- Aurelijus Valeiša (aurelijus)
- Jan Decavele (jandc)
- Yonel Ceruto González (yonelceruto)
- Gustavo Piltcher
- Stepan Tanasiychuk (stfalcon)
- Tiago Ribeiro (fixe)
@ -306,8 +309,8 @@ Symfony is the result of the work of many people who made the code better
- Felix Labrecque
- Yaroslav Kiliba
- Terje Bråten
- Roland Franssen (ro0)
- Robbert Klarenbeek (robbertkl)
- Marek Štípek (maryo)
- Alessandro Chitolina
- JhonnyL
- hossein zolfi (ocean)
@ -317,6 +320,8 @@ Symfony is the result of the work of many people who made the code better
- Stéphane PY (steph_py)
- Philipp Kräutli (pkraeutli)
- Kirill chEbba Chebunin (chebba)
- Tristan Darricau (nicofuma)
- SpacePossum
- Greg Thornton (xdissent)
- Costin Bereveanu (schniper)
- Loïc Chardonnet (gnusat)
@ -328,7 +333,6 @@ Symfony is the result of the work of many people who made the code better
- Endre Fejes
- Tobias Naumann (tna)
- Daniel Beyer
- Jhonny Lidfors (jhonne)
- Shein Alexey
- Baptiste Lafontaine
- Joe Lencioni
@ -383,7 +387,6 @@ Symfony is the result of the work of many people who made the code better
- cedric lombardot (cedriclombardot)
- Jonas Flodén (flojon)
- Christian Schmidt
- Marek Štípek (maryo)
- Marcin Sikoń (marphi)
- Dominik Zogg (dominik.zogg)
- Marek Pietrzak
@ -393,6 +396,7 @@ Symfony is the result of the work of many people who made the code better
- Christian Wahler
- Mathieu Lemoine
- Gintautas Miselis
- James Halsall (jaitsu)
- David Badura (davidbadura)
- Zander Baldwin
- Adam Harvey
@ -409,7 +413,6 @@ Symfony is the result of the work of many people who made the code better
- Benoît Burnichon (bburnichon)
- Sebastian Bergmann
- Pablo Díez (pablodip)
- SpacePossum
- Kevin McBride
- Philipp Rieber (bicpi)
- Manuel de Ruiter (manuel)
@ -428,6 +431,7 @@ Symfony is the result of the work of many people who made the code better
- Filip Procházka (fprochazka)
- mmoreram
- Markus Lanthaler (lanthaler)
- Remi Collet
- Vicent Soria Durá (vicentgodella)
- Nicolas Dewez (nicolas_dewez)
- Anthony Ferrara
@ -435,7 +439,7 @@ Symfony is the result of the work of many people who made the code better
- Jakub Škvára (jskvara)
- Andrew Udvare (audvare)
- alexpods
- Tristan Darricau (nicofuma)
- Michele Locati
- Erik Trapman (eriktrapman)
- De Cock Xavier (xdecock)
- Almog Baku (almogbaku)
@ -449,13 +453,13 @@ Symfony is the result of the work of many people who made the code better
- DUPUCH (bdupuch)
- Benjamin Leveque (benji07)
- Nate (frickenate)
- Timothée Barray (tyx)
- jhonnyL
- sasezaki
- Dawid Pakuła (zulusx)
- Florian Rey (nervo)
- Oskar Stark (oskarstark)
- Rodrigo Borrego Bernabé (rodrigobb)
- Leo Feyer
- MatTheCat
- Denis Gorbachev (starfall)
- Peter van Dommelen
@ -557,6 +561,7 @@ Symfony is the result of the work of many people who made the code better
- Hossein Bukhamsin
- Disparity
- origaminal
- Maxime STEINHAUSSER
- Paweł Wacławczyk (pwc)
- Oleg Zinchenko (cystbear)
- Johannes Klauss (cloppy)
@ -567,6 +572,7 @@ Symfony is the result of the work of many people who made the code better
- Tiago Brito (blackmx)
- Richard van den Brand (ricbra)
- develop
- ReenExe
- Mark Sonnabaum
- Richard Quadling
- jochenvdv
@ -596,7 +602,6 @@ Symfony is the result of the work of many people who made the code better
- Lars Vierbergen
- Dennis Hotson
- Andrew Tchircoff (andrewtch)
- Remi Collet
- michaelwilliams
- 1emming
- Leevi Graham (leevigraham)
@ -619,7 +624,6 @@ Symfony is the result of the work of many people who made the code better
- possum
- Denis Zunke (donalberto)
- Olivier Maisonneuve (olineuve)
- Michele Locati
- Masterklavi
- Francis Turmel (fturmel)
- cgonzalez
@ -630,6 +634,7 @@ Symfony is the result of the work of many people who made the code better
- Harm van Tilborg
- Jan Prieser
- Adrien Lucas (adrienlucas)
- Zhuravlev Alexander (scif)
- James Michael DuPont
- Tom Klingenberg
- Christopher Hall (mythmakr)
@ -681,7 +686,6 @@ Symfony is the result of the work of many people who made the code better
- abdul malik ikhsan (samsonasik)
- Henry Snoek (snoek09)
- Simone Di Maulo (toretto460)
- Timothée Barray (tyx)
- Sander Toonen (xatoo)
- Christian Morgan
- Alexander Miehe (engerim)
@ -801,7 +805,6 @@ Symfony is the result of the work of many people who made the code better
- Ken Marfilla (marfillaster)
- benatespina (benatespina)
- Denis Kop
- Maxime STEINHAUSSER
- jfcixmedia
- Martijn Evers
- Benjamin Paap (benjaminpaap)
@ -834,6 +837,7 @@ Symfony is the result of the work of many people who made the code better
- Rodrigo Díez Villamuera (rodrigodiez)
- e-ivanov
- Jochen Bayer (jocl)
- Matteo Beccati (matteobeccati)
- Jeremy Bush
- wizhippo
- Viacheslav Sychov
@ -855,6 +859,7 @@ Symfony is the result of the work of many people who made the code better
- Gustavo Adrian
- Yannick
- spdionis
- Taras Girnyk
- Eduardo García Sanz (coma)
- James Gilliland
- Rhodri Pugh (rodnaph)
@ -882,6 +887,7 @@ Symfony is the result of the work of many people who made the code better
- Christian Sciberras
- Clement Herreman (clemherreman)
- Dan Ionut Dumitriu (danionut90)
- David Maicher (dmaicher)
- Nyro (nyro)
- Marco
- Marc Torres
@ -946,6 +952,7 @@ Symfony is the result of the work of many people who made the code better
- ShiraNai7
- Vašek Purchart (vasek-purchart)
- Janusz Jabłoński (yanoosh)
- Sandro Hopf
- Łukasz Makuch
- George Giannoulopoulos
- Daniel Richter (richtermeister)
@ -971,7 +978,6 @@ Symfony is the result of the work of many people who made the code better
- WedgeSama
- Felds Liscia
- Ahmed TAILOULOUTE (ahmedtai)
- James Halsall (jaitsu)
- Maxime Veber (nek-)
- Sullivan SENECHAL
- Tadcka
@ -1026,6 +1032,7 @@ Symfony is the result of the work of many people who made the code better
- Valentin VALCIU
- Kevin Dew
- James Cowgill
- 1ma (jautenim)
- Nicolas Schwartz (nicoschwartz)
- Patrik Gmitter (patie)
- Jonathan Gough
@ -1102,8 +1109,8 @@ Symfony is the result of the work of many people who made the code better
- David Stone
- Jovan Perovic (jperovic)
- Pablo Maria Martelletti (pmartelletti)
- Zhuravlev Alexander (scif)
- Yassine Guedidi (yguedidi)
- Waqas Ahmed
- Luis Muñoz
- Andreas
- Thomas Chmielowiec
@ -1185,6 +1192,7 @@ Symfony is the result of the work of many people who made the code better
- Adam
- devel
- taiiiraaa
- Johann Pardanaud
- Trevor Suarez
- gedrox
- dropfen
@ -1313,6 +1321,7 @@ Symfony is the result of the work of many people who made the code better
- Joseph Deray
- Damian Sromek
- Ben
- Evgeniy Tetenchuk
- dasmfm
- Arnaud Buathier (arnapou)
- chesteroni (chesteroni)
@ -1403,6 +1412,7 @@ Symfony is the result of the work of many people who made the code better
- Benjamin Long
- Matt Janssen
- Peter Gribanov
- Ben Johnson
- kwiateusz
- David Soria Parra
- Sergiy Sokolenko
@ -1526,6 +1536,7 @@ Symfony is the result of the work of many people who made the code better
- smokeybear87
- Gustavo Adrian
- Kevin Weber
- Dionysis Arvanitis
- Sergey Fedotov
- Michael
- fh-github@fholzhauer.de

View File

@ -336,7 +336,7 @@ abstract class AbstractDoctrineExtension extends Extension
$memcacheClass = !empty($cacheDriver['class']) ? $cacheDriver['class'] : '%'.$this->getObjectManagerElementName('cache.memcache.class').'%';
$memcacheInstanceClass = !empty($cacheDriver['instance_class']) ? $cacheDriver['instance_class'] : '%'.$this->getObjectManagerElementName('cache.memcache_instance.class').'%';
$memcacheHost = !empty($cacheDriver['host']) ? $cacheDriver['host'] : '%'.$this->getObjectManagerElementName('cache.memcache_host').'%';
$memcachePort = !empty($cacheDriver['port']) || (isset($cacheDriver['port']) && $cacheDriver['port'] === 0) ? $cacheDriver['port'] : '%'.$this->getObjectManagerElementName('cache.memcache_port').'%';
$memcachePort = !empty($cacheDriver['port']) || (isset($cacheDriver['port']) && $cacheDriver['port'] === 0) ? $cacheDriver['port'] : '%'.$this->getObjectManagerElementName('cache.memcache_port').'%';
$cacheDef = new Definition($memcacheClass);
$memcacheInstance = new Definition($memcacheInstanceClass);
$memcacheInstance->addMethodCall('connect', array(

View File

@ -139,7 +139,6 @@ EOF
return;
}
if ($type === 'functions' || $type === 'filters') {
$args = array();
$cb = $entity->getCallable();
if (is_null($cb)) {
return;

View File

@ -87,7 +87,6 @@ EOF
throw new \RuntimeException(sprintf('File or directory "%s" is not readable', $filename));
}
$files = array();
if (is_file($filename)) {
$files = array($filename);
} elseif (is_dir($filename)) {

View File

@ -38,6 +38,10 @@ class AddConsoleCommandPass implements CompilerPassInterface
$class = $container->getParameterBag()->resolveValue($definition->getClass());
if (!is_subclass_of($class, 'Symfony\\Component\\Console\\Command\\Command')) {
if (!class_exists($class, false)) {
throw new \InvalidArgumentException(sprintf('Class "%s" used for service "%s" cannot be found.', $class, $id));
}
throw new \InvalidArgumentException(sprintf('The service "%s" tagged "console.command" must be a subclass of "Symfony\\Component\\Console\\Command\\Command".', $id));
}
$container->setAlias('console.command.'.strtolower(str_replace('\\', '_', $class)), $id);

View File

@ -52,6 +52,8 @@ class ActionsExtension extends \Twig_Extension
* @param string $uri A URI
* @param array $options An array of options
*
* @return string|null The Response content or null when the Response is streamed
*
* @see FragmentHandler::render()
*/
public function renderUri($uri, array $options = array())

View File

@ -108,8 +108,6 @@ class WebDebugToolbarListener implements EventSubscriberInterface
/**
* Injects the web debug toolbar into the given Response.
*
* @param Response $response A Response instance
*/
protected function injectToolbar(Response $response, Request $request)
{

View File

@ -76,7 +76,7 @@ class Cookie
throw new \UnexpectedValueException(sprintf('The cookie expiration time "%s" is not valid.', $expires));
}
$this->expires = $timestampAsDateTime->getTimestamp();
$this->expires = $timestampAsDateTime->format('U');
}
}
@ -205,13 +205,13 @@ class Cookie
foreach (self::$dateFormats as $dateFormat) {
if (false !== $date = \DateTime::createFromFormat($dateFormat, $dateValue, new \DateTimeZone('GMT'))) {
return $date->getTimestamp();
return $date->format('U');
}
}
// attempt a fallback for unusual formatting
if (false !== $date = date_create($dateValue, new \DateTimeZone('GMT'))) {
return $date->getTimestamp();
return $date->format('U');
}
throw new \InvalidArgumentException(sprintf('Could not parse date "%s".', $dateValue));
@ -304,6 +304,6 @@ class Cookie
*/
public function isExpired()
{
return null !== $this->expires && 0 !== $this->expires && $this->expires < time();
return null !== $this->expires && 0 != $this->expires && $this->expires < time();
}
}

View File

@ -178,7 +178,7 @@ class CookieTest extends \PHPUnit_Framework_TestCase
}
/**
* @expectedException UnexpectedValueException
* @expectedException \UnexpectedValueException
* @expectedExceptionMessage The cookie expiration time "string" is not valid.
*/
public function testConstructException()

View File

@ -579,6 +579,8 @@ class Command
* Add a command usage example.
*
* @param string $usage The usage, it'll be prefixed with the command name
*
* @return Command The current instance
*/
public function addUsage($usage)
{

View File

@ -98,7 +98,7 @@ class MarkdownDescriptor extends Descriptor
.'* Description: '.($command->getDescription() ?: '<none>')."\n"
.'* Usage:'."\n\n"
.array_reduce(array_merge(array($command->getSynopsis()), $command->getAliases(), $command->getUsages()), function ($carry, $usage) {
return $carry .= ' * `'.$usage.'`'."\n";
return $carry.' * `'.$usage.'`'."\n";
})
);

View File

@ -372,8 +372,6 @@ class ProgressHelper extends Helper
}
if (isset($this->formatVars['bar'])) {
$completeBars = 0;
if ($this->max > 0) {
$completeBars = floor($percent * $this->barWidth);
} else {

View File

@ -202,6 +202,7 @@ class QuestionHelper extends Helper
*
* @param OutputInterface $output
* @param Question $question
* @param resource $inputStream
*
* @return string
*/
@ -318,7 +319,8 @@ class QuestionHelper extends Helper
/**
* Gets a hidden response from user.
*
* @param OutputInterface $output An Output instance
* @param OutputInterface $output An Output instance
* @param resource $inputStream The handler resource
*
* @return string The answer
*

View File

@ -108,13 +108,6 @@ class HelperSetTest extends \PHPUnit_Framework_TestCase
}
}
/**
* Create a generic mock for the helper interface. Optionally check for a call to setHelperSet with a specific
* helperset instance.
*
* @param string $name
* @param HelperSet $helperset allows a mock to verify a particular helperset set is being added to the Helper
*/
private function getGenericMockHelper($name, HelperSet $helperset = null)
{
$mock_helper = $this->getMock('\Symfony\Component\Console\Helper\HelperInterface');

View File

@ -70,9 +70,6 @@ class Translator implements TranslatorInterface
*/
private $attributeMatchingTranslators = array();
/**
* Constructor.
*/
public function __construct(ParserInterface $parser = null)
{
$this->mainParser = $parser ?: new Parser();

View File

@ -375,10 +375,12 @@ class ErrorHandler
/**
* 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
*

View File

@ -39,7 +39,7 @@ class ServiceReferenceGraphEdge
/**
* Returns the value of the edge.
*
* @return ServiceReferenceGraphNode
* @return string
*/
public function getValue()
{

View File

@ -230,6 +230,7 @@ class Container implements IntrospectableContainerInterface, ResettableContainer
if ('service_container' === $id
|| isset($this->aliases[$id])
|| isset($this->services[$id])
|| array_key_exists($id, $this->services)
) {
return true;
}
@ -272,7 +273,7 @@ class Container implements IntrospectableContainerInterface, ResettableContainer
$id = $this->aliases[$id];
}
// Re-use shared service instance if it exists.
if (isset($this->services[$id])) {
if (isset($this->services[$id]) || array_key_exists($id, $this->services)) {
return $this->services[$id];
}
@ -354,7 +355,7 @@ class Container implements IntrospectableContainerInterface, ResettableContainer
$id = $this->aliases[$id];
}
return isset($this->services[$id]);
return isset($this->services[$id]) || array_key_exists($id, $this->services);
}
/**

View File

@ -455,7 +455,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface
return $service;
}
if (!isset($this->definitions[$id]) && isset($this->aliasDefinitions[$id])) {
if (!array_key_exists($id, $this->definitions) && isset($this->aliasDefinitions[$id])) {
return $this->get($this->aliasDefinitions[$id]);
}
@ -803,7 +803,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface
*/
public function hasDefinition($id)
{
return isset($this->definitions[strtolower($id)]);
return array_key_exists(strtolower($id), $this->definitions);
}
/**
@ -819,7 +819,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface
{
$id = strtolower($id);
if (!isset($this->definitions[$id])) {
if (!array_key_exists($id, $this->definitions)) {
throw new ServiceNotFoundException($id);
}

View File

@ -267,6 +267,18 @@ class ContainerTest extends \PHPUnit_Framework_TestCase
$this->assertNull($sc->get('inactive', ContainerInterface::NULL_ON_INVALID_REFERENCE));
}
/**
* @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
* @expectedExcepionMessage You have requested a synthetic service ("request"). The DIC does not know how to construct this service.
*/
public function testGetSyntheticServiceAlwaysThrows()
{
require_once __DIR__.'/Fixtures/php/services9.php';
$container = new \ProjectServiceContainer();
$container->get('request', ContainerInterface::NULL_ON_INVALID_REFERENCE);
}
public function testHas()
{
$sc = new ProjectServiceContainer();
@ -344,14 +356,17 @@ class ContainerTest extends \PHPUnit_Framework_TestCase
$container->addScope(new Scope('foo'));
$container->enterScope('foo');
$container->set('foo', new \stdClass(), 'foo');
$scoped1 = $container->get('scoped');
$scopedFoo1 = $container->get('scoped_foo');
$container->enterScope('foo');
$container->set('foo', new \stdClass(), 'foo');
$scoped2 = $container->get('scoped');
$scoped3 = $container->get('SCOPED');
$scopedFoo2 = $container->get('scoped_foo');
$container->set('foo', null, 'foo');
$container->leaveScope('foo');
$scoped4 = $container->get('scoped');
$scopedFoo3 = $container->get('scoped_foo');
@ -734,6 +749,12 @@ class ProjectServiceContainer extends Container
return $this->services['scoped_bar'] = $this->scopedServices['foo']['scoped_bar'] = new \stdClass();
}
protected function synchronizeFooService()
{
// Typically get the service to pass it to a setter
$this->get('foo');
}
protected function synchronizeScopedSynchronizedFooService()
{
$this->synchronized = true;

View File

@ -169,7 +169,7 @@ class PhpDumperTest extends \PHPUnit_Framework_TestCase
/**
* @dataProvider provideInvalidFactories
* @expectedException Symfony\Component\DependencyInjection\Exception\RuntimeException
* @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
* @expectedExceptionMessage Cannot dump definition
*/
public function testInvalidFactories($factory)

View File

@ -60,6 +60,10 @@ class TokenStream
/**
* Tests a token.
*
* @param array|int $type The type to test
* @param string|null $value The token value
* @param string|null $message The syntax error message
*/
public function expect($type, $value = null, $message = null)
{

View File

@ -285,6 +285,8 @@ class Filesystem
*
* @param string $filename Path to the file
*
* @return bool
*
* @throws IOException When windows path is longer than 258 characters
*/
private function isReadable($filename)

View File

@ -183,12 +183,13 @@ class ArrayChoiceList implements ChoiceListInterface
/**
* Flattens an array into the given output variables.
*
* @param array $choices The array to flatten
* @param callable $value The callable for generating choice values
* @param array $choicesByValues The flattened choices indexed by the
* corresponding values
* @param array $keysByValues The original keys indexed by the
* corresponding values
* @param array $choices The array to flatten
* @param callable $value The callable for generating choice values
* @param array $choicesByValues The flattened choices indexed by the
* corresponding values
* @param array $keysByValues The original keys indexed by the
* corresponding values
* @param array $structuredValues The values indexed by the original keys
*
* @internal Must not be used by user-land code
*/

View File

@ -157,12 +157,13 @@ class ArrayKeyChoiceList extends ArrayChoiceList
/**
* Flattens and flips an array into the given output variable.
*
* @param array $choices The array to flatten
* @param callable $value The callable for generating choice values
* @param array $choicesByValues The flattened choices indexed by the
* corresponding values
* @param array $keysByValues The original keys indexed by the
* corresponding values
* @param array $choices The array to flatten
* @param callable $value The callable for generating choice values
* @param array $choicesByValues The flattened choices indexed by the
* corresponding values
* @param array $keysByValues The original keys indexed by the
* corresponding values
* @param array $structuredValues The values indexed by the original keys
*
* @internal Must not be used by user-land code
*/

View File

@ -178,8 +178,6 @@ class DateTimeToLocalizedStringTransformer extends BaseDateTimeTransformer
/**
* Checks if the pattern contains only a date.
*
* @param string $pattern The input pattern
*
* @return bool
*/
protected function isPatternDateOnly()

View File

@ -23,14 +23,8 @@ use Symfony\Component\Validator\ConstraintViolationInterface;
*/
class FormDataExtractor implements FormDataExtractorInterface
{
/**
* @var ValueExporter
*/
private $valueExporter;
/**
* Constructs a new data extractor.
*/
public function __construct(ValueExporter $valueExporter = null)
{
$this->valueExporter = $valueExporter ?: new ValueExporter();

View File

@ -2054,7 +2054,7 @@ class ChoiceTypeTest extends \Symfony\Component\Form\Test\TypeTestCase
'An empty string empty_value is used if placeholder is also an empty string when required [maintains BC]' => array(false, false, true, '', '', ''),
'A non-empty string empty_value is used if placeholder is an empty string when required [maintains BC]' => array(false, false, true, '', 'bar', 'bar'),
'A non-empty string placeholder takes precedence over an empty_value set to false when required' => array(false, false, true, 'foo', false, 'foo'),
'A non-empty string placeholder takes precedence over a not set empty_value' => array(false, false, true, 'foo', null, 'foo'),
'A non-empty string placeholder takes precedence over a not set empty_value when required' => array(false, false, true, 'foo', null, 'foo'),
'A non-empty string placeholder takes precedence over an empty string empty_value when required' => array(false, false, true, 'foo', '', 'foo'),
'A non-empty string placeholder takes precedence over a non-empty string empty_value when required' => array(false, false, true, 'foo', 'bar', 'foo'),
// single expanded, not required

View File

@ -27,7 +27,7 @@ class JsonResponse extends Response
protected $data;
protected $callback;
// Encode <, >, ', &, and " for RFC4627-compliant JSON, which may also be embedded into HTML.
// Encode <, >, ', &, and " characters in the JSON, making it also safe to be embedded into HTML.
// 15 === JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP | JSON_HEX_QUOT
protected $encodingOptions = 15;
@ -50,7 +50,18 @@ class JsonResponse extends Response
}
/**
* {@inheritdoc}
* Factory method for chainability.
*
* Example:
*
* return JsonResponse::create($data, 200)
* ->setSharedMaxAge(300);
*
* @param mixed $data The json response data
* @param int $status The response status code
* @param array $headers An array of response headers
*
* @return JsonResponse
*/
public static function create($data = null, $status = 200, $headers = array())
{

View File

@ -72,6 +72,8 @@ interface FlashBagInterface extends SessionBagInterface
/**
* Sets all flash messages.
*
* @param array $messages
*/
public function setAll(array $messages);

View File

@ -214,6 +214,8 @@ class MongoDbSessionHandler implements \SessionHandlerInterface
* Return an instance of a MongoDate or \MongoDB\BSON\UTCDateTime
*
* @param int $seconds An integer representing UTC seconds since Jan 1 1970. Defaults to now.
*
* @return \MongoDate|\MongoDB\BSON\UTCDateTime
*/
private function createDateTime($seconds = null)
{

View File

@ -54,6 +54,7 @@ class LazyLoadingFragmentHandler extends FragmentHandler
/**
* Adds a service as a fragment renderer.
*
* @param string $name The service name
* @param string $renderer The render service id
*/
public function addRendererService($name, $renderer)

View File

@ -78,7 +78,7 @@ class Profiler
*
* @param Response $response A Response instance
*
* @return Profile A Profile instance
* @return Profile|false A Profile instance
*/
public function loadProfileFromResponse(Response $response)
{
@ -153,7 +153,7 @@ class Profiler
*
* @param string $data A data string as exported by the export() method
*
* @return Profile A Profile instance
* @return Profile|false A Profile instance
*
* @deprecated since Symfony 2.8, to be removed in 3.0.
*/

View File

@ -21,7 +21,7 @@ use Symfony\Component\HttpKernel\KernelEvents;
class ValidateRequestListenerTest extends \PHPUnit_Framework_TestCase
{
/**
* @expectedException Symfony\Component\HttpFoundation\Exception\ConflictingHeadersException
* @expectedException \Symfony\Component\HttpFoundation\Exception\ConflictingHeadersException
*/
public function testListenerThrowsWhenMasterRequestHasInconsistentClientIps()
{

View File

@ -272,7 +272,7 @@ class HttpKernelTest extends \PHPUnit_Framework_TestCase
}
/**
* @expectedException Symfony\Component\HttpKernel\Exception\BadRequestHttpException
* @expectedException \Symfony\Component\HttpKernel\Exception\BadRequestHttpException
*/
public function testInconsistentClientIpsOnMasterRequests()
{

View File

@ -98,7 +98,7 @@ class UriSigner
$host = isset($url['host']) ? $url['host'] : '';
$port = isset($url['port']) ? ':'.$url['port'] : '';
$user = isset($url['user']) ? $url['user'] : '';
$pass = isset($url['pass']) ? ':'.$url['pass'] : '';
$pass = isset($url['pass']) ? ':'.$url['pass'] : '';
$pass = ($user || $pass) ? "$pass@" : '';
$path = isset($url['path']) ? $url['path'] : '';
$query = isset($url['query']) && $url['query'] ? '?'.$url['query'] : '';

View File

@ -566,7 +566,7 @@ class IntlDateFormatter
try {
$this->dateTimeZone = new \DateTimeZone($timeZoneId);
if ('GMT' !== $timeZoneId && $this->dateTimeZone->getName() !== $timeZoneId) {
$timeZoneId = $timeZone = $this->getTimeZoneId();
$timeZone = $this->getTimeZoneId();
}
} catch (\Exception $e) {
if (PHP_VERSION_ID >= 50500 || (extension_loaded('intl') && method_exists('IntlDateFormatter', 'setTimeZone'))) {

View File

@ -42,6 +42,7 @@ class LanguageBundle extends LanguageDataProvider implements LanguageBundleInter
* @param string $path
* @param BundleEntryReaderInterface $reader
* @param LocaleDataProvider $localeProvider
* @param ScriptDataProvider $scriptProvider
*/
public function __construct($path, BundleEntryReaderInterface $reader, LocaleDataProvider $localeProvider, ScriptDataProvider $scriptProvider)
{

View File

@ -943,7 +943,7 @@ class ProcessTest extends \PHPUnit_Framework_TestCase
/**
* @dataProvider provideMethodsThatNeedATerminatedProcess
* @expectedException Symfony\Component\Process\Exception\LogicException
* @expectedException \Symfony\Component\Process\Exception\LogicException
* @expectedExceptionMessage Process must be terminated before calling
*/
public function testMethodsThatNeedATerminatedProcess($method)

View File

@ -101,7 +101,7 @@ class RememberMeListenerTest extends \PHPUnit_Framework_TestCase
}
/**
* @expectedException Symfony\Component\Security\Core\Exception\AuthenticationException
* @expectedException \Symfony\Component\Security\Core\Exception\AuthenticationException
* @expectedExceptionMessage Authentication failed.
*/
public function testOnCoreSecurityIgnoresAuthenticationOptionallyRethrowsExceptionThrownAuthenticationManagerImplementation()

View File

@ -142,6 +142,7 @@ class PhpEngine implements EngineInterface, \ArrayAccess
throw new \InvalidArgumentException('Invalid parameter (view)');
}
// the view variable is exposed to the require file below
$view = $this;
if ($this->evalTemplate instanceof FileStorage) {
extract($this->evalParameters, EXTR_SKIP);

View File

@ -36,7 +36,7 @@ class MoFileDumper extends FileDumper
*/
public function formatCatalogue(MessageCatalogue $messages, $domain, array $options = array())
{
$output = $sources = $targets = $sourceOffsets = $targetOffsets = '';
$sources = $targets = $sourceOffsets = $targetOffsets = '';
$offsets = array();
$size = 0;

View File

@ -80,7 +80,7 @@ class MoFileLoader extends FileLoader
$messages = array();
for ($i = 0; $i < $count; ++$i) {
$singularId = $pluralId = null;
$pluralId = null;
$translated = null;
fseek($stream, $offsetId + $i * 8);

View File

@ -19,7 +19,7 @@ use Symfony\Component\Validator\Exception\OutOfBoundsException;
* When validating a group sequence, each group will only be validated if all
* of the previous groups in the sequence succeeded. For example:
*
* $validator->validate($address, null, new GroupSequence('Basic', 'Strict'));
* $validator->validate($address, null, new GroupSequence(array('Basic', 'Strict')));
*
* In the first step, all constraints that belong to the group "Basic" will be
* validated. If none of the constraints fail, the validator will then validate

View File

@ -40,6 +40,7 @@ abstract class Abstract2Dot5ApiTest extends AbstractValidatorTest
/**
* @param MetadataFactoryInterface $metadataFactory
* @param array $objectInitializers
*
* @return ValidatorInterface
*/

View File

@ -25,7 +25,6 @@ class VarCloner extends AbstractCloner
protected function doClone($var)
{
$useExt = $this->useExt;
$i = 0; // Current iteration position in $queue
$len = 1; // Length of $queue
$pos = 0; // Number of cloned items past the first level
$refsCounter = 0; // Hard references counter

View File

@ -147,8 +147,9 @@ abstract class AbstractDumper implements DataDumperInterface, DumperInterface
/**
* Generic line dumper callback.
*
* @param string $line The line to write
* @param int $depth The recursive depth in the dumped structure
* @param string $line The line to write
* @param int $depth The recursive depth in the dumped structure
* @param string $indentPad The line indent pad
*/
protected function echoLine($line, $depth, $indentPad)
{