summaryrefslogtreecommitdiff
path: root/vendor/symfony/http-kernel
diff options
context:
space:
mode:
authorGreg Roach <fisharebest@webtrees.net>2018-12-01 17:57:53 +0000
committerGreg Roach <fisharebest@webtrees.net>2018-12-01 18:56:03 +0000
commite70f282ef978b175c5529f439f3b572c5b8531a2 (patch)
treecc022e973d89a5507dcbb35561ef93852c551dff /vendor/symfony/http-kernel
parentc16be598f1a8d42127bd64c4878bd92297e18f3b (diff)
downloadwebtrees-e70f282ef978b175c5529f439f3b572c5b8531a2.tar.gz
webtrees-e70f282ef978b175c5529f439f3b572c5b8531a2.tar.bz2
webtrees-e70f282ef978b175c5529f439f3b572c5b8531a2.zip
Update minimum version of PHP to 7.1
Diffstat (limited to 'vendor/symfony/http-kernel')
-rw-r--r--vendor/symfony/http-kernel/Bundle/Bundle.php52
-rw-r--r--vendor/symfony/http-kernel/Bundle/BundleInterface.php13
-rw-r--r--vendor/symfony/http-kernel/CHANGELOG.md42
-rw-r--r--vendor/symfony/http-kernel/CacheClearer/ChainCacheClearer.php23
-rw-r--r--vendor/symfony/http-kernel/CacheClearer/Psr6CacheClearer.php16
-rw-r--r--vendor/symfony/http-kernel/CacheWarmer/CacheWarmerAggregate.php107
-rw-r--r--vendor/symfony/http-kernel/Client.php6
-rw-r--r--vendor/symfony/http-kernel/Config/EnvParametersResource.php99
-rw-r--r--vendor/symfony/http-kernel/Config/FileLocator.php2
-rw-r--r--vendor/symfony/http-kernel/Controller/ArgumentResolver.php4
-rw-r--r--vendor/symfony/http-kernel/Controller/ArgumentResolver/ServiceValueResolver.php18
-rw-r--r--vendor/symfony/http-kernel/Controller/ArgumentResolver/SessionValueResolver.php4
-rw-r--r--vendor/symfony/http-kernel/Controller/ArgumentResolver/TraceableValueResolver.php62
-rw-r--r--vendor/symfony/http-kernel/Controller/ContainerControllerResolver.php71
-rw-r--r--vendor/symfony/http-kernel/Controller/ControllerReference.php2
-rw-r--r--vendor/symfony/http-kernel/Controller/ControllerResolver.php182
-rw-r--r--vendor/symfony/http-kernel/Controller/ControllerResolverInterface.php18
-rw-r--r--vendor/symfony/http-kernel/Controller/TraceableControllerResolver.php29
-rw-r--r--vendor/symfony/http-kernel/ControllerMetadata/ArgumentMetadata.php10
-rw-r--r--vendor/symfony/http-kernel/ControllerMetadata/ArgumentMetadataFactory.php76
-rw-r--r--vendor/symfony/http-kernel/DataCollector/ConfigDataCollector.php30
-rw-r--r--vendor/symfony/http-kernel/DataCollector/DataCollector.php45
-rw-r--r--vendor/symfony/http-kernel/DataCollector/DataCollectorInterface.php5
-rw-r--r--vendor/symfony/http-kernel/DataCollector/DumpDataCollector.php128
-rw-r--r--vendor/symfony/http-kernel/DataCollector/EventDataCollector.php53
-rw-r--r--vendor/symfony/http-kernel/DataCollector/LoggerDataCollector.php23
-rw-r--r--vendor/symfony/http-kernel/DataCollector/RequestDataCollector.php46
-rw-r--r--vendor/symfony/http-kernel/DataCollector/Util/ValueExporter.php99
-rw-r--r--vendor/symfony/http-kernel/Debug/FileLinkFormatter.php8
-rw-r--r--vendor/symfony/http-kernel/DependencyInjection/AddAnnotatedClassesToCachePass.php10
-rw-r--r--vendor/symfony/http-kernel/DependencyInjection/AddClassesToCachePass.php25
-rw-r--r--vendor/symfony/http-kernel/DependencyInjection/ControllerArgumentValueResolverPass.php20
-rw-r--r--vendor/symfony/http-kernel/DependencyInjection/Extension.php33
-rw-r--r--vendor/symfony/http-kernel/DependencyInjection/FragmentRendererPass.php6
-rw-r--r--vendor/symfony/http-kernel/DependencyInjection/LazyLoadingFragmentHandler.php34
-rw-r--r--vendor/symfony/http-kernel/DependencyInjection/RegisterControllerArgumentLocatorsPass.php34
-rw-r--r--vendor/symfony/http-kernel/DependencyInjection/RemoveEmptyControllerArgumentLocatorsPass.php22
-rw-r--r--vendor/symfony/http-kernel/DependencyInjection/ResettableServicePass.php2
-rw-r--r--vendor/symfony/http-kernel/DependencyInjection/ServicesResetter.php4
-rw-r--r--vendor/symfony/http-kernel/Event/FilterControllerArgumentsEvent.php2
-rw-r--r--vendor/symfony/http-kernel/Event/FilterControllerEvent.php2
-rw-r--r--vendor/symfony/http-kernel/Event/FilterResponseEvent.php2
-rw-r--r--vendor/symfony/http-kernel/Event/GetResponseForControllerResultEvent.php2
-rw-r--r--vendor/symfony/http-kernel/Event/GetResponseForExceptionEvent.php2
-rw-r--r--vendor/symfony/http-kernel/Event/KernelEvent.php2
-rw-r--r--vendor/symfony/http-kernel/EventListener/AbstractSessionListener.php81
-rw-r--r--vendor/symfony/http-kernel/EventListener/AbstractTestSessionListener.php19
-rw-r--r--vendor/symfony/http-kernel/EventListener/DebugHandlersListener.php8
-rw-r--r--vendor/symfony/http-kernel/EventListener/DumpListener.php14
-rw-r--r--vendor/symfony/http-kernel/EventListener/ExceptionListener.php57
-rw-r--r--vendor/symfony/http-kernel/EventListener/FragmentListener.php2
-rw-r--r--vendor/symfony/http-kernel/EventListener/LocaleListener.php2
-rw-r--r--vendor/symfony/http-kernel/EventListener/ProfilerListener.php8
-rw-r--r--vendor/symfony/http-kernel/EventListener/ResponseListener.php2
-rw-r--r--vendor/symfony/http-kernel/EventListener/RouterListener.php2
-rw-r--r--vendor/symfony/http-kernel/EventListener/SaveSessionListener.php28
-rw-r--r--vendor/symfony/http-kernel/EventListener/SessionListener.php16
-rw-r--r--vendor/symfony/http-kernel/EventListener/TestSessionListener.php5
-rw-r--r--vendor/symfony/http-kernel/EventListener/TranslatorListener.php11
-rw-r--r--vendor/symfony/http-kernel/Exception/AccessDeniedHttpException.php5
-rw-r--r--vendor/symfony/http-kernel/Exception/BadRequestHttpException.php5
-rw-r--r--vendor/symfony/http-kernel/Exception/ConflictHttpException.php5
-rw-r--r--vendor/symfony/http-kernel/Exception/ControllerDoesNotReturnResponseException.php78
-rw-r--r--vendor/symfony/http-kernel/Exception/GoneHttpException.php5
-rw-r--r--vendor/symfony/http-kernel/Exception/HttpException.php2
-rw-r--r--vendor/symfony/http-kernel/Exception/LengthRequiredHttpException.php5
-rw-r--r--vendor/symfony/http-kernel/Exception/MethodNotAllowedHttpException.php5
-rw-r--r--vendor/symfony/http-kernel/Exception/NotAcceptableHttpException.php5
-rw-r--r--vendor/symfony/http-kernel/Exception/NotFoundHttpException.php5
-rw-r--r--vendor/symfony/http-kernel/Exception/PreconditionFailedHttpException.php5
-rw-r--r--vendor/symfony/http-kernel/Exception/PreconditionRequiredHttpException.php5
-rw-r--r--vendor/symfony/http-kernel/Exception/ServiceUnavailableHttpException.php6
-rw-r--r--vendor/symfony/http-kernel/Exception/TooManyRequestsHttpException.php6
-rw-r--r--vendor/symfony/http-kernel/Exception/UnauthorizedHttpException.php5
-rw-r--r--vendor/symfony/http-kernel/Exception/UnprocessableEntityHttpException.php5
-rw-r--r--vendor/symfony/http-kernel/Exception/UnsupportedMediaTypeHttpException.php5
-rw-r--r--vendor/symfony/http-kernel/Fragment/AbstractSurrogateFragmentRenderer.php6
-rw-r--r--vendor/symfony/http-kernel/Fragment/FragmentHandler.php2
-rw-r--r--vendor/symfony/http-kernel/Fragment/HIncludeFragmentRenderer.php9
-rw-r--r--vendor/symfony/http-kernel/Fragment/InlineFragmentRenderer.php7
-rw-r--r--vendor/symfony/http-kernel/HttpCache/HttpCache.php25
-rw-r--r--vendor/symfony/http-kernel/HttpCache/Store.php4
-rw-r--r--vendor/symfony/http-kernel/HttpCache/SubRequestHandler.php51
-rw-r--r--vendor/symfony/http-kernel/HttpKernel.php61
-rw-r--r--vendor/symfony/http-kernel/Kernel.php305
-rw-r--r--vendor/symfony/http-kernel/KernelInterface.php22
-rw-r--r--vendor/symfony/http-kernel/Log/DebugLoggerInterface.php17
-rw-r--r--vendor/symfony/http-kernel/Log/Logger.php11
-rw-r--r--vendor/symfony/http-kernel/Profiler/FileProfilerStorage.php6
-rw-r--r--vendor/symfony/http-kernel/Profiler/Profile.php20
-rw-r--r--vendor/symfony/http-kernel/Profiler/Profiler.php22
-rw-r--r--vendor/symfony/http-kernel/Profiler/ProfilerStorageInterface.php8
-rw-r--r--vendor/symfony/http-kernel/Tests/Bundle/BundleTest.php35
-rw-r--r--vendor/symfony/http-kernel/Tests/CacheClearer/ChainCacheClearerTest.php17
-rw-r--r--vendor/symfony/http-kernel/Tests/CacheClearer/Psr6CacheClearerTest.php21
-rw-r--r--vendor/symfony/http-kernel/Tests/CacheWarmer/CacheWarmerAggregateTest.php30
-rw-r--r--vendor/symfony/http-kernel/Tests/CacheWarmer/CacheWarmerTest.php2
-rw-r--r--vendor/symfony/http-kernel/Tests/ClientTest.php27
-rw-r--r--vendor/symfony/http-kernel/Tests/Config/EnvParametersResourceTest.php110
-rw-r--r--vendor/symfony/http-kernel/Tests/Controller/ArgumentResolver/ServiceValueResolverTest.php28
-rw-r--r--vendor/symfony/http-kernel/Tests/Controller/ArgumentResolver/TraceableValueResolverTest.php76
-rw-r--r--vendor/symfony/http-kernel/Tests/Controller/ArgumentResolverTest.php11
-rw-r--r--vendor/symfony/http-kernel/Tests/Controller/ContainerControllerResolverTest.php209
-rw-r--r--vendor/symfony/http-kernel/Tests/Controller/ControllerResolverTest.php260
-rw-r--r--vendor/symfony/http-kernel/Tests/ControllerMetadata/ArgumentMetadataFactoryTest.php9
-rw-r--r--vendor/symfony/http-kernel/Tests/DataCollector/ConfigDataCollectorTest.php22
-rw-r--r--vendor/symfony/http-kernel/Tests/DataCollector/DumpDataCollectorTest.php19
-rw-r--r--vendor/symfony/http-kernel/Tests/DataCollector/LoggerDataCollectorTest.php44
-rw-r--r--vendor/symfony/http-kernel/Tests/DataCollector/RequestDataCollectorTest.php8
-rw-r--r--vendor/symfony/http-kernel/Tests/DataCollector/Util/ValueExporterTest.php51
-rw-r--r--vendor/symfony/http-kernel/Tests/DependencyInjection/ControllerArgumentValueResolverPassTest.php64
-rw-r--r--vendor/symfony/http-kernel/Tests/DependencyInjection/LazyLoadingFragmentHandlerTest.php25
-rw-r--r--vendor/symfony/http-kernel/Tests/DependencyInjection/RegisterControllerArgumentLocatorsPassTest.php62
-rw-r--r--vendor/symfony/http-kernel/Tests/DependencyInjection/RemoveEmptyControllerArgumentLocatorsPassTest.php61
-rw-r--r--vendor/symfony/http-kernel/Tests/EventListener/ExceptionListenerTest.php23
-rw-r--r--vendor/symfony/http-kernel/Tests/EventListener/RouterListenerTest.php7
-rw-r--r--vendor/symfony/http-kernel/Tests/EventListener/SaveSessionListenerTest.php3
-rw-r--r--vendor/symfony/http-kernel/Tests/EventListener/SessionListenerTest.php58
-rw-r--r--vendor/symfony/http-kernel/Tests/EventListener/TestSessionListenerTest.php14
-rw-r--r--vendor/symfony/http-kernel/Tests/EventListener/TranslatorListenerTest.php3
-rw-r--r--vendor/symfony/http-kernel/Tests/Exception/MethodNotAllowedHttpExceptionTest.php13
-rw-r--r--vendor/symfony/http-kernel/Tests/Exception/ServiceUnavailableHttpExceptionTest.php13
-rw-r--r--vendor/symfony/http-kernel/Tests/Exception/TooManyRequestsHttpExceptionTest.php13
-rw-r--r--vendor/symfony/http-kernel/Tests/Exception/UnauthorizedHttpExceptionTest.php13
-rw-r--r--vendor/symfony/http-kernel/Tests/Fixtures/123/Kernel123.php37
-rw-r--r--vendor/symfony/http-kernel/Tests/Fixtures/KernelForTest.php10
-rw-r--r--vendor/symfony/http-kernel/Tests/Fixtures/KernelWithoutBundles.php5
-rw-r--r--vendor/symfony/http-kernel/Tests/Fixtures/TestEventDispatcher.php10
-rw-r--r--vendor/symfony/http-kernel/Tests/Fragment/EsiFragmentRendererTest.php14
-rw-r--r--vendor/symfony/http-kernel/Tests/Fragment/FragmentHandlerTest.php2
-rw-r--r--vendor/symfony/http-kernel/Tests/Fragment/InlineFragmentRendererTest.php44
-rw-r--r--vendor/symfony/http-kernel/Tests/HttpCache/EsiTest.php2
-rw-r--r--vendor/symfony/http-kernel/Tests/HttpCache/SsiTest.php2
-rw-r--r--vendor/symfony/http-kernel/Tests/HttpKernelTest.php37
-rw-r--r--vendor/symfony/http-kernel/Tests/KernelTest.php369
-rw-r--r--vendor/symfony/http-kernel/Tests/Profiler/FileProfilerStorageTest.php2
-rw-r--r--vendor/symfony/http-kernel/Tests/Profiler/ProfilerTest.php2
-rw-r--r--vendor/symfony/http-kernel/UriSigner.php2
-rw-r--r--vendor/symfony/http-kernel/composer.json46
-rw-r--r--vendor/symfony/http-kernel/phpunit.xml.dist2
140 files changed, 1764 insertions, 2636 deletions
diff --git a/vendor/symfony/http-kernel/Bundle/Bundle.php b/vendor/symfony/http-kernel/Bundle/Bundle.php
index f42895a733..26dea9b205 100644
--- a/vendor/symfony/http-kernel/Bundle/Bundle.php
+++ b/vendor/symfony/http-kernel/Bundle/Bundle.php
@@ -16,7 +16,6 @@ use Symfony\Component\DependencyInjection\Container;
use Symfony\Component\DependencyInjection\ContainerAwareTrait;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Extension\ExtensionInterface;
-use Symfony\Component\Finder\Finder;
/**
* An implementation of BundleInterface that adds a few conventions
@@ -119,14 +118,9 @@ abstract class Bundle implements BundleInterface
}
/**
- * {@inheritdoc}
- */
- public function getParent()
- {
- }
-
- /**
- * {@inheritdoc}
+ * Returns the bundle name (the class short name).
+ *
+ * @return string The Bundle name
*/
final public function getName()
{
@@ -137,48 +131,8 @@ abstract class Bundle implements BundleInterface
return $this->name;
}
- /**
- * Finds and registers Commands.
- *
- * Override this method if your bundle commands do not follow the conventions:
- *
- * * Commands are in the 'Command' sub-directory
- * * Commands extend Symfony\Component\Console\Command\Command
- */
public function registerCommands(Application $application)
{
- if (!is_dir($dir = $this->getPath().'/Command')) {
- return;
- }
-
- if (!class_exists('Symfony\Component\Finder\Finder')) {
- throw new \RuntimeException('You need the symfony/finder component to register bundle commands.');
- }
-
- $finder = new Finder();
- $finder->files()->name('*Command.php')->in($dir);
-
- $prefix = $this->getNamespace().'\\Command';
- foreach ($finder as $file) {
- $ns = $prefix;
- if ($relativePath = $file->getRelativePath()) {
- $ns .= '\\'.str_replace('/', '\\', $relativePath);
- }
- $class = $ns.'\\'.$file->getBasename('.php');
- if ($this->container) {
- $commandIds = $this->container->hasParameter('console.command.ids') ? $this->container->getParameter('console.command.ids') : array();
- $alias = 'console.command.'.strtolower(str_replace('\\', '_', $class));
- if (isset($commandIds[$alias]) || $this->container->has($alias)) {
- continue;
- }
- }
- $r = new \ReflectionClass($class);
- if ($r->isSubclassOf('Symfony\\Component\\Console\\Command\\Command') && !$r->isAbstract() && !$r->getConstructor()->getNumberOfRequiredParameters()) {
- @trigger_error(sprintf('Auto-registration of the command "%s" is deprecated since Symfony 3.4 and won\'t be supported in 4.0. Use PSR-4 based service discovery instead.', $class), E_USER_DEPRECATED);
-
- $application->add($r->newInstance());
- }
- }
}
/**
diff --git a/vendor/symfony/http-kernel/Bundle/BundleInterface.php b/vendor/symfony/http-kernel/Bundle/BundleInterface.php
index 14a7f6f4fd..88a95d8332 100644
--- a/vendor/symfony/http-kernel/Bundle/BundleInterface.php
+++ b/vendor/symfony/http-kernel/Bundle/BundleInterface.php
@@ -47,19 +47,6 @@ interface BundleInterface extends ContainerAwareInterface
public function getContainerExtension();
/**
- * Returns the bundle name that this bundle overrides.
- *
- * Despite its name, this method does not imply any parent/child relationship
- * between the bundles, just a way to extend and override an existing
- * bundle.
- *
- * @return string The Bundle name it overrides or null if no parent
- *
- * @deprecated This method is deprecated as of 3.4 and will be removed in 4.0.
- */
- public function getParent();
-
- /**
* Returns the bundle name (the class short name).
*
* @return string The Bundle name
diff --git a/vendor/symfony/http-kernel/CHANGELOG.md b/vendor/symfony/http-kernel/CHANGELOG.md
index fb29f76962..b96b4aefa1 100644
--- a/vendor/symfony/http-kernel/CHANGELOG.md
+++ b/vendor/symfony/http-kernel/CHANGELOG.md
@@ -1,6 +1,48 @@
CHANGELOG
=========
+4.2.0
+-----
+
+ * deprecated `KernelInterface::getRootDir()` and the `kernel.root_dir` parameter
+ * deprecated `KernelInterface::getName()` and the `kernel.name` parameter
+ * deprecated the first and second constructor argument of `ConfigDataCollector`
+ * deprecated `ConfigDataCollector::getApplicationName()`
+ * deprecated `ConfigDataCollector::getApplicationVersion()`
+
+4.1.0
+-----
+
+ * added orphaned events support to `EventDataCollector`
+ * `ExceptionListener` now logs exceptions at priority `0` (previously logged at `-128`)
+ * Added support for using `service::method` to reference controllers, making it consistent with other cases. It is recommended over the `service:action` syntax with a single colon, which will be deprecated in the future.
+ * Added the ability to profile individual argument value resolvers via the
+ `Symfony\Component\HttpKernel\Controller\ArgumentResolver\TraceableValueResolver`
+
+4.0.0
+-----
+
+ * removed the `DataCollector::varToString()` method, use `DataCollector::cloneVar()`
+ instead
+ * using the `DataCollector::cloneVar()` method requires the VarDumper component
+ * removed the `ValueExporter` class
+ * removed `ControllerResolverInterface::getArguments()`
+ * removed `TraceableControllerResolver::getArguments()`
+ * removed `ControllerResolver::getArguments()` and the ability to resolve arguments
+ * removed the `argument_resolver` service dependency from the `debug.controller_resolver`
+ * removed `LazyLoadingFragmentHandler::addRendererService()`
+ * removed `Psr6CacheClearer::addPool()`
+ * removed `Extension::addClassesToCompile()` and `Extension::getClassesToCompile()`
+ * removed `Kernel::loadClassCache()`, `Kernel::doLoadClassCache()`, `Kernel::setClassCache()`,
+ and `Kernel::getEnvParameters()`
+ * support for the `X-Status-Code` when handling exceptions in the `HttpKernel`
+ has been dropped, use the `HttpKernel::allowCustomResponseCode()` method
+ instead
+ * removed convention-based commands registration
+ * removed the `ChainCacheClearer::add()` method
+ * removed the `CacheaWarmerAggregate::add()` and `setWarmers()` methods
+ * made `CacheWarmerAggregate` and `ChainCacheClearer` classes final
+
3.4.0
-----
diff --git a/vendor/symfony/http-kernel/CacheClearer/ChainCacheClearer.php b/vendor/symfony/http-kernel/CacheClearer/ChainCacheClearer.php
index 8ee4275b16..a646119d99 100644
--- a/vendor/symfony/http-kernel/CacheClearer/ChainCacheClearer.php
+++ b/vendor/symfony/http-kernel/CacheClearer/ChainCacheClearer.php
@@ -16,18 +16,13 @@ namespace Symfony\Component\HttpKernel\CacheClearer;
*
* @author Dustin Dobervich <ddobervich@gmail.com>
*
- * @final since version 3.4
+ * @final
*/
class ChainCacheClearer implements CacheClearerInterface
{
- protected $clearers;
+ private $clearers;
- /**
- * Constructs a new instance of ChainCacheClearer.
- *
- * @param array $clearers The initial clearers
- */
- public function __construct($clearers = array())
+ public function __construct(iterable $clearers = array())
{
$this->clearers = $clearers;
}
@@ -41,16 +36,4 @@ class ChainCacheClearer implements CacheClearerInterface
$clearer->clear($cacheDir);
}
}
-
- /**
- * Adds a cache clearer to the aggregate.
- *
- * @deprecated since version 3.4, to be removed in 4.0, inject the list of clearers as a constructor argument instead.
- */
- public function add(CacheClearerInterface $clearer)
- {
- @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 3.4 and will be removed in 4.0, inject the list of clearers as a constructor argument instead.', __METHOD__), E_USER_DEPRECATED);
-
- $this->clearers[] = $clearer;
- }
}
diff --git a/vendor/symfony/http-kernel/CacheClearer/Psr6CacheClearer.php b/vendor/symfony/http-kernel/CacheClearer/Psr6CacheClearer.php
index d413d2c9d6..d7db027072 100644
--- a/vendor/symfony/http-kernel/CacheClearer/Psr6CacheClearer.php
+++ b/vendor/symfony/http-kernel/CacheClearer/Psr6CacheClearer.php
@@ -11,8 +11,6 @@
namespace Symfony\Component\HttpKernel\CacheClearer;
-use Psr\Cache\CacheItemPoolInterface;
-
/**
* @author Nicolas Grekas <p@tchwork.com>
*/
@@ -25,16 +23,18 @@ class Psr6CacheClearer implements CacheClearerInterface
$this->pools = $pools;
}
- public function addPool(CacheItemPoolInterface $pool)
+ public function hasPool($name)
{
- @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0. Pass an array of pools indexed by name to the constructor instead.', __METHOD__), E_USER_DEPRECATED);
-
- $this->pools[] = $pool;
+ return isset($this->pools[$name]);
}
- public function hasPool($name)
+ public function getPool($name)
{
- return isset($this->pools[$name]);
+ if (!$this->hasPool($name)) {
+ throw new \InvalidArgumentException(sprintf('Cache pool not found: %s.', $name));
+ }
+
+ return $this->pools[$name];
}
public function clearPool($name)
diff --git a/vendor/symfony/http-kernel/CacheWarmer/CacheWarmerAggregate.php b/vendor/symfony/http-kernel/CacheWarmer/CacheWarmerAggregate.php
index ca3911ed5f..171b38596f 100644
--- a/vendor/symfony/http-kernel/CacheWarmer/CacheWarmerAggregate.php
+++ b/vendor/symfony/http-kernel/CacheWarmer/CacheWarmerAggregate.php
@@ -16,20 +16,21 @@ namespace Symfony\Component\HttpKernel\CacheWarmer;
*
* @author Fabien Potencier <fabien@symfony.com>
*
- * @final since version 3.4
+ * @final
*/
class CacheWarmerAggregate implements CacheWarmerInterface
{
- protected $warmers = array();
- protected $optionalsEnabled = false;
- private $triggerDeprecation = false;
+ private $warmers;
+ private $debug;
+ private $deprecationLogsFilepath;
+ private $optionalsEnabled = false;
+ private $onlyOptionalsEnabled = false;
- public function __construct($warmers = array())
+ public function __construct(iterable $warmers = array(), bool $debug = false, string $deprecationLogsFilepath = null)
{
- foreach ($warmers as $warmer) {
- $this->add($warmer);
- }
- $this->triggerDeprecation = true;
+ $this->warmers = $warmers;
+ $this->debug = $debug;
+ $this->deprecationLogsFilepath = $deprecationLogsFilepath;
}
public function enableOptionalWarmers()
@@ -37,6 +38,11 @@ class CacheWarmerAggregate implements CacheWarmerInterface
$this->optionalsEnabled = true;
}
+ public function enableOnlyOptionalWarmers()
+ {
+ $this->onlyOptionalsEnabled = $this->optionalsEnabled = true;
+ }
+
/**
* Warms up the cache.
*
@@ -44,12 +50,62 @@ class CacheWarmerAggregate implements CacheWarmerInterface
*/
public function warmUp($cacheDir)
{
- foreach ($this->warmers as $warmer) {
- if (!$this->optionalsEnabled && $warmer->isOptional()) {
- continue;
+ if ($this->debug) {
+ $collectedLogs = array();
+ $previousHandler = \defined('PHPUNIT_COMPOSER_INSTALL');
+ $previousHandler = $previousHandler ?: set_error_handler(function ($type, $message, $file, $line) use (&$collectedLogs, &$previousHandler) {
+ if (E_USER_DEPRECATED !== $type && E_DEPRECATED !== $type) {
+ return $previousHandler ? $previousHandler($type, $message, $file, $line) : false;
+ }
+
+ if (isset($collectedLogs[$message])) {
+ ++$collectedLogs[$message]['count'];
+
+ return;
+ }
+
+ $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 3);
+ // Clean the trace by removing first frames added by the error handler itself.
+ for ($i = 0; isset($backtrace[$i]); ++$i) {
+ if (isset($backtrace[$i]['file'], $backtrace[$i]['line']) && $backtrace[$i]['line'] === $line && $backtrace[$i]['file'] === $file) {
+ $backtrace = \array_slice($backtrace, 1 + $i);
+ break;
+ }
+ }
+
+ $collectedLogs[$message] = array(
+ 'type' => $type,
+ 'message' => $message,
+ 'file' => $file,
+ 'line' => $line,
+ 'trace' => $backtrace,
+ 'count' => 1,
+ );
+ });
+ }
+
+ try {
+ foreach ($this->warmers as $warmer) {
+ if (!$this->optionalsEnabled && $warmer->isOptional()) {
+ continue;
+ }
+ if ($this->onlyOptionalsEnabled && !$warmer->isOptional()) {
+ continue;
+ }
+
+ $warmer->warmUp($cacheDir);
}
+ } finally {
+ if ($this->debug && true !== $previousHandler) {
+ restore_error_handler();
- $warmer->warmUp($cacheDir);
+ if (file_exists($this->deprecationLogsFilepath)) {
+ $previousLogs = unserialize(file_get_contents($this->deprecationLogsFilepath));
+ $collectedLogs = array_merge($previousLogs, $collectedLogs);
+ }
+
+ file_put_contents($this->deprecationLogsFilepath, serialize(array_values($collectedLogs)));
+ }
}
}
@@ -62,29 +118,4 @@ class CacheWarmerAggregate implements CacheWarmerInterface
{
return false;
}
-
- /**
- * @deprecated since version 3.4, to be removed in 4.0, inject the list of clearers as a constructor argument instead.
- */
- public function setWarmers(array $warmers)
- {
- @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 3.4 and will be removed in 4.0, inject the list of clearers as a constructor argument instead.', __METHOD__), E_USER_DEPRECATED);
-
- $this->warmers = array();
- foreach ($warmers as $warmer) {
- $this->add($warmer);
- }
- }
-
- /**
- * @deprecated since version 3.4, to be removed in 4.0, inject the list of clearers as a constructor argument instead.
- */
- public function add(CacheWarmerInterface $warmer)
- {
- if ($this->triggerDeprecation) {
- @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 3.4 and will be removed in 4.0, inject the list of clearers as a constructor argument instead.', __METHOD__), E_USER_DEPRECATED);
- }
-
- $this->warmers[] = $warmer;
- }
}
diff --git a/vendor/symfony/http-kernel/Client.php b/vendor/symfony/http-kernel/Client.php
index 324710bb8a..62555e9a5a 100644
--- a/vendor/symfony/http-kernel/Client.php
+++ b/vendor/symfony/http-kernel/Client.php
@@ -25,8 +25,8 @@ use Symfony\Component\HttpFoundation\Response;
*
* @author Fabien Potencier <fabien@symfony.com>
*
- * @method Request|null getRequest() A Request instance
- * @method Response|null getResponse() A Response instance
+ * @method Request getRequest() A Request instance
+ * @method Response getResponse() A Response instance
*/
class Client extends BaseClient
{
@@ -169,7 +169,6 @@ EOF;
'',
$value->getClientOriginalName(),
$value->getClientMimeType(),
- 0,
UPLOAD_ERR_INI_SIZE,
true
);
@@ -178,7 +177,6 @@ EOF;
$value->getPathname(),
$value->getClientOriginalName(),
$value->getClientMimeType(),
- $value->getClientSize(),
$value->getError(),
true
);
diff --git a/vendor/symfony/http-kernel/Config/EnvParametersResource.php b/vendor/symfony/http-kernel/Config/EnvParametersResource.php
deleted file mode 100644
index f8d2a72b2a..0000000000
--- a/vendor/symfony/http-kernel/Config/EnvParametersResource.php
+++ /dev/null
@@ -1,99 +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\HttpKernel\Config;
-
-use Symfony\Component\Config\Resource\SelfCheckingResourceInterface;
-
-/**
- * EnvParametersResource represents resources stored in prefixed environment variables.
- *
- * @author Chris Wilkinson <chriswilkinson84@gmail.com>
- *
- * @deprecated since version 3.4, to be removed in 4.0
- */
-class EnvParametersResource implements SelfCheckingResourceInterface, \Serializable
-{
- /**
- * @var string
- */
- private $prefix;
-
- /**
- * @var string
- */
- private $variables;
-
- /**
- * @param string $prefix
- */
- public function __construct($prefix)
- {
- $this->prefix = $prefix;
- $this->variables = $this->findVariables();
- }
-
- /**
- * {@inheritdoc}
- */
- public function __toString()
- {
- return serialize($this->getResource());
- }
-
- /**
- * @return array An array with two keys: 'prefix' for the prefix used and 'variables' containing all the variables watched by this resource
- */
- public function getResource()
- {
- return array('prefix' => $this->prefix, 'variables' => $this->variables);
- }
-
- /**
- * {@inheritdoc}
- */
- public function isFresh($timestamp)
- {
- return $this->findVariables() === $this->variables;
- }
-
- public function serialize()
- {
- return serialize(array('prefix' => $this->prefix, 'variables' => $this->variables));
- }
-
- public function unserialize($serialized)
- {
- if (\PHP_VERSION_ID >= 70000) {
- $unserialized = unserialize($serialized, array('allowed_classes' => false));
- } else {
- $unserialized = unserialize($serialized);
- }
-
- $this->prefix = $unserialized['prefix'];
- $this->variables = $unserialized['variables'];
- }
-
- private function findVariables()
- {
- $variables = array();
-
- foreach ($_SERVER as $key => $value) {
- if (0 === strpos($key, $this->prefix)) {
- $variables[$key] = $value;
- }
- }
-
- ksort($variables);
-
- return $variables;
- }
-}
diff --git a/vendor/symfony/http-kernel/Config/FileLocator.php b/vendor/symfony/http-kernel/Config/FileLocator.php
index c047ba3dac..20d91b2f05 100644
--- a/vendor/symfony/http-kernel/Config/FileLocator.php
+++ b/vendor/symfony/http-kernel/Config/FileLocator.php
@@ -29,7 +29,7 @@ class FileLocator extends BaseFileLocator
* @param string|null $path The path the global resource directory
* @param array $paths An array of paths where to look for resources
*/
- public function __construct(KernelInterface $kernel, $path = null, array $paths = array())
+ public function __construct(KernelInterface $kernel, string $path = null, array $paths = array())
{
$this->kernel = $kernel;
if (null !== $path) {
diff --git a/vendor/symfony/http-kernel/Controller/ArgumentResolver.php b/vendor/symfony/http-kernel/Controller/ArgumentResolver.php
index fc316920c7..142a6d54a6 100644
--- a/vendor/symfony/http-kernel/Controller/ArgumentResolver.php
+++ b/vendor/symfony/http-kernel/Controller/ArgumentResolver.php
@@ -34,7 +34,7 @@ final class ArgumentResolver implements ArgumentResolverInterface
*/
private $argumentValueResolvers;
- public function __construct(ArgumentMetadataFactoryInterface $argumentMetadataFactory = null, $argumentValueResolvers = array())
+ public function __construct(ArgumentMetadataFactoryInterface $argumentMetadataFactory = null, iterable $argumentValueResolvers = array())
{
$this->argumentMetadataFactory = $argumentMetadataFactory ?: new ArgumentMetadataFactory();
$this->argumentValueResolvers = $argumentValueResolvers ?: self::getDefaultArgumentValueResolvers();
@@ -81,7 +81,7 @@ final class ArgumentResolver implements ArgumentResolverInterface
return $arguments;
}
- public static function getDefaultArgumentValueResolvers()
+ public static function getDefaultArgumentValueResolvers(): iterable
{
return array(
new RequestAttributeValueResolver(),
diff --git a/vendor/symfony/http-kernel/Controller/ArgumentResolver/ServiceValueResolver.php b/vendor/symfony/http-kernel/Controller/ArgumentResolver/ServiceValueResolver.php
index 3294ec862e..e7df546b66 100644
--- a/vendor/symfony/http-kernel/Controller/ArgumentResolver/ServiceValueResolver.php
+++ b/vendor/symfony/http-kernel/Controller/ArgumentResolver/ServiceValueResolver.php
@@ -12,6 +12,7 @@
namespace Symfony\Component\HttpKernel\Controller\ArgumentResolver;
use Psr\Container\ContainerInterface;
+use Symfony\Component\DependencyInjection\Exception\RuntimeException;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Controller\ArgumentValueResolverInterface;
use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadata;
@@ -72,6 +73,21 @@ final class ServiceValueResolver implements ArgumentValueResolverInterface
$controller = substr($controller, 0, $i).strtolower(substr($controller, $i));
}
- yield $this->container->get($controller)->get($argument->getName());
+ try {
+ yield $this->container->get($controller)->get($argument->getName());
+ } catch (RuntimeException $e) {
+ $what = sprintf('argument $%s of "%s()"', $argument->getName(), $controller);
+ $message = preg_replace('/service "\.service_locator\.[^"]++"/', $what, $e->getMessage());
+
+ if ($e->getMessage() === $message) {
+ $message = sprintf('Cannot resolve %s: %s', $what, $message);
+ }
+
+ $r = new \ReflectionProperty($e, 'message');
+ $r->setAccessible(true);
+ $r->setValue($e, $message);
+
+ throw $e;
+ }
}
}
diff --git a/vendor/symfony/http-kernel/Controller/ArgumentResolver/SessionValueResolver.php b/vendor/symfony/http-kernel/Controller/ArgumentResolver/SessionValueResolver.php
index 9e656d281b..276d65461c 100644
--- a/vendor/symfony/http-kernel/Controller/ArgumentResolver/SessionValueResolver.php
+++ b/vendor/symfony/http-kernel/Controller/ArgumentResolver/SessionValueResolver.php
@@ -28,6 +28,10 @@ final class SessionValueResolver implements ArgumentValueResolverInterface
*/
public function supports(Request $request, ArgumentMetadata $argument)
{
+ if (!$request->hasSession()) {
+ return false;
+ }
+
$type = $argument->getType();
if (SessionInterface::class !== $type && !is_subclass_of($type, SessionInterface::class)) {
return false;
diff --git a/vendor/symfony/http-kernel/Controller/ArgumentResolver/TraceableValueResolver.php b/vendor/symfony/http-kernel/Controller/ArgumentResolver/TraceableValueResolver.php
new file mode 100644
index 0000000000..bde3c90c1a
--- /dev/null
+++ b/vendor/symfony/http-kernel/Controller/ArgumentResolver/TraceableValueResolver.php
@@ -0,0 +1,62 @@
+<?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\HttpKernel\Controller\ArgumentResolver;
+
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpKernel\Controller\ArgumentValueResolverInterface;
+use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadata;
+use Symfony\Component\Stopwatch\Stopwatch;
+
+/**
+ * Provides timing information via the stopwatch.
+ *
+ * @author Iltar van der Berg <kjarli@gmail.com>
+ */
+final class TraceableValueResolver implements ArgumentValueResolverInterface
+{
+ private $inner;
+ private $stopwatch;
+
+ public function __construct(ArgumentValueResolverInterface $inner, Stopwatch $stopwatch)
+ {
+ $this->inner = $inner;
+ $this->stopwatch = $stopwatch;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function supports(Request $request, ArgumentMetadata $argument): bool
+ {
+ $method = \get_class($this->inner).'::'.__FUNCTION__;
+ $this->stopwatch->start($method, 'controller.argument_value_resolver');
+
+ $return = $this->inner->supports($request, $argument);
+
+ $this->stopwatch->stop($method);
+
+ return $return;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function resolve(Request $request, ArgumentMetadata $argument): iterable
+ {
+ $method = \get_class($this->inner).'::'.__FUNCTION__;
+ $this->stopwatch->start($method, 'controller.argument_value_resolver');
+
+ yield from $this->inner->resolve($request, $argument);
+
+ $this->stopwatch->stop($method);
+ }
+}
diff --git a/vendor/symfony/http-kernel/Controller/ContainerControllerResolver.php b/vendor/symfony/http-kernel/Controller/ContainerControllerResolver.php
index bc53e94bef..4f80921cf5 100644
--- a/vendor/symfony/http-kernel/Controller/ContainerControllerResolver.php
+++ b/vendor/symfony/http-kernel/Controller/ContainerControllerResolver.php
@@ -14,7 +14,6 @@ namespace Symfony\Component\HttpKernel\Controller;
use Psr\Container\ContainerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Component\DependencyInjection\Container;
-use Symfony\Component\HttpFoundation\Request;
/**
* A controller resolver searching for a controller in a psr-11 container when using the "service:method" notation.
@@ -33,58 +32,14 @@ class ContainerControllerResolver extends ControllerResolver
parent::__construct($logger);
}
- /**
- * {@inheritdoc}
- */
- public function getController(Request $request)
- {
- $controller = parent::getController($request);
-
- if (\is_array($controller) && isset($controller[0]) && \is_string($controller[0]) && $this->container->has($controller[0])) {
- $controller[0] = $this->instantiateController($controller[0]);
- }
-
- return $controller;
- }
-
- /**
- * Returns a callable for the given controller.
- *
- * @param string $controller A Controller string
- *
- * @return mixed A PHP callable
- *
- * @throws \LogicException When the name could not be parsed
- * @throws \InvalidArgumentException When the controller class does not exist
- */
protected function createController($controller)
{
- if (false !== strpos($controller, '::')) {
- return parent::createController($controller);
- }
-
- $method = null;
- if (1 == substr_count($controller, ':')) {
- // controller in the "service:method" notation
- list($controller, $method) = explode(':', $controller, 2);
- }
-
- if (!$this->container->has($controller)) {
- $this->throwExceptionIfControllerWasRemoved($controller);
-
- throw new \LogicException(sprintf('Controller not found: service "%s" does not exist.', $controller));
- }
-
- $service = $this->container->get($controller);
- if (null !== $method) {
- return array($service, $method);
+ if (1 === substr_count($controller, ':')) {
+ $controller = str_replace(':', '::', $controller);
+ // TODO deprecate this in 5.1
}
- if (!method_exists($service, '__invoke')) {
- throw new \LogicException(sprintf('Controller "%s" cannot be called without a method name. Did you forget an "__invoke" method?', $controller));
- }
-
- return $service;
+ return parent::createController($controller);
}
/**
@@ -98,24 +53,22 @@ class ContainerControllerResolver extends ControllerResolver
try {
return parent::instantiateController($class);
- } catch (\ArgumentCountError $e) {
- } catch (\ErrorException $e) {
- } catch (\TypeError $e) {
+ } catch (\Error $e) {
}
$this->throwExceptionIfControllerWasRemoved($class, $e);
- throw $e;
+ if ($e instanceof \ArgumentCountError) {
+ throw new \InvalidArgumentException(sprintf('Controller "%s" has required constructor arguments and does not exist in the container. Did you forget to define such a service?', $class), 0, $e);
+ }
+
+ throw new \InvalidArgumentException(sprintf('Controller "%s" does neither exist as service nor as class', $class), 0, $e);
}
- /**
- * @param string $controller
- * @param \Exception|\Throwable|null $previous
- */
- private function throwExceptionIfControllerWasRemoved($controller, $previous = null)
+ private function throwExceptionIfControllerWasRemoved(string $controller, \Throwable $previous)
{
if ($this->container instanceof Container && isset($this->container->getRemovedIds()[$controller])) {
- throw new \LogicException(sprintf('Controller "%s" cannot be fetched from the container because it is private. Did you forget to tag the service with "controller.service_arguments"?', $controller), 0, $previous);
+ throw new \InvalidArgumentException(sprintf('Controller "%s" cannot be fetched from the container because it is private. Did you forget to tag the service with "controller.service_arguments"?', $controller), 0, $previous);
}
}
}
diff --git a/vendor/symfony/http-kernel/Controller/ControllerReference.php b/vendor/symfony/http-kernel/Controller/ControllerReference.php
index fae4e7fa44..f424fdc833 100644
--- a/vendor/symfony/http-kernel/Controller/ControllerReference.php
+++ b/vendor/symfony/http-kernel/Controller/ControllerReference.php
@@ -35,7 +35,7 @@ class ControllerReference
* @param array $attributes An array of parameters to add to the Request attributes
* @param array $query An array of parameters to add to the Request query string
*/
- public function __construct($controller, array $attributes = array(), array $query = array())
+ public function __construct(string $controller, array $attributes = array(), array $query = array())
{
$this->controller = $controller;
$this->attributes = $attributes;
diff --git a/vendor/symfony/http-kernel/Controller/ControllerResolver.php b/vendor/symfony/http-kernel/Controller/ControllerResolver.php
index 6d898e7831..04c5fcf53d 100644
--- a/vendor/symfony/http-kernel/Controller/ControllerResolver.php
+++ b/vendor/symfony/http-kernel/Controller/ControllerResolver.php
@@ -16,44 +16,22 @@ use Symfony\Component\HttpFoundation\Request;
/**
* This implementation uses the '_controller' request attribute to determine
- * the controller to execute and uses the request attributes to determine
- * the controller method arguments.
+ * the controller to execute.
*
* @author Fabien Potencier <fabien@symfony.com>
+ * @author Tobias Schultze <http://tobion.de>
*/
-class ControllerResolver implements ArgumentResolverInterface, ControllerResolverInterface
+class ControllerResolver implements ControllerResolverInterface
{
private $logger;
- /**
- * If the ...$arg functionality is available.
- *
- * Requires at least PHP 5.6.0 or HHVM 3.9.1
- *
- * @var bool
- */
- private $supportsVariadic;
-
- /**
- * If scalar types exists.
- *
- * @var bool
- */
- private $supportsScalarTypes;
-
public function __construct(LoggerInterface $logger = null)
{
$this->logger = $logger;
-
- $this->supportsVariadic = method_exists('ReflectionParameter', 'isVariadic');
- $this->supportsScalarTypes = method_exists('ReflectionParameter', 'getType');
}
/**
* {@inheritdoc}
- *
- * This method looks for a '_controller' request attribute that represents
- * the controller name (a string like ClassName::MethodName).
*/
public function getController(Request $request)
{
@@ -66,23 +44,42 @@ class ControllerResolver implements ArgumentResolverInterface, ControllerResolve
}
if (\is_array($controller)) {
+ if (isset($controller[0]) && \is_string($controller[0]) && isset($controller[1])) {
+ try {
+ $controller[0] = $this->instantiateController($controller[0]);
+ } catch (\Error | \LogicException $e) {
+ try {
+ // We cannot just check is_callable but have to use reflection because a non-static method
+ // can still be called statically in PHP but we don't want that. This is deprecated in PHP 7, so we
+ // could simplify this with PHP 8.
+ if ((new \ReflectionMethod($controller[0], $controller[1]))->isStatic()) {
+ return $controller;
+ }
+ } catch (\ReflectionException $reflectionException) {
+ throw $e;
+ }
+
+ throw $e;
+ }
+ }
+
+ if (!\is_callable($controller)) {
+ throw new \InvalidArgumentException(sprintf('The controller for URI "%s" is not callable. %s', $request->getPathInfo(), $this->getControllerError($controller)));
+ }
+
return $controller;
}
if (\is_object($controller)) {
- if (method_exists($controller, '__invoke')) {
- return $controller;
+ if (!\is_callable($controller)) {
+ throw new \InvalidArgumentException(sprintf('The controller for URI "%s" is not callable. %s', $request->getPathInfo(), $this->getControllerError($controller)));
}
- throw new \InvalidArgumentException(sprintf('Controller "%s" for URI "%s" is not callable.', \get_class($controller), $request->getPathInfo()));
+ return $controller;
}
- if (false === strpos($controller, ':')) {
- if (method_exists($controller, '__invoke')) {
- return $this->instantiateController($controller);
- } elseif (\function_exists($controller)) {
- return $controller;
- }
+ if (\function_exists($controller)) {
+ return $controller;
}
$callable = $this->createController($controller);
@@ -95,92 +92,33 @@ class ControllerResolver implements ArgumentResolverInterface, ControllerResolve
}
/**
- * {@inheritdoc}
- *
- * @deprecated This method is deprecated as of 3.1 and will be removed in 4.0. Implement the ArgumentResolverInterface and inject it in the HttpKernel instead.
- */
- public function getArguments(Request $request, $controller)
- {
- @trigger_error(sprintf('The "%s()" method is deprecated as of 3.1 and will be removed in 4.0. Implement the %s and inject it in the HttpKernel instead.', __METHOD__, ArgumentResolverInterface::class), E_USER_DEPRECATED);
-
- if (\is_array($controller)) {
- $r = new \ReflectionMethod($controller[0], $controller[1]);
- } elseif (\is_object($controller) && !$controller instanceof \Closure) {
- $r = new \ReflectionObject($controller);
- $r = $r->getMethod('__invoke');
- } else {
- $r = new \ReflectionFunction($controller);
- }
-
- return $this->doGetArguments($request, $controller, $r->getParameters());
- }
-
- /**
- * @param Request $request
- * @param callable $controller
- * @param \ReflectionParameter[] $parameters
- *
- * @return array The arguments to use when calling the action
- *
- * @deprecated This method is deprecated as of 3.1 and will be removed in 4.0. Implement the ArgumentResolverInterface and inject it in the HttpKernel instead.
- */
- protected function doGetArguments(Request $request, $controller, array $parameters)
- {
- @trigger_error(sprintf('The "%s()" method is deprecated as of 3.1 and will be removed in 4.0. Implement the %s and inject it in the HttpKernel instead.', __METHOD__, ArgumentResolverInterface::class), E_USER_DEPRECATED);
-
- $attributes = $request->attributes->all();
- $arguments = array();
- foreach ($parameters as $param) {
- if (array_key_exists($param->name, $attributes)) {
- if ($this->supportsVariadic && $param->isVariadic() && \is_array($attributes[$param->name])) {
- $arguments = array_merge($arguments, array_values($attributes[$param->name]));
- } else {
- $arguments[] = $attributes[$param->name];
- }
- } elseif ($param->getClass() && $param->getClass()->isInstance($request)) {
- $arguments[] = $request;
- } elseif ($param->isDefaultValueAvailable()) {
- $arguments[] = $param->getDefaultValue();
- } elseif ($this->supportsScalarTypes && $param->hasType() && $param->allowsNull()) {
- $arguments[] = null;
- } else {
- if (\is_array($controller)) {
- $repr = sprintf('%s::%s()', \get_class($controller[0]), $controller[1]);
- } elseif (\is_object($controller)) {
- $repr = \get_class($controller);
- } else {
- $repr = $controller;
- }
-
- throw new \RuntimeException(sprintf('Controller "%s" requires that you provide a value for the "$%s" argument (because there is no default value or because there is a non optional argument after this one).', $repr, $param->name));
- }
- }
-
- return $arguments;
- }
-
- /**
* Returns a callable for the given controller.
*
* @param string $controller A Controller string
*
* @return callable A PHP callable
- *
- * @throws \InvalidArgumentException
*/
protected function createController($controller)
{
if (false === strpos($controller, '::')) {
- throw new \InvalidArgumentException(sprintf('Unable to find controller "%s".', $controller));
+ return $this->instantiateController($controller);
}
list($class, $method) = explode('::', $controller, 2);
- if (!class_exists($class)) {
- throw new \InvalidArgumentException(sprintf('Class "%s" does not exist.', $class));
- }
+ try {
+ return array($this->instantiateController($class), $method);
+ } catch (\Error | \LogicException $e) {
+ try {
+ if ((new \ReflectionMethod($class, $method))->isStatic()) {
+ return $class.'::'.$method;
+ }
+ } catch (\ReflectionException $reflectionException) {
+ throw $e;
+ }
- return array($this->instantiateController($class), $method);
+ throw $e;
+ }
}
/**
@@ -199,24 +137,25 @@ class ControllerResolver implements ArgumentResolverInterface, ControllerResolve
{
if (\is_string($callable)) {
if (false !== strpos($callable, '::')) {
- $callable = explode('::', $callable);
+ $callable = explode('::', $callable, 2);
+ } else {
+ return sprintf('Function "%s" does not exist.', $callable);
}
+ }
- if (class_exists($callable) && !method_exists($callable, '__invoke')) {
- return sprintf('Class "%s" does not have a method "__invoke".', $callable);
- }
+ if (\is_object($callable)) {
+ $availableMethods = $this->getClassMethodsWithoutMagicMethods($callable);
+ $alternativeMsg = $availableMethods ? sprintf(' or use one of the available methods: "%s"', implode('", "', $availableMethods)) : '';
- if (!\function_exists($callable)) {
- return sprintf('Function "%s" does not exist.', $callable);
- }
+ return sprintf('Controller class "%s" cannot be called without a method name. You need to implement "__invoke"%s.', \get_class($callable), $alternativeMsg);
}
if (!\is_array($callable)) {
- return sprintf('Invalid type for controller given, expected string or array, got "%s".', \gettype($callable));
+ return sprintf('Invalid type for controller given, expected string, array or object, got "%s".', \gettype($callable));
}
- if (2 !== \count($callable)) {
- return 'Invalid format for controller, expected array(controller, method) or controller::method.';
+ if (!isset($callable[0]) || !isset($callable[1]) || 2 !== \count($callable)) {
+ return 'Invalid array callable, expected array(controller, method).';
}
list($controller, $method) = $callable;
@@ -231,7 +170,7 @@ class ControllerResolver implements ArgumentResolverInterface, ControllerResolve
return sprintf('Method "%s" on class "%s" should be public and non-abstract.', $method, $className);
}
- $collection = get_class_methods($controller);
+ $collection = $this->getClassMethodsWithoutMagicMethods($controller);
$alternatives = array();
@@ -255,4 +194,13 @@ class ControllerResolver implements ArgumentResolverInterface, ControllerResolve
return $message;
}
+
+ private function getClassMethodsWithoutMagicMethods($classOrObject)
+ {
+ $methods = get_class_methods($classOrObject);
+
+ return array_filter($methods, function (string $method) {
+ return 0 !== strncmp($method, '__', 2);
+ });
+ }
}
diff --git a/vendor/symfony/http-kernel/Controller/ControllerResolverInterface.php b/vendor/symfony/http-kernel/Controller/ControllerResolverInterface.php
index afe9fb7337..a54f8b518b 100644
--- a/vendor/symfony/http-kernel/Controller/ControllerResolverInterface.php
+++ b/vendor/symfony/http-kernel/Controller/ControllerResolverInterface.php
@@ -17,8 +17,6 @@ use Symfony\Component\HttpFoundation\Request;
* A ControllerResolverInterface implementation knows how to determine the
* controller to execute based on a Request object.
*
- * It can also determine the arguments to pass to the Controller.
- *
* A Controller can be any valid PHP callable.
*
* @author Fabien Potencier <fabien@symfony.com>
@@ -37,21 +35,7 @@ interface ControllerResolverInterface
* @return callable|false A PHP callable representing the Controller,
* or false if this resolver is not able to determine the controller
*
- * @throws \LogicException If the controller can't be found
+ * @throws \LogicException If a controller was found based on the request but it is not callable
*/
public function getController(Request $request);
-
- /**
- * Returns the arguments to pass to the controller.
- *
- * @param Request $request A Request instance
- * @param callable $controller A PHP callable
- *
- * @return array An array of arguments to pass to the controller
- *
- * @throws \RuntimeException When value for argument given is not provided
- *
- * @deprecated This method is deprecated as of 3.1 and will be removed in 4.0. Please use the {@see ArgumentResolverInterface} instead.
- */
- public function getArguments(Request $request, $controller);
}
diff --git a/vendor/symfony/http-kernel/Controller/TraceableControllerResolver.php b/vendor/symfony/http-kernel/Controller/TraceableControllerResolver.php
index 6f39f81d2a..bf6b6aa1f2 100644
--- a/vendor/symfony/http-kernel/Controller/TraceableControllerResolver.php
+++ b/vendor/symfony/http-kernel/Controller/TraceableControllerResolver.php
@@ -17,26 +17,15 @@ use Symfony\Component\Stopwatch\Stopwatch;
/**
* @author Fabien Potencier <fabien@symfony.com>
*/
-class TraceableControllerResolver implements ControllerResolverInterface, ArgumentResolverInterface
+class TraceableControllerResolver implements ControllerResolverInterface
{
private $resolver;
private $stopwatch;
- private $argumentResolver;
- public function __construct(ControllerResolverInterface $resolver, Stopwatch $stopwatch, ArgumentResolverInterface $argumentResolver = null)
+ public function __construct(ControllerResolverInterface $resolver, Stopwatch $stopwatch)
{
$this->resolver = $resolver;
$this->stopwatch = $stopwatch;
- $this->argumentResolver = $argumentResolver;
-
- // BC
- if (null === $this->argumentResolver) {
- $this->argumentResolver = $resolver;
- }
-
- if (!$this->argumentResolver instanceof TraceableArgumentResolver) {
- $this->argumentResolver = new TraceableArgumentResolver($this->argumentResolver, $this->stopwatch);
- }
}
/**
@@ -52,18 +41,4 @@ class TraceableControllerResolver implements ControllerResolverInterface, Argume
return $ret;
}
-
- /**
- * {@inheritdoc}
- *
- * @deprecated This method is deprecated as of 3.1 and will be removed in 4.0.
- */
- public function getArguments(Request $request, $controller)
- {
- @trigger_error(sprintf('The "%s()" method is deprecated as of 3.1 and will be removed in 4.0. Please use the %s instead.', __METHOD__, TraceableArgumentResolver::class), E_USER_DEPRECATED);
-
- $ret = $this->argumentResolver->getArguments($request, $controller);
-
- return $ret;
- }
}
diff --git a/vendor/symfony/http-kernel/ControllerMetadata/ArgumentMetadata.php b/vendor/symfony/http-kernel/ControllerMetadata/ArgumentMetadata.php
index 32316a8d51..4ea8ea643f 100644
--- a/vendor/symfony/http-kernel/ControllerMetadata/ArgumentMetadata.php
+++ b/vendor/symfony/http-kernel/ControllerMetadata/ArgumentMetadata.php
@@ -25,15 +25,7 @@ class ArgumentMetadata
private $defaultValue;
private $isNullable;
- /**
- * @param string $name
- * @param string $type
- * @param bool $isVariadic
- * @param bool $hasDefaultValue
- * @param mixed $defaultValue
- * @param bool $isNullable
- */
- public function __construct($name, $type, $isVariadic, $hasDefaultValue, $defaultValue, $isNullable = false)
+ public function __construct(string $name, ?string $type, bool $isVariadic, bool $hasDefaultValue, $defaultValue, bool $isNullable = false)
{
$this->name = $name;
$this->type = $type;
diff --git a/vendor/symfony/http-kernel/ControllerMetadata/ArgumentMetadataFactory.php b/vendor/symfony/http-kernel/ControllerMetadata/ArgumentMetadataFactory.php
index b46be7e8b7..cc2ed9f2b7 100644
--- a/vendor/symfony/http-kernel/ControllerMetadata/ArgumentMetadataFactory.php
+++ b/vendor/symfony/http-kernel/ControllerMetadata/ArgumentMetadataFactory.php
@@ -19,30 +19,6 @@ namespace Symfony\Component\HttpKernel\ControllerMetadata;
final class ArgumentMetadataFactory implements ArgumentMetadataFactoryInterface
{
/**
- * If the ...$arg functionality is available.
- *
- * Requires at least PHP 5.6.0 or HHVM 3.9.1
- *
- * @var bool
- */
- private $supportsVariadic;
-
- /**
- * If the reflection supports the getType() method to resolve types.
- *
- * Requires at least PHP 7.0.0 or HHVM 3.11.0
- *
- * @var bool
- */
- private $supportsParameterType;
-
- public function __construct()
- {
- $this->supportsVariadic = method_exists('ReflectionParameter', 'isVariadic');
- $this->supportsParameterType = method_exists('ReflectionParameter', 'getType');
- }
-
- /**
* {@inheritdoc}
*/
public function createArgumentMetadata($controller)
@@ -58,49 +34,13 @@ final class ArgumentMetadataFactory implements ArgumentMetadataFactoryInterface
}
foreach ($reflection->getParameters() as $param) {
- $arguments[] = new ArgumentMetadata($param->getName(), $this->getType($param, $reflection), $this->isVariadic($param), $this->hasDefaultValue($param), $this->getDefaultValue($param), $param->allowsNull());
+ $arguments[] = new ArgumentMetadata($param->getName(), $this->getType($param, $reflection), $param->isVariadic(), $param->isDefaultValueAvailable(), $param->isDefaultValueAvailable() ? $param->getDefaultValue() : null, $param->allowsNull());
}
return $arguments;
}
/**
- * Returns whether an argument is variadic.
- *
- * @param \ReflectionParameter $parameter
- *
- * @return bool
- */
- private function isVariadic(\ReflectionParameter $parameter)
- {
- return $this->supportsVariadic && $parameter->isVariadic();
- }
-
- /**
- * Determines whether an argument has a default value.
- *
- * @param \ReflectionParameter $parameter
- *
- * @return bool
- */
- private function hasDefaultValue(\ReflectionParameter $parameter)
- {
- return $parameter->isDefaultValueAvailable();
- }
-
- /**
- * Returns a default value if available.
- *
- * @param \ReflectionParameter $parameter
- *
- * @return mixed|null
- */
- private function getDefaultValue(\ReflectionParameter $parameter)
- {
- return $this->hasDefaultValue($parameter) ? $parameter->getDefaultValue() : null;
- }
-
- /**
* Returns an associated type to the given parameter if available.
*
* @param \ReflectionParameter $parameter
@@ -109,20 +49,10 @@ final class ArgumentMetadataFactory implements ArgumentMetadataFactoryInterface
*/
private function getType(\ReflectionParameter $parameter, \ReflectionFunctionAbstract $function)
{
- if ($this->supportsParameterType) {
- if (!$type = $parameter->getType()) {
- return;
- }
- $name = $type instanceof \ReflectionNamedType ? $type->getName() : $type->__toString();
- if ('array' === $name && !$type->isBuiltin()) {
- // Special case for HHVM with variadics
- return;
- }
- } elseif (preg_match('/^(?:[^ ]++ ){4}([a-zA-Z_\x7F-\xFF][^ ]++)/', $parameter, $name)) {
- $name = $name[1];
- } else {
+ if (!$type = $parameter->getType()) {
return;
}
+ $name = $type->getName();
$lcName = strtolower($name);
if ('self' !== $lcName && 'parent' !== $lcName) {
diff --git a/vendor/symfony/http-kernel/DataCollector/ConfigDataCollector.php b/vendor/symfony/http-kernel/DataCollector/ConfigDataCollector.php
index abfd939f5f..f07ac89c0f 100644
--- a/vendor/symfony/http-kernel/DataCollector/ConfigDataCollector.php
+++ b/vendor/symfony/http-kernel/DataCollector/ConfigDataCollector.php
@@ -30,12 +30,15 @@ class ConfigDataCollector extends DataCollector implements LateDataCollectorInte
private $version;
private $hasVarDumper;
- /**
- * @param string $name The name of the application using the web profiler
- * @param string $version The version of the application using the web profiler
- */
- public function __construct($name = null, $version = null)
+ public function __construct(string $name = null, string $version = null)
{
+ if (1 <= \func_num_args()) {
+ @trigger_error(sprintf('The "$name" argument in method "%s()" is deprecated since Symfony 4.2.', __METHOD__), E_USER_DEPRECATED);
+ }
+ if (2 <= \func_num_args()) {
+ @trigger_error(sprintf('The "$version" argument in method "%s()" is deprecated since Symfony 4.2.', __METHOD__), E_USER_DEPRECATED);
+ }
+
$this->name = $name;
$this->version = $version;
$this->hasVarDumper = class_exists(LinkStub::class);
@@ -60,7 +63,6 @@ class ConfigDataCollector extends DataCollector implements LateDataCollectorInte
'token' => $response->headers->get('X-Debug-Token'),
'symfony_version' => Kernel::VERSION,
'symfony_state' => 'unknown',
- 'name' => isset($this->kernel) ? $this->kernel->getName() : 'n/a',
'env' => isset($this->kernel) ? $this->kernel->getEnvironment() : 'n/a',
'debug' => isset($this->kernel) ? $this->kernel->isDebug() : 'n/a',
'php_version' => PHP_VERSION,
@@ -106,13 +108,23 @@ class ConfigDataCollector extends DataCollector implements LateDataCollectorInte
$this->data = $this->cloneVar($this->data);
}
+ /**
+ * @deprecated since Symfony 4.2
+ */
public function getApplicationName()
{
+ @trigger_error(sprintf('The method "%s()" is deprecated since Symfony 4.2.', __METHOD__), E_USER_DEPRECATED);
+
return $this->data['app_name'];
}
+ /**
+ * @deprecated since Symfony 4.2
+ */
public function getApplicationVersion()
{
+ @trigger_error(sprintf('The method "%s()" is deprecated since Symfony 4.2.', __METHOD__), E_USER_DEPRECATED);
+
return $this->data['app_version'];
}
@@ -227,10 +239,14 @@ class ConfigDataCollector extends DataCollector implements LateDataCollectorInte
* Gets the application name.
*
* @return string The application name
+ *
+ * @deprecated since Symfony 4.2
*/
public function getAppName()
{
- return $this->data['name'];
+ @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.2.', __METHOD__), E_USER_DEPRECATED);
+
+ return 'n/a';
}
/**
diff --git a/vendor/symfony/http-kernel/DataCollector/DataCollector.php b/vendor/symfony/http-kernel/DataCollector/DataCollector.php
index 6d1a822e47..a3d8c99d84 100644
--- a/vendor/symfony/http-kernel/DataCollector/DataCollector.php
+++ b/vendor/symfony/http-kernel/DataCollector/DataCollector.php
@@ -11,7 +11,6 @@
namespace Symfony\Component\HttpKernel\DataCollector;
-use Symfony\Component\HttpKernel\DataCollector\Util\ValueExporter;
use Symfony\Component\VarDumper\Caster\CutStub;
use Symfony\Component\VarDumper\Cloner\ClonerInterface;
use Symfony\Component\VarDumper\Cloner\Data;
@@ -31,11 +30,6 @@ abstract class DataCollector implements DataCollectorInterface, \Serializable
protected $data = array();
/**
- * @var ValueExporter
- */
- private $valueExporter;
-
- /**
* @var ClonerInterface
*/
private $cloner;
@@ -66,47 +60,18 @@ abstract class DataCollector implements DataCollectorInterface, \Serializable
return $var;
}
if (null === $this->cloner) {
- if (class_exists(CutStub::class)) {
- $this->cloner = new VarCloner();
- $this->cloner->setMaxItems(-1);
- $this->cloner->addCasters($this->getCasters());
- } else {
- @trigger_error(sprintf('Using the %s() method without the VarDumper component is deprecated since Symfony 3.2 and won\'t be supported in 4.0. Install symfony/var-dumper version 3.2 or above.', __METHOD__), E_USER_DEPRECATED);
- $this->cloner = false;
+ if (!class_exists(CutStub::class)) {
+ throw new \LogicException(sprintf('The VarDumper component is needed for the %s() method. Install symfony/var-dumper version 3.4 or above.', __METHOD__));
}
- }
- if (false === $this->cloner) {
- if (null === $this->valueExporter) {
- $this->valueExporter = new ValueExporter();
- }
-
- return $this->valueExporter->exportValue($var);
+ $this->cloner = new VarCloner();
+ $this->cloner->setMaxItems(-1);
+ $this->cloner->addCasters($this->getCasters());
}
return $this->cloner->cloneVar($var);
}
/**
- * Converts a PHP variable to a string.
- *
- * @param mixed $var A PHP variable
- *
- * @return string The string representation of the variable
- *
- * @deprecated since version 3.2, to be removed in 4.0. Use cloneVar() instead.
- */
- protected function varToString($var)
- {
- @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.2 and will be removed in 4.0. Use cloneVar() instead.', __METHOD__), E_USER_DEPRECATED);
-
- if (null === $this->valueExporter) {
- $this->valueExporter = new ValueExporter();
- }
-
- return $this->valueExporter->exportValue($var);
- }
-
- /**
* @return callable[] The casters to add to the cloner
*/
protected function getCasters()
diff --git a/vendor/symfony/http-kernel/DataCollector/DataCollectorInterface.php b/vendor/symfony/http-kernel/DataCollector/DataCollectorInterface.php
index 2470089b81..b9584110ec 100644
--- a/vendor/symfony/http-kernel/DataCollector/DataCollectorInterface.php
+++ b/vendor/symfony/http-kernel/DataCollector/DataCollectorInterface.php
@@ -13,15 +13,14 @@ namespace Symfony\Component\HttpKernel\DataCollector;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
+use Symfony\Contracts\Service\ResetInterface;
/**
* DataCollectorInterface.
*
* @author Fabien Potencier <fabien@symfony.com>
- *
- * @method reset() Resets this data collector to its initial state.
*/
-interface DataCollectorInterface
+interface DataCollectorInterface extends ResetInterface
{
/**
* Collects data for the given Request and Response.
diff --git a/vendor/symfony/http-kernel/DataCollector/DumpDataCollector.php b/vendor/symfony/http-kernel/DataCollector/DumpDataCollector.php
index 7e2430c4ba..13694f5a59 100644
--- a/vendor/symfony/http-kernel/DataCollector/DumpDataCollector.php
+++ b/vendor/symfony/http-kernel/DataCollector/DumpDataCollector.php
@@ -18,9 +18,10 @@ use Symfony\Component\Stopwatch\Stopwatch;
use Symfony\Component\VarDumper\Cloner\Data;
use Symfony\Component\VarDumper\Cloner\VarCloner;
use Symfony\Component\VarDumper\Dumper\CliDumper;
+use Symfony\Component\VarDumper\Dumper\ContextProvider\SourceContextProvider;
use Symfony\Component\VarDumper\Dumper\DataDumperInterface;
use Symfony\Component\VarDumper\Dumper\HtmlDumper;
-use Twig\Template;
+use Symfony\Component\VarDumper\Server\Connection;
/**
* @author Nicolas Grekas <p@tchwork.com>
@@ -37,16 +38,18 @@ class DumpDataCollector extends DataCollector implements DataDumperInterface
private $charset;
private $requestStack;
private $dumper;
- private $dumperIsInjected;
+ private $sourceContextProvider;
- public function __construct(Stopwatch $stopwatch = null, $fileLinkFormat = null, $charset = null, RequestStack $requestStack = null, DataDumperInterface $dumper = null)
+ /**
+ * @param DataDumperInterface|Connection|null $dumper
+ */
+ public function __construct(Stopwatch $stopwatch = null, $fileLinkFormat = null, string $charset = null, RequestStack $requestStack = null, $dumper = null)
{
$this->stopwatch = $stopwatch;
$this->fileLinkFormat = $fileLinkFormat ?: ini_get('xdebug.file_link_format') ?: get_cfg_var('xdebug.file_link_format');
$this->charset = $charset ?: ini_get('php.output_encoding') ?: ini_get('default_charset') ?: 'UTF-8';
$this->requestStack = $requestStack;
$this->dumper = $dumper;
- $this->dumperIsInjected = null !== $dumper;
// All clones share these properties by reference:
$this->rootRefs = array(
@@ -55,6 +58,8 @@ class DumpDataCollector extends DataCollector implements DataDumperInterface
&$this->isCollected,
&$this->clonesCount,
);
+
+ $this->sourceContextProvider = $dumper instanceof Connection && isset($dumper->getContextProviders()['source']) ? $dumper->getContextProviders()['source'] : new SourceContextProvider($this->charset);
}
public function __clone()
@@ -67,65 +72,17 @@ class DumpDataCollector extends DataCollector implements DataDumperInterface
if ($this->stopwatch) {
$this->stopwatch->start('dump');
}
- if ($this->isCollected && !$this->dumper) {
- $this->isCollected = false;
- }
-
- $trace = debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT | DEBUG_BACKTRACE_IGNORE_ARGS, 7);
-
- $file = $trace[0]['file'];
- $line = $trace[0]['line'];
- $name = false;
- $fileExcerpt = false;
-
- for ($i = 1; $i < 7; ++$i) {
- if (isset($trace[$i]['class'], $trace[$i]['function'])
- && 'dump' === $trace[$i]['function']
- && 'Symfony\Component\VarDumper\VarDumper' === $trace[$i]['class']
- ) {
- $file = $trace[$i]['file'];
- $line = $trace[$i]['line'];
-
- while (++$i < 7) {
- if (isset($trace[$i]['function'], $trace[$i]['file']) && empty($trace[$i]['class']) && 0 !== strpos($trace[$i]['function'], 'call_user_func')) {
- $file = $trace[$i]['file'];
- $line = $trace[$i]['line'];
- break;
- } elseif (isset($trace[$i]['object']) && $trace[$i]['object'] instanceof Template) {
- $template = $trace[$i]['object'];
- $name = $template->getTemplateName();
- $src = method_exists($template, 'getSourceContext') ? $template->getSourceContext()->getCode() : (method_exists($template, 'getSource') ? $template->getSource() : false);
- $info = $template->getDebugInfo();
- if (isset($info[$trace[$i - 1]['line']])) {
- $line = $info[$trace[$i - 1]['line']];
- $file = method_exists($template, 'getSourceContext') ? $template->getSourceContext()->getPath() : null;
+ list('name' => $name, 'file' => $file, 'line' => $line, 'file_excerpt' => $fileExcerpt) = $this->sourceContextProvider->getContext();
- if ($src) {
- $src = explode("\n", $src);
- $fileExcerpt = array();
-
- for ($i = max($line - 3, 1), $max = min($line + 3, \count($src)); $i <= $max; ++$i) {
- $fileExcerpt[] = '<li'.($i === $line ? ' class="selected"' : '').'><code>'.$this->htmlEncode($src[$i - 1]).'</code></li>';
- }
-
- $fileExcerpt = '<ol start="'.max($line - 3, 1).'">'.implode("\n", $fileExcerpt).'</ol>';
- }
- }
- break;
- }
- }
- break;
+ if ($this->dumper instanceof Connection) {
+ if (!$this->dumper->write($data)) {
+ $this->isCollected = false;
}
- }
-
- if (false === $name) {
- $name = str_replace('\\', '/', $file);
- $name = substr($name, strrpos($name, '/') + 1);
- }
-
- if ($this->dumper) {
- $this->doDump($data, $name, $file, $line);
+ } elseif ($this->dumper) {
+ $this->doDump($this->dumper, $data, $name, $file, $line);
+ } else {
+ $this->isCollected = false;
}
$this->data[] = compact('data', 'name', 'file', 'line', 'fileExcerpt');
@@ -152,14 +109,14 @@ class DumpDataCollector extends DataCollector implements DataDumperInterface
|| false === strripos($response->getContent(), '</body>')
) {
if ($response->headers->has('Content-Type') && false !== strpos($response->headers->get('Content-Type'), 'html')) {
- $this->dumper = new HtmlDumper('php://output', $this->charset);
- $this->dumper->setDisplayOptions(array('fileLinkFormat' => $this->fileLinkFormat));
+ $dumper = new HtmlDumper('php://output', $this->charset);
+ $dumper->setDisplayOptions(array('fileLinkFormat' => $this->fileLinkFormat));
} else {
- $this->dumper = new CliDumper('php://output', $this->charset);
+ $dumper = new CliDumper('php://output', $this->charset);
}
foreach ($this->data as $dump) {
- $this->doDump($dump['data'], $dump['name'], $dump['file'], $dump['line']);
+ $this->doDump($dumper, $dump['data'], $dump['name'], $dump['file'], $dump['line']);
}
}
}
@@ -188,9 +145,6 @@ class DumpDataCollector extends DataCollector implements DataDumperInterface
$this->data = array();
$this->dataCount = 0;
$this->isCollected = true;
- if (!$this->dumperIsInjected) {
- $this->dumper = null;
- }
return $ser;
}
@@ -250,16 +204,22 @@ class DumpDataCollector extends DataCollector implements DataDumperInterface
--$i;
}
- if (!\in_array(\PHP_SAPI, array('cli', 'phpdbg'), true) && stripos($h[$i], 'html')) {
- $this->dumper = new HtmlDumper('php://output', $this->charset);
- $this->dumper->setDisplayOptions(array('fileLinkFormat' => $this->fileLinkFormat));
+ if (isset($_SERVER['VAR_DUMPER_FORMAT'])) {
+ $html = 'html' === $_SERVER['VAR_DUMPER_FORMAT'];
+ } else {
+ $html = !\in_array(\PHP_SAPI, array('cli', 'phpdbg'), true) && stripos($h[$i], 'html');
+ }
+
+ if ($html) {
+ $dumper = new HtmlDumper('php://output', $this->charset);
+ $dumper->setDisplayOptions(array('fileLinkFormat' => $this->fileLinkFormat));
} else {
- $this->dumper = new CliDumper('php://output', $this->charset);
+ $dumper = new CliDumper('php://output', $this->charset);
}
foreach ($this->data as $i => $dump) {
$this->data[$i] = null;
- $this->doDump($dump['data'], $dump['name'], $dump['file'], $dump['line']);
+ $this->doDump($dumper, $dump['data'], $dump['name'], $dump['file'], $dump['line']);
}
$this->data = array();
@@ -267,9 +227,9 @@ class DumpDataCollector extends DataCollector implements DataDumperInterface
}
}
- private function doDump($data, $name, $file, $line)
+ private function doDump(DataDumperInterface $dumper, $data, $name, $file, $line)
{
- if ($this->dumper instanceof CliDumper) {
+ if ($dumper instanceof CliDumper) {
$contextDumper = function ($name, $file, $line, $fmt) {
if ($this instanceof HtmlDumper) {
if ($file) {
@@ -290,26 +250,12 @@ class DumpDataCollector extends DataCollector implements DataDumperInterface
}
$this->dumpLine(0);
};
- $contextDumper = $contextDumper->bindTo($this->dumper, $this->dumper);
+ $contextDumper = $contextDumper->bindTo($dumper, $dumper);
$contextDumper($name, $file, $line, $this->fileLinkFormat);
} else {
$cloner = new VarCloner();
- $this->dumper->dump($cloner->cloneVar($name.' on line '.$line.':'));
+ $dumper->dump($cloner->cloneVar($name.' on line '.$line.':'));
}
- $this->dumper->dump($data);
- }
-
- private function htmlEncode($s)
- {
- $html = '';
-
- $dumper = new HtmlDumper(function ($line) use (&$html) { $html .= $line; }, $this->charset);
- $dumper->setDumpHeader('');
- $dumper->setDumpBoundaries('', '');
-
- $cloner = new VarCloner();
- $dumper->dump($cloner->cloneVar($s));
-
- return substr(strip_tags($html), 1, -1);
+ $dumper->dump($data);
}
}
diff --git a/vendor/symfony/http-kernel/DataCollector/EventDataCollector.php b/vendor/symfony/http-kernel/DataCollector/EventDataCollector.php
index 81076fd726..3a7e51bf8d 100644
--- a/vendor/symfony/http-kernel/DataCollector/EventDataCollector.php
+++ b/vendor/symfony/http-kernel/DataCollector/EventDataCollector.php
@@ -11,10 +11,12 @@
namespace Symfony\Component\HttpKernel\DataCollector;
+use Symfony\Component\EventDispatcher\Debug\TraceableEventDispatcher;
use Symfony\Component\EventDispatcher\Debug\TraceableEventDispatcherInterface;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
+use Symfony\Contracts\Service\ResetInterface;
/**
* EventDataCollector.
@@ -27,9 +29,6 @@ class EventDataCollector extends DataCollector implements LateDataCollectorInter
public function __construct(EventDispatcherInterface $dispatcher = null)
{
- if ($dispatcher instanceof TraceableEventDispatcherInterface && !method_exists($dispatcher, 'reset')) {
- @trigger_error(sprintf('Implementing "%s" without the "reset()" method is deprecated since Symfony 3.4 and will be unsupported in 4.0 for class "%s".', TraceableEventDispatcherInterface::class, \get_class($dispatcher)), E_USER_DEPRECATED);
- }
$this->dispatcher = $dispatcher;
}
@@ -41,6 +40,7 @@ class EventDataCollector extends DataCollector implements LateDataCollectorInter
$this->data = array(
'called_listeners' => array(),
'not_called_listeners' => array(),
+ 'orphaned_events' => array(),
);
}
@@ -48,11 +48,7 @@ class EventDataCollector extends DataCollector implements LateDataCollectorInter
{
$this->data = array();
- if ($this->dispatcher instanceof TraceableEventDispatcherInterface) {
- if (!method_exists($this->dispatcher, 'reset')) {
- return; // @deprecated
- }
-
+ if ($this->dispatcher instanceof ResetInterface) {
$this->dispatcher->reset();
}
}
@@ -63,6 +59,11 @@ class EventDataCollector extends DataCollector implements LateDataCollectorInter
$this->setCalledListeners($this->dispatcher->getCalledListeners());
$this->setNotCalledListeners($this->dispatcher->getNotCalledListeners());
}
+
+ if ($this->dispatcher instanceof TraceableEventDispatcher) {
+ $this->setOrphanedEvents($this->dispatcher->getOrphanedEvents());
+ }
+
$this->data = $this->cloneVar($this->data);
}
@@ -71,7 +72,7 @@ class EventDataCollector extends DataCollector implements LateDataCollectorInter
*
* @param array $listeners An array of called listeners
*
- * @see TraceableEventDispatcherInterface
+ * @see TraceableEventDispatcher
*/
public function setCalledListeners(array $listeners)
{
@@ -83,7 +84,7 @@ class EventDataCollector extends DataCollector implements LateDataCollectorInter
*
* @return array An array of called listeners
*
- * @see TraceableEventDispatcherInterface
+ * @see TraceableEventDispatcher
*/
public function getCalledListeners()
{
@@ -93,9 +94,9 @@ class EventDataCollector extends DataCollector implements LateDataCollectorInter
/**
* Sets the not called listeners.
*
- * @param array $listeners An array of not called listeners
+ * @param array $listeners
*
- * @see TraceableEventDispatcherInterface
+ * @see TraceableEventDispatcher
*/
public function setNotCalledListeners(array $listeners)
{
@@ -105,9 +106,9 @@ class EventDataCollector extends DataCollector implements LateDataCollectorInter
/**
* Gets the not called listeners.
*
- * @return array An array of not called listeners
+ * @return array
*
- * @see TraceableEventDispatcherInterface
+ * @see TraceableEventDispatcher
*/
public function getNotCalledListeners()
{
@@ -115,6 +116,30 @@ class EventDataCollector extends DataCollector implements LateDataCollectorInter
}
/**
+ * Sets the orphaned events.
+ *
+ * @param array $events An array of orphaned events
+ *
+ * @see TraceableEventDispatcher
+ */
+ public function setOrphanedEvents(array $events)
+ {
+ $this->data['orphaned_events'] = $events;
+ }
+
+ /**
+ * Gets the orphaned events.
+ *
+ * @return array An array of orphaned events
+ *
+ * @see TraceableEventDispatcher
+ */
+ public function getOrphanedEvents()
+ {
+ return $this->data['orphaned_events'];
+ }
+
+ /**
* {@inheritdoc}
*/
public function getName()
diff --git a/vendor/symfony/http-kernel/DataCollector/LoggerDataCollector.php b/vendor/symfony/http-kernel/DataCollector/LoggerDataCollector.php
index 97b8a8620c..3081ac7fb5 100644
--- a/vendor/symfony/http-kernel/DataCollector/LoggerDataCollector.php
+++ b/vendor/symfony/http-kernel/DataCollector/LoggerDataCollector.php
@@ -13,6 +13,7 @@ namespace Symfony\Component\HttpKernel\DataCollector;
use Symfony\Component\Debug\Exception\SilencedErrorContext;
use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Log\DebugLoggerInterface;
@@ -25,18 +26,17 @@ class LoggerDataCollector extends DataCollector implements LateDataCollectorInte
{
private $logger;
private $containerPathPrefix;
+ private $currentRequest;
+ private $requestStack;
- public function __construct($logger = null, $containerPathPrefix = null)
+ public function __construct($logger = null, string $containerPathPrefix = null, RequestStack $requestStack = null)
{
if (null !== $logger && $logger instanceof DebugLoggerInterface) {
- if (!method_exists($logger, 'clear')) {
- @trigger_error(sprintf('Implementing "%s" without the "clear()" method is deprecated since Symfony 3.4 and will be unsupported in 4.0 for class "%s".', DebugLoggerInterface::class, \get_class($logger)), E_USER_DEPRECATED);
- }
-
$this->logger = $logger;
}
$this->containerPathPrefix = $containerPathPrefix;
+ $this->requestStack = $requestStack;
}
/**
@@ -44,7 +44,7 @@ class LoggerDataCollector extends DataCollector implements LateDataCollectorInte
*/
public function collect(Request $request, Response $response, \Exception $exception = null)
{
- // everything is done as late as possible
+ $this->currentRequest = $this->requestStack && $this->requestStack->getMasterRequest() !== $request ? $request : null;
}
/**
@@ -52,7 +52,7 @@ class LoggerDataCollector extends DataCollector implements LateDataCollectorInte
*/
public function reset()
{
- if ($this->logger && method_exists($this->logger, 'clear')) {
+ if ($this->logger instanceof DebugLoggerInterface) {
$this->logger->clear();
}
$this->data = array();
@@ -67,9 +67,10 @@ class LoggerDataCollector extends DataCollector implements LateDataCollectorInte
$containerDeprecationLogs = $this->getContainerDeprecationLogs();
$this->data = $this->computeErrorsCount($containerDeprecationLogs);
$this->data['compiler_logs'] = $this->getContainerCompilerLogs();
- $this->data['logs'] = $this->sanitizeLogs(array_merge($this->logger->getLogs(), $containerDeprecationLogs));
+ $this->data['logs'] = $this->sanitizeLogs(array_merge($this->logger->getLogs($this->currentRequest), $containerDeprecationLogs));
$this->data = $this->cloneVar($this->data);
}
+ $this->currentRequest = null;
}
/**
@@ -133,7 +134,7 @@ class LoggerDataCollector extends DataCollector implements LateDataCollectorInte
$log['timestamp'] = $bootTime;
$log['priority'] = 100;
$log['priorityName'] = 'DEBUG';
- $log['channel'] = '-';
+ $log['channel'] = null;
$log['scream'] = false;
unset($log['type'], $log['file'], $log['line'], $log['trace'], $log['trace'], $log['count']);
$logs[] = $log;
@@ -233,14 +234,14 @@ class LoggerDataCollector extends DataCollector implements LateDataCollectorInte
{
$silencedLogs = array();
$count = array(
- 'error_count' => $this->logger->countErrors(),
+ 'error_count' => $this->logger->countErrors($this->currentRequest),
'deprecation_count' => 0,
'warning_count' => 0,
'scream_count' => 0,
'priorities' => array(),
);
- foreach ($this->logger->getLogs() as $log) {
+ foreach ($this->logger->getLogs($this->currentRequest) as $log) {
if (isset($count['priorities'][$log['priority']])) {
++$count['priorities'][$log['priority']]['count'];
} else {
diff --git a/vendor/symfony/http-kernel/DataCollector/RequestDataCollector.php b/vendor/symfony/http-kernel/DataCollector/RequestDataCollector.php
index e415833cc3..ed75382618 100644
--- a/vendor/symfony/http-kernel/DataCollector/RequestDataCollector.php
+++ b/vendor/symfony/http-kernel/DataCollector/RequestDataCollector.php
@@ -79,6 +79,13 @@ class RequestDataCollector extends DataCollector implements EventSubscriberInter
$responseCookies[$cookie->getName()] = $cookie;
}
+ $dotenvVars = array();
+ foreach (explode(',', getenv('SYMFONY_DOTENV_VARS')) as $name) {
+ if ('' !== $name && false !== $value = getenv($name)) {
+ $dotenvVars[$name] = $value;
+ }
+ }
+
$this->data = array(
'method' => $request->getMethod(),
'format' => $request->getRequestFormat(),
@@ -88,6 +95,7 @@ class RequestDataCollector extends DataCollector implements EventSubscriberInter
'status_code' => $statusCode,
'request_query' => $request->query->all(),
'request_request' => $request->request->all(),
+ 'request_files' => $request->files->all(),
'request_headers' => $request->headers->all(),
'request_server' => $request->server->all(),
'request_cookies' => $request->cookies->all(),
@@ -101,6 +109,7 @@ class RequestDataCollector extends DataCollector implements EventSubscriberInter
'path_info' => $request->getPathInfo(),
'controller' => 'n/a',
'locale' => $request->getLocale(),
+ 'dotenv_vars' => $dotenvVars,
);
if (isset($this->data['request_headers']['php-auth-pw'])) {
@@ -145,11 +154,16 @@ class RequestDataCollector extends DataCollector implements EventSubscriberInter
'controller' => $this->parseController($request->attributes->get('_controller')),
'status_code' => $statusCode,
'status_text' => Response::$statusTexts[(int) $statusCode],
- ))
+ )),
+ 0, '/', null, $request->isSecure(), true, false, 'lax'
));
}
$this->data['identifier'] = $this->data['route'] ?: (\is_array($this->data['controller']) ? $this->data['controller']['class'].'::'.$this->data['controller']['method'].'()' : $this->data['controller']);
+
+ if ($response->headers->has('x-previous-debug-token')) {
+ $this->data['forward_token'] = $response->headers->get('x-previous-debug-token');
+ }
}
public function lateCollect()
@@ -183,6 +197,11 @@ class RequestDataCollector extends DataCollector implements EventSubscriberInter
return new ParameterBag($this->data['request_query']->getValue());
}
+ public function getRequestFiles()
+ {
+ return new ParameterBag($this->data['request_files']->getValue());
+ }
+
public function getRequestHeaders()
{
return new ParameterBag($this->data['request_headers']->getValue());
@@ -258,6 +277,11 @@ class RequestDataCollector extends DataCollector implements EventSubscriberInter
return $this->data['locale'];
}
+ public function getDotenvVars()
+ {
+ return new ParameterBag($this->data['dotenv_vars']->getValue());
+ }
+
/**
* Gets the route name.
*
@@ -309,6 +333,11 @@ class RequestDataCollector extends DataCollector implements EventSubscriberInter
return isset($this->data['redirect']) ? $this->data['redirect'] : false;
}
+ public function getForwardToken()
+ {
+ return isset($this->data['forward_token']) ? $this->data['forward_token'] : null;
+ }
+
public function onKernelController(FilterControllerEvent $event)
{
$this->controllers[$event->getRequest()] = $event->getController();
@@ -380,12 +409,25 @@ class RequestDataCollector extends DataCollector implements EventSubscriberInter
if ($controller instanceof \Closure) {
$r = new \ReflectionFunction($controller);
- return array(
+ $controller = array(
'class' => $r->getName(),
'method' => null,
'file' => $r->getFileName(),
'line' => $r->getStartLine(),
);
+
+ if (false !== strpos($r->name, '{closure}')) {
+ return $controller;
+ }
+ $controller['method'] = $r->name;
+
+ if ($class = $r->getClosureScopeClass()) {
+ $controller['class'] = $class->name;
+ } else {
+ return $r->name;
+ }
+
+ return $controller;
}
if (\is_object($controller)) {
diff --git a/vendor/symfony/http-kernel/DataCollector/Util/ValueExporter.php b/vendor/symfony/http-kernel/DataCollector/Util/ValueExporter.php
deleted file mode 100644
index e30b3a5029..0000000000
--- a/vendor/symfony/http-kernel/DataCollector/Util/ValueExporter.php
+++ /dev/null
@@ -1,99 +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\HttpKernel\DataCollector\Util;
-
-@trigger_error('The '.__NAMESPACE__.'\ValueExporter class is deprecated since Symfony 3.2 and will be removed in 4.0. Use the VarDumper component instead.', E_USER_DEPRECATED);
-
-/**
- * @author Bernhard Schussek <bschussek@gmail.com>
- *
- * @deprecated since version 3.2, to be removed in 4.0. Use the VarDumper component instead.
- */
-class ValueExporter
-{
- /**
- * Converts a PHP value to a string.
- *
- * @param mixed $value The PHP value
- * @param int $depth Only for internal usage
- * @param bool $deep Only for internal usage
- *
- * @return string The string representation of the given value
- */
- public function exportValue($value, $depth = 1, $deep = false)
- {
- if ($value instanceof \__PHP_Incomplete_Class) {
- return sprintf('__PHP_Incomplete_Class(%s)', $this->getClassNameFromIncomplete($value));
- }
-
- if (\is_object($value)) {
- if ($value instanceof \DateTimeInterface) {
- return sprintf('Object(%s) - %s', \get_class($value), $value->format(\DateTime::ATOM));
- }
-
- return sprintf('Object(%s)', \get_class($value));
- }
-
- if (\is_array($value)) {
- if (empty($value)) {
- return '[]';
- }
-
- $indent = str_repeat(' ', $depth);
-
- $a = array();
- foreach ($value as $k => $v) {
- if (\is_array($v)) {
- $deep = true;
- }
- $a[] = sprintf('%s => %s', $k, $this->exportValue($v, $depth + 1, $deep));
- }
-
- if ($deep) {
- return sprintf("[\n%s%s\n%s]", $indent, implode(sprintf(", \n%s", $indent), $a), str_repeat(' ', $depth - 1));
- }
-
- $s = sprintf('[%s]', implode(', ', $a));
-
- if (80 > \strlen($s)) {
- return $s;
- }
-
- return sprintf("[\n%s%s\n]", $indent, implode(sprintf(",\n%s", $indent), $a));
- }
-
- if (\is_resource($value)) {
- return sprintf('Resource(%s#%d)', get_resource_type($value), $value);
- }
-
- if (null === $value) {
- return 'null';
- }
-
- if (false === $value) {
- return 'false';
- }
-
- if (true === $value) {
- return 'true';
- }
-
- return (string) $value;
- }
-
- private function getClassNameFromIncomplete(\__PHP_Incomplete_Class $value)
- {
- $array = new \ArrayObject($value);
-
- return $array['__PHP_Incomplete_Class_Name'];
- }
-}
diff --git a/vendor/symfony/http-kernel/Debug/FileLinkFormatter.php b/vendor/symfony/http-kernel/Debug/FileLinkFormatter.php
index b3c2595b0d..e187022b54 100644
--- a/vendor/symfony/http-kernel/Debug/FileLinkFormatter.php
+++ b/vendor/symfony/http-kernel/Debug/FileLinkFormatter.php
@@ -31,7 +31,7 @@ class FileLinkFormatter implements \Serializable
/**
* @param string|\Closure $urlFormat the URL format, or a closure that returns it on-demand
*/
- public function __construct($fileLinkFormat = null, RequestStack $requestStack = null, $baseDir = null, $urlFormat = null)
+ public function __construct($fileLinkFormat = null, RequestStack $requestStack = null, string $baseDir = null, $urlFormat = null)
{
$fileLinkFormat = $fileLinkFormat ?: ini_get('xdebug.file_link_format') ?: get_cfg_var('xdebug.file_link_format');
if ($fileLinkFormat && !\is_array($fileLinkFormat)) {
@@ -68,11 +68,7 @@ class FileLinkFormatter implements \Serializable
public function unserialize($serialized)
{
- if (\PHP_VERSION_ID >= 70000) {
- $this->fileLinkFormat = unserialize($serialized, array('allowed_classes' => false));
- } else {
- $this->fileLinkFormat = unserialize($serialized);
- }
+ $this->fileLinkFormat = unserialize($serialized, array('allowed_classes' => false));
}
/**
diff --git a/vendor/symfony/http-kernel/DependencyInjection/AddAnnotatedClassesToCachePass.php b/vendor/symfony/http-kernel/DependencyInjection/AddAnnotatedClassesToCachePass.php
index 645e8f30ff..54f87edd99 100644
--- a/vendor/symfony/http-kernel/DependencyInjection/AddAnnotatedClassesToCachePass.php
+++ b/vendor/symfony/http-kernel/DependencyInjection/AddAnnotatedClassesToCachePass.php
@@ -36,23 +36,15 @@ class AddAnnotatedClassesToCachePass implements CompilerPassInterface
*/
public function process(ContainerBuilder $container)
{
- $classes = array();
- $annotatedClasses = array();
+ $annotatedClasses = $this->kernel->getAnnotatedClassesToCompile();
foreach ($container->getExtensions() as $extension) {
if ($extension instanceof Extension) {
- if (\PHP_VERSION_ID < 70000) {
- $classes = array_merge($classes, $extension->getClassesToCompile());
- }
$annotatedClasses = array_merge($annotatedClasses, $extension->getAnnotatedClassesToCompile());
}
}
$existingClasses = $this->getClassesInComposerClassMaps();
- if (\PHP_VERSION_ID < 70000) {
- $classes = $container->getParameterBag()->resolveValue($classes);
- $this->kernel->setClassCache($this->expandClasses($classes, $existingClasses));
- }
$annotatedClasses = $container->getParameterBag()->resolveValue($annotatedClasses);
$this->kernel->setAnnotatedClassCache($this->expandClasses($annotatedClasses, $existingClasses));
}
diff --git a/vendor/symfony/http-kernel/DependencyInjection/AddClassesToCachePass.php b/vendor/symfony/http-kernel/DependencyInjection/AddClassesToCachePass.php
deleted file mode 100644
index 8ae78e0d84..0000000000
--- a/vendor/symfony/http-kernel/DependencyInjection/AddClassesToCachePass.php
+++ /dev/null
@@ -1,25 +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\HttpKernel\DependencyInjection;
-
-@trigger_error('The '.__NAMESPACE__.'\AddClassesToCachePass class is deprecated since Symfony 3.3 and will be removed in 4.0.', E_USER_DEPRECATED);
-
-/**
- * Sets the classes to compile in the cache for the container.
- *
- * @author Fabien Potencier <fabien@symfony.com>
- *
- * @deprecated since version 3.3, to be removed in 4.0.
- */
-class AddClassesToCachePass extends AddAnnotatedClassesToCachePass
-{
-}
diff --git a/vendor/symfony/http-kernel/DependencyInjection/ControllerArgumentValueResolverPass.php b/vendor/symfony/http-kernel/DependencyInjection/ControllerArgumentValueResolverPass.php
index 343e217b96..77c0e479ae 100644
--- a/vendor/symfony/http-kernel/DependencyInjection/ControllerArgumentValueResolverPass.php
+++ b/vendor/symfony/http-kernel/DependencyInjection/ControllerArgumentValueResolverPass.php
@@ -15,6 +15,9 @@ use Symfony\Component\DependencyInjection\Argument\IteratorArgument;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\Compiler\PriorityTaggedServiceTrait;
use Symfony\Component\DependencyInjection\ContainerBuilder;
+use Symfony\Component\DependencyInjection\Reference;
+use Symfony\Component\HttpKernel\Controller\ArgumentResolver\TraceableValueResolver;
+use Symfony\Component\Stopwatch\Stopwatch;
/**
* Gathers and configures the argument value resolvers.
@@ -27,11 +30,13 @@ class ControllerArgumentValueResolverPass implements CompilerPassInterface
private $argumentResolverService;
private $argumentValueResolverTag;
+ private $traceableResolverStopwatch;
- public function __construct($argumentResolverService = 'argument_resolver', $argumentValueResolverTag = 'controller.argument_value_resolver')
+ public function __construct(string $argumentResolverService = 'argument_resolver', string $argumentValueResolverTag = 'controller.argument_value_resolver', string $traceableResolverStopwatch = 'debug.stopwatch')
{
$this->argumentResolverService = $argumentResolverService;
$this->argumentValueResolverTag = $argumentValueResolverTag;
+ $this->traceableResolverStopwatch = $traceableResolverStopwatch;
}
public function process(ContainerBuilder $container)
@@ -40,9 +45,20 @@ class ControllerArgumentValueResolverPass implements CompilerPassInterface
return;
}
+ $resolvers = $this->findAndSortTaggedServices($this->argumentValueResolverTag, $container);
+
+ if ($container->getParameter('kernel.debug') && class_exists(Stopwatch::class) && $container->has($this->traceableResolverStopwatch)) {
+ foreach ($resolvers as $resolverReference) {
+ $id = (string) $resolverReference;
+ $container->register("debug.$id", TraceableValueResolver::class)
+ ->setDecoratedService($id)
+ ->setArguments(array(new Reference("debug.$id.inner"), new Reference($this->traceableResolverStopwatch)));
+ }
+ }
+
$container
->getDefinition($this->argumentResolverService)
- ->replaceArgument(1, new IteratorArgument($this->findAndSortTaggedServices($this->argumentValueResolverTag, $container)))
+ ->replaceArgument(1, new IteratorArgument($resolvers))
;
}
}
diff --git a/vendor/symfony/http-kernel/DependencyInjection/Extension.php b/vendor/symfony/http-kernel/DependencyInjection/Extension.php
index a382c15d67..647875554b 100644
--- a/vendor/symfony/http-kernel/DependencyInjection/Extension.php
+++ b/vendor/symfony/http-kernel/DependencyInjection/Extension.php
@@ -20,26 +20,9 @@ use Symfony\Component\DependencyInjection\Extension\Extension as BaseExtension;
*/
abstract class Extension extends BaseExtension
{
- private $classes = array();
private $annotatedClasses = array();
/**
- * Gets the classes to cache.
- *
- * @return array An array of classes
- *
- * @deprecated since version 3.3, to be removed in 4.0.
- */
- public function getClassesToCompile()
- {
- if (\PHP_VERSION_ID >= 70000) {
- @trigger_error(__METHOD__.'() is deprecated since Symfony 3.3, to be removed in 4.0.', E_USER_DEPRECATED);
- }
-
- return $this->classes;
- }
-
- /**
* Gets the annotated classes to cache.
*
* @return array An array of classes
@@ -50,22 +33,6 @@ abstract class Extension extends BaseExtension
}
/**
- * Adds classes to the class cache.
- *
- * @param array $classes An array of class patterns
- *
- * @deprecated since version 3.3, to be removed in 4.0.
- */
- public function addClassesToCompile(array $classes)
- {
- if (\PHP_VERSION_ID >= 70000) {
- @trigger_error(__METHOD__.'() is deprecated since Symfony 3.3, to be removed in 4.0.', E_USER_DEPRECATED);
- }
-
- $this->classes = array_merge($this->classes, $classes);
- }
-
- /**
* Adds annotated classes to the class cache.
*
* @param array $annotatedClasses An array of class patterns
diff --git a/vendor/symfony/http-kernel/DependencyInjection/FragmentRendererPass.php b/vendor/symfony/http-kernel/DependencyInjection/FragmentRendererPass.php
index 06a39c8bc0..2a8c1b1b11 100644
--- a/vendor/symfony/http-kernel/DependencyInjection/FragmentRendererPass.php
+++ b/vendor/symfony/http-kernel/DependencyInjection/FragmentRendererPass.php
@@ -28,11 +28,7 @@ class FragmentRendererPass implements CompilerPassInterface
private $handlerService;
private $rendererTag;
- /**
- * @param string $handlerService Service name of the fragment handler in the container
- * @param string $rendererTag Tag name used for fragments
- */
- public function __construct($handlerService = 'fragment.handler', $rendererTag = 'kernel.fragment_renderer')
+ public function __construct(string $handlerService = 'fragment.handler', string $rendererTag = 'kernel.fragment_renderer')
{
$this->handlerService = $handlerService;
$this->rendererTag = $rendererTag;
diff --git a/vendor/symfony/http-kernel/DependencyInjection/LazyLoadingFragmentHandler.php b/vendor/symfony/http-kernel/DependencyInjection/LazyLoadingFragmentHandler.php
index 00b05959cf..4bb47902b5 100644
--- a/vendor/symfony/http-kernel/DependencyInjection/LazyLoadingFragmentHandler.php
+++ b/vendor/symfony/http-kernel/DependencyInjection/LazyLoadingFragmentHandler.php
@@ -23,18 +23,9 @@ use Symfony\Component\HttpKernel\Fragment\FragmentHandler;
class LazyLoadingFragmentHandler extends FragmentHandler
{
private $container;
- /**
- * @deprecated since version 3.3, to be removed in 4.0
- */
- private $rendererIds = array();
private $initialized = array();
- /**
- * @param ContainerInterface $container A container
- * @param RequestStack $requestStack The Request stack that controls the lifecycle of requests
- * @param bool $debug Whether the debug mode is enabled or not
- */
- public function __construct(ContainerInterface $container, RequestStack $requestStack, $debug = false)
+ public function __construct(ContainerInterface $container, RequestStack $requestStack, bool $debug = false)
{
$this->container = $container;
@@ -42,33 +33,10 @@ class LazyLoadingFragmentHandler extends FragmentHandler
}
/**
- * Adds a service as a fragment renderer.
- *
- * @param string $name The service name
- * @param string $renderer The render service id
- *
- * @deprecated since version 3.3, to be removed in 4.0
- */
- public function addRendererService($name, $renderer)
- {
- @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0.', __METHOD__), E_USER_DEPRECATED);
-
- $this->rendererIds[$name] = $renderer;
- }
-
- /**
* {@inheritdoc}
*/
public function render($uri, $renderer = 'inline', array $options = array())
{
- // BC 3.x, to be removed in 4.0
- if (isset($this->rendererIds[$renderer])) {
- $this->addRenderer($this->container->get($this->rendererIds[$renderer]));
- unset($this->rendererIds[$renderer]);
-
- return parent::render($uri, $renderer, $options);
- }
-
if (!isset($this->initialized[$renderer]) && $this->container->has($renderer)) {
$this->addRenderer($this->container->get($renderer));
$this->initialized[$renderer] = true;
diff --git a/vendor/symfony/http-kernel/DependencyInjection/RegisterControllerArgumentLocatorsPass.php b/vendor/symfony/http-kernel/DependencyInjection/RegisterControllerArgumentLocatorsPass.php
index cb05f6fbeb..125464b123 100644
--- a/vendor/symfony/http-kernel/DependencyInjection/RegisterControllerArgumentLocatorsPass.php
+++ b/vendor/symfony/http-kernel/DependencyInjection/RegisterControllerArgumentLocatorsPass.php
@@ -33,11 +33,13 @@ class RegisterControllerArgumentLocatorsPass implements CompilerPassInterface
{
private $resolverServiceId;
private $controllerTag;
+ private $controllerLocator;
- public function __construct($resolverServiceId = 'argument_resolver.service', $controllerTag = 'controller.service_arguments')
+ public function __construct(string $resolverServiceId = 'argument_resolver.service', string $controllerTag = 'controller.service_arguments', string $controllerLocator = 'argument_resolver.controller_locator')
{
$this->resolverServiceId = $resolverServiceId;
$this->controllerTag = $controllerTag;
+ $this->controllerLocator = $controllerLocator;
}
public function process(ContainerBuilder $container)
@@ -120,33 +122,38 @@ class RegisterControllerArgumentLocatorsPass implements CompilerPassInterface
$args = array();
foreach ($parameters as $p) {
/** @var \ReflectionParameter $p */
- $type = $target = ProxyHelper::getTypeHint($r, $p, true);
+ $type = ltrim($target = ProxyHelper::getTypeHint($r, $p), '\\');
$invalidBehavior = ContainerInterface::IGNORE_ON_INVALID_REFERENCE;
if (isset($arguments[$r->name][$p->name])) {
$target = $arguments[$r->name][$p->name];
if ('?' !== $target[0]) {
- $invalidBehavior = ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE;
+ $invalidBehavior = ContainerInterface::RUNTIME_EXCEPTION_ON_INVALID_REFERENCE;
} elseif ('' === $target = (string) substr($target, 1)) {
throw new InvalidArgumentException(sprintf('A "%s" tag must have non-empty "id" attributes for service "%s".', $this->controllerTag, $id));
} elseif ($p->allowsNull() && !$p->isOptional()) {
$invalidBehavior = ContainerInterface::NULL_ON_INVALID_REFERENCE;
}
- } elseif (isset($bindings[$bindingName = '$'.$p->name]) || isset($bindings[$bindingName = $type])) {
+ } elseif (isset($bindings[$bindingName = $type.' $'.$p->name]) || isset($bindings[$bindingName = '$'.$p->name]) || isset($bindings[$bindingName = $type])) {
$binding = $bindings[$bindingName];
list($bindingValue, $bindingId) = $binding->getValues();
+ $binding->setValues(array($bindingValue, $bindingId, true));
if (!$bindingValue instanceof Reference) {
- continue;
+ $args[$p->name] = new Reference('.value.'.$container->hash($bindingValue));
+ $container->register((string) $args[$p->name], 'mixed')
+ ->setFactory('current')
+ ->addArgument(array($bindingValue));
+ } else {
+ $args[$p->name] = $bindingValue;
}
- $binding->setValues(array($bindingValue, $bindingId, true));
- $args[$p->name] = $bindingValue;
-
continue;
- } elseif (!$type || !$autowire) {
+ } elseif (!$type || !$autowire || '\\' !== $target[0]) {
continue;
+ } elseif (!$p->allowsNull()) {
+ $invalidBehavior = ContainerInterface::RUNTIME_EXCEPTION_ON_INVALID_REFERENCE;
}
if (Request::class === $type) {
@@ -164,16 +171,19 @@ class RegisterControllerArgumentLocatorsPass implements CompilerPassInterface
throw new InvalidArgumentException($message);
}
- $args[$p->name] = $type ? new TypedReference($target, $type, $r->class, $invalidBehavior) : new Reference($target, $invalidBehavior);
+ $target = ltrim($target, '\\');
+ $args[$p->name] = $type ? new TypedReference($target, $type, $invalidBehavior, $p->name) : new Reference($target, $invalidBehavior);
}
// register the maps as a per-method service-locators
if ($args) {
- $controllers[$id.':'.$r->name] = ServiceLocatorTagPass::register($container, $args);
+ $controllers[$id.'::'.$r->name] = ServiceLocatorTagPass::register($container, $args);
}
}
}
$container->getDefinition($this->resolverServiceId)
- ->replaceArgument(0, ServiceLocatorTagPass::register($container, $controllers));
+ ->replaceArgument(0, $controllerLocatorRef = ServiceLocatorTagPass::register($container, $controllers));
+
+ $container->setAlias($this->controllerLocator, (string) $controllerLocatorRef);
}
}
diff --git a/vendor/symfony/http-kernel/DependencyInjection/RemoveEmptyControllerArgumentLocatorsPass.php b/vendor/symfony/http-kernel/DependencyInjection/RemoveEmptyControllerArgumentLocatorsPass.php
index e230a67ea6..596b6188f6 100644
--- a/vendor/symfony/http-kernel/DependencyInjection/RemoveEmptyControllerArgumentLocatorsPass.php
+++ b/vendor/symfony/http-kernel/DependencyInjection/RemoveEmptyControllerArgumentLocatorsPass.php
@@ -21,21 +21,16 @@ use Symfony\Component\DependencyInjection\ContainerBuilder;
*/
class RemoveEmptyControllerArgumentLocatorsPass implements CompilerPassInterface
{
- private $resolverServiceId;
+ private $controllerLocator;
- public function __construct($resolverServiceId = 'argument_resolver.service')
+ public function __construct(string $controllerLocator = 'argument_resolver.controller_locator')
{
- $this->resolverServiceId = $resolverServiceId;
+ $this->controllerLocator = $controllerLocator;
}
public function process(ContainerBuilder $container)
{
- if (false === $container->hasDefinition($this->resolverServiceId)) {
- return;
- }
-
- $serviceResolver = $container->getDefinition($this->resolverServiceId);
- $controllerLocator = $container->getDefinition((string) $serviceResolver->getArgument(0));
+ $controllerLocator = $container->findDefinition($this->controllerLocator);
$controllers = $controllerLocator->getArgument(0);
foreach ($controllers as $controller => $argumentRef) {
@@ -47,8 +42,7 @@ class RemoveEmptyControllerArgumentLocatorsPass implements CompilerPassInterface
} else {
// any methods listed for call-at-instantiation cannot be actions
$reason = false;
- $action = substr(strrchr($controller, ':'), 1);
- $id = substr($controller, 0, -1 - \strlen($action));
+ list($id, $action) = explode('::', $controller);
$controllerDef = $container->getDefinition($id);
foreach ($controllerDef->getMethodCalls() as list($method)) {
if (0 === strcasecmp($action, $method)) {
@@ -57,9 +51,9 @@ class RemoveEmptyControllerArgumentLocatorsPass implements CompilerPassInterface
}
}
if (!$reason) {
- if ($controllerDef->getClass() === $id) {
- $controllers[$id.'::'.$action] = $argumentRef;
- }
+ // Deprecated since Symfony 4.1. See Symfony\Component\HttpKernel\Controller\ContainerControllerResolver
+ $controllers[$id.':'.$action] = $argumentRef;
+
if ('__invoke' === $action) {
$controllers[$id] = $argumentRef;
}
diff --git a/vendor/symfony/http-kernel/DependencyInjection/ResettableServicePass.php b/vendor/symfony/http-kernel/DependencyInjection/ResettableServicePass.php
index 29433a6d5b..564f879ca7 100644
--- a/vendor/symfony/http-kernel/DependencyInjection/ResettableServicePass.php
+++ b/vendor/symfony/http-kernel/DependencyInjection/ResettableServicePass.php
@@ -25,7 +25,7 @@ class ResettableServicePass implements CompilerPassInterface
{
private $tagName;
- public function __construct($tagName = 'kernel.reset')
+ public function __construct(string $tagName = 'kernel.reset')
{
$this->tagName = $tagName;
}
diff --git a/vendor/symfony/http-kernel/DependencyInjection/ServicesResetter.php b/vendor/symfony/http-kernel/DependencyInjection/ServicesResetter.php
index b82d2fef3c..734fadbd74 100644
--- a/vendor/symfony/http-kernel/DependencyInjection/ServicesResetter.php
+++ b/vendor/symfony/http-kernel/DependencyInjection/ServicesResetter.php
@@ -11,6 +11,8 @@
namespace Symfony\Component\HttpKernel\DependencyInjection;
+use Symfony\Contracts\Service\ResetInterface;
+
/**
* Resets provided services.
*
@@ -19,7 +21,7 @@ namespace Symfony\Component\HttpKernel\DependencyInjection;
*
* @internal
*/
-class ServicesResetter
+class ServicesResetter implements ResetInterface
{
private $resettableServices;
private $resetMethods;
diff --git a/vendor/symfony/http-kernel/Event/FilterControllerArgumentsEvent.php b/vendor/symfony/http-kernel/Event/FilterControllerArgumentsEvent.php
index 043e0584a8..5e178f2b0b 100644
--- a/vendor/symfony/http-kernel/Event/FilterControllerArgumentsEvent.php
+++ b/vendor/symfony/http-kernel/Event/FilterControllerArgumentsEvent.php
@@ -30,7 +30,7 @@ class FilterControllerArgumentsEvent extends FilterControllerEvent
{
private $arguments;
- public function __construct(HttpKernelInterface $kernel, callable $controller, array $arguments, Request $request, $requestType)
+ public function __construct(HttpKernelInterface $kernel, callable $controller, array $arguments, Request $request, ?int $requestType)
{
parent::__construct($kernel, $controller, $request, $requestType);
diff --git a/vendor/symfony/http-kernel/Event/FilterControllerEvent.php b/vendor/symfony/http-kernel/Event/FilterControllerEvent.php
index a4cfd62587..7eab449376 100644
--- a/vendor/symfony/http-kernel/Event/FilterControllerEvent.php
+++ b/vendor/symfony/http-kernel/Event/FilterControllerEvent.php
@@ -29,7 +29,7 @@ class FilterControllerEvent extends KernelEvent
{
private $controller;
- public function __construct(HttpKernelInterface $kernel, callable $controller, Request $request, $requestType)
+ public function __construct(HttpKernelInterface $kernel, callable $controller, Request $request, ?int $requestType)
{
parent::__construct($kernel, $request, $requestType);
diff --git a/vendor/symfony/http-kernel/Event/FilterResponseEvent.php b/vendor/symfony/http-kernel/Event/FilterResponseEvent.php
index 1b80e34bab..04589f7b5c 100644
--- a/vendor/symfony/http-kernel/Event/FilterResponseEvent.php
+++ b/vendor/symfony/http-kernel/Event/FilterResponseEvent.php
@@ -28,7 +28,7 @@ class FilterResponseEvent extends KernelEvent
{
private $response;
- public function __construct(HttpKernelInterface $kernel, Request $request, $requestType, Response $response)
+ public function __construct(HttpKernelInterface $kernel, Request $request, int $requestType, Response $response)
{
parent::__construct($kernel, $request, $requestType);
diff --git a/vendor/symfony/http-kernel/Event/GetResponseForControllerResultEvent.php b/vendor/symfony/http-kernel/Event/GetResponseForControllerResultEvent.php
index d68eaa18c2..a0082821de 100644
--- a/vendor/symfony/http-kernel/Event/GetResponseForControllerResultEvent.php
+++ b/vendor/symfony/http-kernel/Event/GetResponseForControllerResultEvent.php
@@ -32,7 +32,7 @@ class GetResponseForControllerResultEvent extends GetResponseEvent
*/
private $controllerResult;
- public function __construct(HttpKernelInterface $kernel, Request $request, $requestType, $controllerResult)
+ public function __construct(HttpKernelInterface $kernel, Request $request, int $requestType, $controllerResult)
{
parent::__construct($kernel, $request, $requestType);
diff --git a/vendor/symfony/http-kernel/Event/GetResponseForExceptionEvent.php b/vendor/symfony/http-kernel/Event/GetResponseForExceptionEvent.php
index 6199838fcc..7fab006d13 100644
--- a/vendor/symfony/http-kernel/Event/GetResponseForExceptionEvent.php
+++ b/vendor/symfony/http-kernel/Event/GetResponseForExceptionEvent.php
@@ -41,7 +41,7 @@ class GetResponseForExceptionEvent extends GetResponseEvent
*/
private $allowCustomResponseCode = false;
- public function __construct(HttpKernelInterface $kernel, Request $request, $requestType, \Exception $e)
+ public function __construct(HttpKernelInterface $kernel, Request $request, int $requestType, \Exception $e)
{
parent::__construct($kernel, $request, $requestType);
diff --git a/vendor/symfony/http-kernel/Event/KernelEvent.php b/vendor/symfony/http-kernel/Event/KernelEvent.php
index cccf01f3da..f3db8a60d9 100644
--- a/vendor/symfony/http-kernel/Event/KernelEvent.php
+++ b/vendor/symfony/http-kernel/Event/KernelEvent.php
@@ -32,7 +32,7 @@ class KernelEvent extends Event
* @param int $requestType The request type the kernel is currently processing; one of
* HttpKernelInterface::MASTER_REQUEST or HttpKernelInterface::SUB_REQUEST
*/
- public function __construct(HttpKernelInterface $kernel, Request $request, $requestType)
+ public function __construct(HttpKernelInterface $kernel, Request $request, ?int $requestType)
{
$this->kernel = $kernel;
$this->request = $request;
diff --git a/vendor/symfony/http-kernel/EventListener/AbstractSessionListener.php b/vendor/symfony/http-kernel/EventListener/AbstractSessionListener.php
index 41187d4125..c7c1717069 100644
--- a/vendor/symfony/http-kernel/EventListener/AbstractSessionListener.php
+++ b/vendor/symfony/http-kernel/EventListener/AbstractSessionListener.php
@@ -11,6 +11,7 @@
namespace Symfony\Component\HttpKernel\EventListener;
+use Psr\Container\ContainerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
@@ -20,28 +21,48 @@ use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
/**
- * Sets the session in the request.
+ * Sets the session onto the request on the "kernel.request" event and saves
+ * it on the "kernel.response" event.
+ *
+ * In addition, if the session has been started it overrides the Cache-Control
+ * header in such a way that all caching is disabled in that case.
+ * If you have a scenario where caching responses with session information in
+ * them makes sense, you can disable this behaviour by setting the header
+ * AbstractSessionListener::NO_AUTO_CACHE_CONTROL_HEADER on the response.
*
* @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ * @author Tobias Schultze <http://tobion.de>
*/
abstract class AbstractSessionListener implements EventSubscriberInterface
{
+ const NO_AUTO_CACHE_CONTROL_HEADER = 'Symfony-Session-NoAutoCacheControl';
+
+ protected $container;
private $sessionUsageStack = array();
+ public function __construct(ContainerInterface $container = null)
+ {
+ $this->container = $container;
+ }
+
public function onKernelRequest(GetResponseEvent $event)
{
if (!$event->isMasterRequest()) {
return;
}
+ $session = null;
$request = $event->getRequest();
- $session = $this->getSession();
- $this->sessionUsageStack[] = $session instanceof Session ? $session->getUsageIndex() : null;
- if (null === $session || $request->hasSession()) {
- return;
+ if ($request->hasSession()) {
+ // no-op
+ } elseif (method_exists($request, 'setSessionFactory')) {
+ $request->setSessionFactory(function () { return $this->getSession(); });
+ } elseif ($session = $this->getSession()) {
+ $request->setSession($session);
}
- $request->setSession($session);
+ $session = $session ?? ($this->container && $this->container->has('initialized_session') ? $this->container->get('initialized_session') : null);
+ $this->sessionUsageStack[] = $session instanceof Session ? $session->getUsageIndex() : 0;
}
public function onKernelResponse(FilterResponseEvent $event)
@@ -50,15 +71,51 @@ abstract class AbstractSessionListener implements EventSubscriberInterface
return;
}
- if (!$session = $event->getRequest()->getSession()) {
+ $response = $event->getResponse();
+ $autoCacheControl = !$response->headers->has(self::NO_AUTO_CACHE_CONTROL_HEADER);
+ // Always remove the internal header if present
+ $response->headers->remove(self::NO_AUTO_CACHE_CONTROL_HEADER);
+
+ if (!$session = $this->container && $this->container->has('initialized_session') ? $this->container->get('initialized_session') : $event->getRequest()->getSession()) {
return;
}
if ($session instanceof Session ? $session->getUsageIndex() !== end($this->sessionUsageStack) : $session->isStarted()) {
- $event->getResponse()
- ->setPrivate()
- ->setMaxAge(0)
- ->headers->addCacheControlDirective('must-revalidate');
+ if ($autoCacheControl) {
+ $response
+ ->setPrivate()
+ ->setMaxAge(0)
+ ->headers->addCacheControlDirective('must-revalidate');
+ }
+ }
+
+ if ($session->isStarted()) {
+ /*
+ * Saves the session, in case it is still open, before sending the response/headers.
+ *
+ * This ensures several things in case the developer did not save the session explicitly:
+ *
+ * * If a session save handler without locking is used, it ensures the data is available
+ * on the next request, e.g. after a redirect. PHPs auto-save at script end via
+ * session_register_shutdown is executed after fastcgi_finish_request. So in this case
+ * the data could be missing the next request because it might not be saved the moment
+ * the new request is processed.
+ * * A locking save handler (e.g. the native 'files') circumvents concurrency problems like
+ * the one above. But by saving the session before long-running things in the terminate event,
+ * we ensure the session is not blocked longer than needed.
+ * * When regenerating the session ID no locking is involved in PHPs session design. See
+ * https://bugs.php.net/bug.php?id=61470 for a discussion. So in this case, the session must
+ * be saved anyway before sending the headers with the new session ID. Otherwise session
+ * data could get lost again for concurrent requests with the new ID. One result could be
+ * that you get logged out after just logging in.
+ *
+ * This listener should be executed as one of the last listeners, so that previous listeners
+ * can still operate on the open session. This prevents the overhead of restarting it.
+ * Listeners after closing the session can still work with the session as usual because
+ * Symfonys session implementation starts the session on demand. So writing to it after
+ * it is saved will just restart it.
+ */
+ $session->save();
}
}
@@ -76,7 +133,7 @@ abstract class AbstractSessionListener implements EventSubscriberInterface
{
return array(
KernelEvents::REQUEST => array('onKernelRequest', 128),
- // low priority to come after regular response listeners, same as SaveSessionListener
+ // low priority to come after regular response listeners, but higher than StreamedResponseListener
KernelEvents::RESPONSE => array('onKernelResponse', -1000),
KernelEvents::FINISH_REQUEST => array('onFinishRequest'),
);
diff --git a/vendor/symfony/http-kernel/EventListener/AbstractTestSessionListener.php b/vendor/symfony/http-kernel/EventListener/AbstractTestSessionListener.php
index cb5da50bd0..993c6ddf97 100644
--- a/vendor/symfony/http-kernel/EventListener/AbstractTestSessionListener.php
+++ b/vendor/symfony/http-kernel/EventListener/AbstractTestSessionListener.php
@@ -30,6 +30,12 @@ use Symfony\Component\HttpKernel\KernelEvents;
abstract class AbstractTestSessionListener implements EventSubscriberInterface
{
private $sessionId;
+ private $sessionOptions;
+
+ public function __construct(array $sessionOptions = array())
+ {
+ $this->sessionOptions = $sessionOptions;
+ }
public function onKernelRequest(GetResponseEvent $event)
{
@@ -61,16 +67,23 @@ abstract class AbstractTestSessionListener implements EventSubscriberInterface
return;
}
- if (!$session = $event->getRequest()->getSession()) {
+ $request = $event->getRequest();
+ if (!$request->hasSession()) {
return;
}
+ $session = $request->getSession();
if ($wasStarted = $session->isStarted()) {
$session->save();
}
if ($session instanceof Session ? !$session->isEmpty() || (null !== $this->sessionId && $session->getId() !== $this->sessionId) : $wasStarted) {
- $params = session_get_cookie_params();
+ $params = session_get_cookie_params() + array('samesite' => null);
+ foreach ($this->sessionOptions as $k => $v) {
+ if (0 === strpos($k, 'cookie_')) {
+ $params[substr($k, 7)] = $v;
+ }
+ }
foreach ($event->getResponse()->headers->getCookies() as $cookie) {
if ($session->getName() === $cookie->getName() && $params['path'] === $cookie->getPath() && $params['domain'] == $cookie->getDomain()) {
@@ -78,7 +91,7 @@ abstract class AbstractTestSessionListener implements EventSubscriberInterface
}
}
- $event->getResponse()->headers->setCookie(new Cookie($session->getName(), $session->getId(), 0 === $params['lifetime'] ? 0 : time() + $params['lifetime'], $params['path'], $params['domain'], $params['secure'], $params['httponly']));
+ $event->getResponse()->headers->setCookie(new Cookie($session->getName(), $session->getId(), 0 === $params['lifetime'] ? 0 : time() + $params['lifetime'], $params['path'], $params['domain'], $params['secure'], $params['httponly'], false, $params['samesite'] ?: null));
$this->sessionId = $session->getId();
}
}
diff --git a/vendor/symfony/http-kernel/EventListener/DebugHandlersListener.php b/vendor/symfony/http-kernel/EventListener/DebugHandlersListener.php
index 04137c7468..47fe05c5e1 100644
--- a/vendor/symfony/http-kernel/EventListener/DebugHandlersListener.php
+++ b/vendor/symfony/http-kernel/EventListener/DebugHandlersListener.php
@@ -48,15 +48,15 @@ class DebugHandlersListener implements EventSubscriberInterface
* @param string|array $fileLinkFormat The format for links to source files
* @param bool $scope Enables/disables scoping mode
*/
- public function __construct(callable $exceptionHandler = null, LoggerInterface $logger = null, $levels = E_ALL, $throwAt = E_ALL, $scream = true, $fileLinkFormat = null, $scope = true)
+ public function __construct(callable $exceptionHandler = null, LoggerInterface $logger = null, $levels = E_ALL, ?int $throwAt = E_ALL, bool $scream = true, $fileLinkFormat = null, bool $scope = true)
{
$this->exceptionHandler = $exceptionHandler;
$this->logger = $logger;
$this->levels = null === $levels ? E_ALL : $levels;
- $this->throwAt = is_numeric($throwAt) ? (int) $throwAt : (null === $throwAt ? null : ($throwAt ? E_ALL : null));
- $this->scream = (bool) $scream;
+ $this->throwAt = \is_int($throwAt) ? $throwAt : (null === $throwAt ? null : ($throwAt ? E_ALL : null));
+ $this->scream = $scream;
$this->fileLinkFormat = $fileLinkFormat;
- $this->scope = (bool) $scope;
+ $this->scope = $scope;
}
/**
diff --git a/vendor/symfony/http-kernel/EventListener/DumpListener.php b/vendor/symfony/http-kernel/EventListener/DumpListener.php
index de19e13113..3acbe7d46c 100644
--- a/vendor/symfony/http-kernel/EventListener/DumpListener.php
+++ b/vendor/symfony/http-kernel/EventListener/DumpListener.php
@@ -15,6 +15,7 @@ use Symfony\Component\Console\ConsoleEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\VarDumper\Cloner\ClonerInterface;
use Symfony\Component\VarDumper\Dumper\DataDumperInterface;
+use Symfony\Component\VarDumper\Server\Connection;
use Symfony\Component\VarDumper\VarDumper;
/**
@@ -26,20 +27,27 @@ class DumpListener implements EventSubscriberInterface
{
private $cloner;
private $dumper;
+ private $connection;
- public function __construct(ClonerInterface $cloner, DataDumperInterface $dumper)
+ public function __construct(ClonerInterface $cloner, DataDumperInterface $dumper, Connection $connection = null)
{
$this->cloner = $cloner;
$this->dumper = $dumper;
+ $this->connection = $connection;
}
public function configure()
{
$cloner = $this->cloner;
$dumper = $this->dumper;
+ $connection = $this->connection;
- VarDumper::setHandler(function ($var) use ($cloner, $dumper) {
- $dumper->dump($cloner->cloneVar($var));
+ VarDumper::setHandler(static function ($var) use ($cloner, $dumper, $connection) {
+ $data = $cloner->cloneVar($var);
+
+ if (!$connection || !$connection->write($data)) {
+ $dumper->dump($data);
+ }
});
}
diff --git a/vendor/symfony/http-kernel/EventListener/ExceptionListener.php b/vendor/symfony/http-kernel/EventListener/ExceptionListener.php
index 147e09013d..02b1d4ddc3 100644
--- a/vendor/symfony/http-kernel/EventListener/ExceptionListener.php
+++ b/vendor/symfony/http-kernel/EventListener/ExceptionListener.php
@@ -13,9 +13,11 @@ namespace Symfony\Component\HttpKernel\EventListener;
use Psr\Log\LoggerInterface;
use Symfony\Component\Debug\Exception\FlattenException;
+use Symfony\Component\Debug\ExceptionHandler;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
@@ -33,28 +35,49 @@ class ExceptionListener implements EventSubscriberInterface
protected $controller;
protected $logger;
protected $debug;
+ private $charset;
+ private $fileLinkFormat;
+ private $isTerminating = false;
- public function __construct($controller, LoggerInterface $logger = null, $debug = false)
+ public function __construct($controller, LoggerInterface $logger = null, $debug = false, string $charset = null, $fileLinkFormat = null)
{
$this->controller = $controller;
$this->logger = $logger;
$this->debug = $debug;
+ $this->charset = $charset;
+ $this->fileLinkFormat = $fileLinkFormat;
+ }
+
+ public function logKernelException(GetResponseForExceptionEvent $event)
+ {
+ $e = FlattenException::create($event->getException());
+
+ $this->logException($event->getException(), sprintf('Uncaught PHP Exception %s: "%s" at %s line %s', $e->getClass(), $e->getMessage(), $e->getFile(), $e->getLine()));
}
public function onKernelException(GetResponseForExceptionEvent $event)
{
+ if (null === $this->controller) {
+ if (!$event->isMasterRequest()) {
+ return;
+ }
+ if (!$this->isTerminating) {
+ $this->isTerminating = true;
+
+ return;
+ }
+ $this->isTerminating = false;
+ }
$exception = $event->getException();
- $request = $event->getRequest();
+ $request = $this->duplicateRequest($exception, $event->getRequest());
$eventDispatcher = \func_num_args() > 2 ? func_get_arg(2) : null;
- $this->logException($exception, sprintf('Uncaught PHP Exception %s: "%s" at %s line %s', \get_class($exception), $exception->getMessage(), $exception->getFile(), $exception->getLine()));
-
- $request = $this->duplicateRequest($exception, $request);
-
try {
$response = $event->getKernel()->handle($request, HttpKernelInterface::SUB_REQUEST, false);
} catch (\Exception $e) {
- $this->logException($e, sprintf('Exception thrown when handling an exception (%s: %s at %s line %s)', \get_class($e), $e->getMessage(), $e->getFile(), $e->getLine()));
+ $f = FlattenException::create($e);
+
+ $this->logException($e, sprintf('Exception thrown when handling an exception (%s: %s at %s line %s)', $f->getClass(), $f->getMessage(), $e->getFile(), $e->getLine()));
$wrapper = $e;
@@ -82,10 +105,18 @@ class ExceptionListener implements EventSubscriberInterface
}
}
+ public function reset()
+ {
+ $this->isTerminating = false;
+ }
+
public static function getSubscribedEvents()
{
return array(
- KernelEvents::EXCEPTION => array('onKernelException', -128),
+ KernelEvents::EXCEPTION => array(
+ array('logKernelException', 0),
+ array('onKernelException', -128),
+ ),
);
}
@@ -112,13 +143,17 @@ class ExceptionListener implements EventSubscriberInterface
* @param \Exception $exception The thrown exception
* @param Request $request The original request
*
- * @return Request $request The cloned request
+ * @return Request The cloned request
*/
protected function duplicateRequest(\Exception $exception, Request $request)
{
$attributes = array(
- '_controller' => $this->controller,
- 'exception' => FlattenException::create($exception),
+ 'exception' => $exception = FlattenException::create($exception),
+ '_controller' => $this->controller ?: function () use ($exception) {
+ $handler = new ExceptionHandler($this->debug, $this->charset, $this->fileLinkFormat);
+
+ return new Response($handler->getHtml($exception), $exception->getStatusCode(), $exception->getHeaders());
+ },
'logger' => $this->logger instanceof DebugLoggerInterface ? $this->logger : null,
);
$request = $request->duplicate(null, null, $attributes);
diff --git a/vendor/symfony/http-kernel/EventListener/FragmentListener.php b/vendor/symfony/http-kernel/EventListener/FragmentListener.php
index 574d7c05c9..b47aa7cca0 100644
--- a/vendor/symfony/http-kernel/EventListener/FragmentListener.php
+++ b/vendor/symfony/http-kernel/EventListener/FragmentListener.php
@@ -38,7 +38,7 @@ class FragmentListener implements EventSubscriberInterface
* @param UriSigner $signer A UriSigner instance
* @param string $fragmentPath The path that triggers this listener
*/
- public function __construct(UriSigner $signer, $fragmentPath = '/_fragment')
+ public function __construct(UriSigner $signer, string $fragmentPath = '/_fragment')
{
$this->signer = $signer;
$this->fragmentPath = $fragmentPath;
diff --git a/vendor/symfony/http-kernel/EventListener/LocaleListener.php b/vendor/symfony/http-kernel/EventListener/LocaleListener.php
index ed0236efc8..1067e8a0a5 100644
--- a/vendor/symfony/http-kernel/EventListener/LocaleListener.php
+++ b/vendor/symfony/http-kernel/EventListener/LocaleListener.php
@@ -35,7 +35,7 @@ class LocaleListener implements EventSubscriberInterface
* @param string $defaultLocale The default locale
* @param RequestContextAwareInterface|null $router The router
*/
- public function __construct(RequestStack $requestStack, $defaultLocale = 'en', RequestContextAwareInterface $router = null)
+ public function __construct(RequestStack $requestStack, string $defaultLocale = 'en', RequestContextAwareInterface $router = null)
{
$this->defaultLocale = $defaultLocale;
$this->requestStack = $requestStack;
diff --git a/vendor/symfony/http-kernel/EventListener/ProfilerListener.php b/vendor/symfony/http-kernel/EventListener/ProfilerListener.php
index 2e54a92f08..03344be7a6 100644
--- a/vendor/symfony/http-kernel/EventListener/ProfilerListener.php
+++ b/vendor/symfony/http-kernel/EventListener/ProfilerListener.php
@@ -43,12 +43,12 @@ class ProfilerListener implements EventSubscriberInterface
* @param bool $onlyException True if the profiler only collects data when an exception occurs, false otherwise
* @param bool $onlyMasterRequests True if the profiler only collects data when the request is a master request, false otherwise
*/
- public function __construct(Profiler $profiler, RequestStack $requestStack, RequestMatcherInterface $matcher = null, $onlyException = false, $onlyMasterRequests = false)
+ public function __construct(Profiler $profiler, RequestStack $requestStack, RequestMatcherInterface $matcher = null, bool $onlyException = false, bool $onlyMasterRequests = false)
{
$this->profiler = $profiler;
$this->matcher = $matcher;
- $this->onlyException = (bool) $onlyException;
- $this->onlyMasterRequests = (bool) $onlyMasterRequests;
+ $this->onlyException = $onlyException;
+ $this->onlyMasterRequests = $onlyMasterRequests;
$this->profiles = new \SplObjectStorage();
$this->parents = new \SplObjectStorage();
$this->requestStack = $requestStack;
@@ -121,7 +121,7 @@ class ProfilerListener implements EventSubscriberInterface
{
return array(
KernelEvents::RESPONSE => array('onKernelResponse', -100),
- KernelEvents::EXCEPTION => 'onKernelException',
+ KernelEvents::EXCEPTION => array('onKernelException', 0),
KernelEvents::TERMINATE => array('onKernelTerminate', -1024),
);
}
diff --git a/vendor/symfony/http-kernel/EventListener/ResponseListener.php b/vendor/symfony/http-kernel/EventListener/ResponseListener.php
index f24784527b..0550c0230e 100644
--- a/vendor/symfony/http-kernel/EventListener/ResponseListener.php
+++ b/vendor/symfony/http-kernel/EventListener/ResponseListener.php
@@ -24,7 +24,7 @@ class ResponseListener implements EventSubscriberInterface
{
private $charset;
- public function __construct($charset)
+ public function __construct(string $charset)
{
$this->charset = $charset;
}
diff --git a/vendor/symfony/http-kernel/EventListener/RouterListener.php b/vendor/symfony/http-kernel/EventListener/RouterListener.php
index ab5c86cdd0..3919284564 100644
--- a/vendor/symfony/http-kernel/EventListener/RouterListener.php
+++ b/vendor/symfony/http-kernel/EventListener/RouterListener.php
@@ -57,7 +57,7 @@ class RouterListener implements EventSubscriberInterface
*
* @throws \InvalidArgumentException
*/
- public function __construct($matcher, RequestStack $requestStack, RequestContext $context = null, LoggerInterface $logger = null, $projectDir = null, $debug = true)
+ public function __construct($matcher, RequestStack $requestStack, RequestContext $context = null, LoggerInterface $logger = null, string $projectDir = null, bool $debug = true)
{
if (!$matcher instanceof UrlMatcherInterface && !$matcher instanceof RequestMatcherInterface) {
throw new \InvalidArgumentException('Matcher must either implement UrlMatcherInterface or RequestMatcherInterface.');
diff --git a/vendor/symfony/http-kernel/EventListener/SaveSessionListener.php b/vendor/symfony/http-kernel/EventListener/SaveSessionListener.php
index 36809b59af..99382ea3cc 100644
--- a/vendor/symfony/http-kernel/EventListener/SaveSessionListener.php
+++ b/vendor/symfony/http-kernel/EventListener/SaveSessionListener.php
@@ -11,36 +11,16 @@
namespace Symfony\Component\HttpKernel\EventListener;
+@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.1, use AbstractSessionListener instead.', SaveSessionListener::class), E_USER_DEPRECATED);
+
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
/**
- * Saves the session, in case it is still open, before sending the response/headers.
- *
- * This ensures several things in case the developer did not save the session explicitly:
- *
- * * If a session save handler without locking is used, it ensures the data is available
- * on the next request, e.g. after a redirect. PHPs auto-save at script end via
- * session_register_shutdown is executed after fastcgi_finish_request. So in this case
- * the data could be missing the next request because it might not be saved the moment
- * the new request is processed.
- * * A locking save handler (e.g. the native 'files') circumvents concurrency problems like
- * the one above. But by saving the session before long-running things in the terminate event,
- * we ensure the session is not blocked longer than needed.
- * * When regenerating the session ID no locking is involved in PHPs session design. See
- * https://bugs.php.net/bug.php?id=61470 for a discussion. So in this case, the session must
- * be saved anyway before sending the headers with the new session ID. Otherwise session
- * data could get lost again for concurrent requests with the new ID. One result could be
- * that you get logged out after just logging in.
- *
- * This listener should be executed as one of the last listeners, so that previous listeners
- * can still operate on the open session. This prevents the overhead of restarting it.
- * Listeners after closing the session can still work with the session as usual because
- * Symfonys session implementation starts the session on demand. So writing to it after
- * it is saved will just restart it.
- *
* @author Tobias Schultze <http://tobion.de>
+ *
+ * @deprecated since Symfony 4.1, use AbstractSessionListener instead
*/
class SaveSessionListener implements EventSubscriberInterface
{
diff --git a/vendor/symfony/http-kernel/EventListener/SessionListener.php b/vendor/symfony/http-kernel/EventListener/SessionListener.php
index 39ebfd922f..75624b6c5c 100644
--- a/vendor/symfony/http-kernel/EventListener/SessionListener.php
+++ b/vendor/symfony/http-kernel/EventListener/SessionListener.php
@@ -12,18 +12,21 @@
namespace Symfony\Component\HttpKernel\EventListener;
use Psr\Container\ContainerInterface;
+use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage;
/**
* Sets the session in the request.
*
+ * When the passed container contains a "session_storage" entry which
+ * holds a NativeSessionStorage instance, the "cookie_secure" option
+ * will be set to true whenever the current master request is secure.
+ *
* @author Fabien Potencier <fabien@symfony.com>
*
- * @final since version 3.3
+ * @final
*/
class SessionListener extends AbstractSessionListener
{
- private $container;
-
public function __construct(ContainerInterface $container)
{
$this->container = $container;
@@ -35,6 +38,13 @@ class SessionListener extends AbstractSessionListener
return;
}
+ if ($this->container->has('session_storage')
+ && ($storage = $this->container->get('session_storage')) instanceof NativeSessionStorage
+ && $this->container->get('request_stack')->getMasterRequest()->isSecure()
+ ) {
+ $storage->setOptions(array('cookie_secure' => true));
+ }
+
return $this->container->get('session');
}
}
diff --git a/vendor/symfony/http-kernel/EventListener/TestSessionListener.php b/vendor/symfony/http-kernel/EventListener/TestSessionListener.php
index 36abb422f4..23589a2bb3 100644
--- a/vendor/symfony/http-kernel/EventListener/TestSessionListener.php
+++ b/vendor/symfony/http-kernel/EventListener/TestSessionListener.php
@@ -18,15 +18,16 @@ use Psr\Container\ContainerInterface;
*
* @author Fabien Potencier <fabien@symfony.com>
*
- * @final since version 3.3
+ * @final
*/
class TestSessionListener extends AbstractTestSessionListener
{
private $container;
- public function __construct(ContainerInterface $container)
+ public function __construct(ContainerInterface $container, array $sessionOptions = array())
{
$this->container = $container;
+ parent::__construct($sessionOptions);
}
protected function getSession()
diff --git a/vendor/symfony/http-kernel/EventListener/TranslatorListener.php b/vendor/symfony/http-kernel/EventListener/TranslatorListener.php
index 2a5fc71280..7cf059886d 100644
--- a/vendor/symfony/http-kernel/EventListener/TranslatorListener.php
+++ b/vendor/symfony/http-kernel/EventListener/TranslatorListener.php
@@ -17,7 +17,8 @@ use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpKernel\Event\FinishRequestEvent;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
-use Symfony\Component\Translation\TranslatorInterface;
+use Symfony\Component\Translation\TranslatorInterface as LegacyTranslatorInterface;
+use Symfony\Contracts\Translation\TranslatorInterface;
/**
* Synchronizes the locale between the request and the translator.
@@ -29,8 +30,14 @@ class TranslatorListener implements EventSubscriberInterface
private $translator;
private $requestStack;
- public function __construct(TranslatorInterface $translator, RequestStack $requestStack)
+ /**
+ * @param TranslatorInterface $translator
+ */
+ public function __construct($translator, RequestStack $requestStack)
{
+ if (!$translator instanceof LegacyTranslatorInterface && !$translator instanceof TranslatorInterface) {
+ throw new \TypeError(sprintf('Argument 1 passed to %s() must be an instance of %s, %s given.', __METHOD__, TranslatorInterface::class, \is_object($translator) ? \get_class($translator) : \gettype($translator)));
+ }
$this->translator = $translator;
$this->requestStack = $requestStack;
}
diff --git a/vendor/symfony/http-kernel/Exception/AccessDeniedHttpException.php b/vendor/symfony/http-kernel/Exception/AccessDeniedHttpException.php
index 3941884266..3aedbf97fe 100644
--- a/vendor/symfony/http-kernel/Exception/AccessDeniedHttpException.php
+++ b/vendor/symfony/http-kernel/Exception/AccessDeniedHttpException.php
@@ -21,9 +21,10 @@ class AccessDeniedHttpException extends HttpException
* @param string $message The internal exception message
* @param \Exception $previous The previous exception
* @param int $code The internal exception code
+ * @param array $headers
*/
- public function __construct($message = null, \Exception $previous = null, $code = 0)
+ public function __construct(string $message = null, \Exception $previous = null, int $code = 0, array $headers = array())
{
- parent::__construct(403, $message, $previous, array(), $code);
+ parent::__construct(403, $message, $previous, $headers, $code);
}
}
diff --git a/vendor/symfony/http-kernel/Exception/BadRequestHttpException.php b/vendor/symfony/http-kernel/Exception/BadRequestHttpException.php
index c28d83739c..ff215db45f 100644
--- a/vendor/symfony/http-kernel/Exception/BadRequestHttpException.php
+++ b/vendor/symfony/http-kernel/Exception/BadRequestHttpException.php
@@ -20,9 +20,10 @@ class BadRequestHttpException extends HttpException
* @param string $message The internal exception message
* @param \Exception $previous The previous exception
* @param int $code The internal exception code
+ * @param array $headers
*/
- public function __construct($message = null, \Exception $previous = null, $code = 0)
+ public function __construct(string $message = null, \Exception $previous = null, int $code = 0, array $headers = array())
{
- parent::__construct(400, $message, $previous, array(), $code);
+ parent::__construct(400, $message, $previous, $headers, $code);
}
}
diff --git a/vendor/symfony/http-kernel/Exception/ConflictHttpException.php b/vendor/symfony/http-kernel/Exception/ConflictHttpException.php
index 79f24f2e56..60195daf7b 100644
--- a/vendor/symfony/http-kernel/Exception/ConflictHttpException.php
+++ b/vendor/symfony/http-kernel/Exception/ConflictHttpException.php
@@ -20,9 +20,10 @@ class ConflictHttpException extends HttpException
* @param string $message The internal exception message
* @param \Exception $previous The previous exception
* @param int $code The internal exception code
+ * @param array $headers
*/
- public function __construct($message = null, \Exception $previous = null, $code = 0)
+ public function __construct(string $message = null, \Exception $previous = null, int $code = 0, array $headers = array())
{
- parent::__construct(409, $message, $previous, array(), $code);
+ parent::__construct(409, $message, $previous, $headers, $code);
}
}
diff --git a/vendor/symfony/http-kernel/Exception/ControllerDoesNotReturnResponseException.php b/vendor/symfony/http-kernel/Exception/ControllerDoesNotReturnResponseException.php
new file mode 100644
index 0000000000..39149aa5b7
--- /dev/null
+++ b/vendor/symfony/http-kernel/Exception/ControllerDoesNotReturnResponseException.php
@@ -0,0 +1,78 @@
+<?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\HttpKernel\Exception;
+
+/**
+ * @author Grégoire Pineau <lyrixx@lyrixx.info>
+ */
+class ControllerDoesNotReturnResponseException extends \LogicException
+{
+ public function __construct(string $message, callable $controller, string $file, int $line)
+ {
+ parent::__construct($message);
+
+ if (!$controllerDefinition = $this->parseControllerDefinition($controller)) {
+ return;
+ }
+
+ $this->file = $controllerDefinition['file'];
+ $this->line = $controllerDefinition['line'];
+ $r = new \ReflectionProperty(\Exception::class, 'trace');
+ $r->setAccessible(true);
+ $r->setValue($this, array_merge(array(
+ array(
+ 'line' => $line,
+ 'file' => $file,
+ ),
+ ), $this->getTrace()));
+ }
+
+ private function parseControllerDefinition(callable $controller): ?array
+ {
+ if (\is_string($controller) && false !== strpos($controller, '::')) {
+ $controller = explode('::', $controller);
+ }
+
+ if (\is_array($controller)) {
+ try {
+ $r = new \ReflectionMethod($controller[0], $controller[1]);
+
+ return array(
+ 'file' => $r->getFileName(),
+ 'line' => $r->getEndLine(),
+ );
+ } catch (\ReflectionException $e) {
+ return null;
+ }
+ }
+
+ if ($controller instanceof \Closure) {
+ $r = new \ReflectionFunction($controller);
+
+ return array(
+ 'file' => $r->getFileName(),
+ 'line' => $r->getEndLine(),
+ );
+ }
+
+ if (\is_object($controller)) {
+ $r = new \ReflectionClass($controller);
+
+ return array(
+ 'file' => $r->getFileName(),
+ 'line' => $r->getEndLine(),
+ );
+ }
+
+ return null;
+ }
+}
diff --git a/vendor/symfony/http-kernel/Exception/GoneHttpException.php b/vendor/symfony/http-kernel/Exception/GoneHttpException.php
index 84e6915df7..f2f3515f77 100644
--- a/vendor/symfony/http-kernel/Exception/GoneHttpException.php
+++ b/vendor/symfony/http-kernel/Exception/GoneHttpException.php
@@ -20,9 +20,10 @@ class GoneHttpException extends HttpException
* @param string $message The internal exception message
* @param \Exception $previous The previous exception
* @param int $code The internal exception code
+ * @param array $headers
*/
- public function __construct($message = null, \Exception $previous = null, $code = 0)
+ public function __construct(string $message = null, \Exception $previous = null, int $code = 0, array $headers = array())
{
- parent::__construct(410, $message, $previous, array(), $code);
+ parent::__construct(410, $message, $previous, $headers, $code);
}
}
diff --git a/vendor/symfony/http-kernel/Exception/HttpException.php b/vendor/symfony/http-kernel/Exception/HttpException.php
index e8e3760583..dab73120d0 100644
--- a/vendor/symfony/http-kernel/Exception/HttpException.php
+++ b/vendor/symfony/http-kernel/Exception/HttpException.php
@@ -21,7 +21,7 @@ class HttpException extends \RuntimeException implements HttpExceptionInterface
private $statusCode;
private $headers;
- public function __construct($statusCode, $message = null, \Exception $previous = null, array $headers = array(), $code = 0)
+ public function __construct(int $statusCode, string $message = null, \Exception $previous = null, array $headers = array(), ?int $code = 0)
{
$this->statusCode = $statusCode;
$this->headers = $headers;
diff --git a/vendor/symfony/http-kernel/Exception/LengthRequiredHttpException.php b/vendor/symfony/http-kernel/Exception/LengthRequiredHttpException.php
index 645efe87d7..46b76ba6a3 100644
--- a/vendor/symfony/http-kernel/Exception/LengthRequiredHttpException.php
+++ b/vendor/symfony/http-kernel/Exception/LengthRequiredHttpException.php
@@ -20,9 +20,10 @@ class LengthRequiredHttpException extends HttpException
* @param string $message The internal exception message
* @param \Exception $previous The previous exception
* @param int $code The internal exception code
+ * @param array $headers
*/
- public function __construct($message = null, \Exception $previous = null, $code = 0)
+ public function __construct(string $message = null, \Exception $previous = null, int $code = 0, array $headers = array())
{
- parent::__construct(411, $message, $previous, array(), $code);
+ parent::__construct(411, $message, $previous, $headers, $code);
}
}
diff --git a/vendor/symfony/http-kernel/Exception/MethodNotAllowedHttpException.php b/vendor/symfony/http-kernel/Exception/MethodNotAllowedHttpException.php
index e308a5fee2..b0085c16fa 100644
--- a/vendor/symfony/http-kernel/Exception/MethodNotAllowedHttpException.php
+++ b/vendor/symfony/http-kernel/Exception/MethodNotAllowedHttpException.php
@@ -21,10 +21,11 @@ class MethodNotAllowedHttpException extends HttpException
* @param string $message The internal exception message
* @param \Exception $previous The previous exception
* @param int $code The internal exception code
+ * @param array $headers
*/
- public function __construct(array $allow, $message = null, \Exception $previous = null, $code = 0)
+ public function __construct(array $allow, string $message = null, \Exception $previous = null, ?int $code = 0, array $headers = array())
{
- $headers = array('Allow' => strtoupper(implode(', ', $allow)));
+ $headers['Allow'] = strtoupper(implode(', ', $allow));
parent::__construct(405, $message, $previous, $headers, $code);
}
diff --git a/vendor/symfony/http-kernel/Exception/NotAcceptableHttpException.php b/vendor/symfony/http-kernel/Exception/NotAcceptableHttpException.php
index 097a13fd9b..32c3089374 100644
--- a/vendor/symfony/http-kernel/Exception/NotAcceptableHttpException.php
+++ b/vendor/symfony/http-kernel/Exception/NotAcceptableHttpException.php
@@ -20,9 +20,10 @@ class NotAcceptableHttpException extends HttpException
* @param string $message The internal exception message
* @param \Exception $previous The previous exception
* @param int $code The internal exception code
+ * @param array $headers
*/
- public function __construct($message = null, \Exception $previous = null, $code = 0)
+ public function __construct(string $message = null, \Exception $previous = null, int $code = 0, array $headers = array())
{
- parent::__construct(406, $message, $previous, array(), $code);
+ parent::__construct(406, $message, $previous, $headers, $code);
}
}
diff --git a/vendor/symfony/http-kernel/Exception/NotFoundHttpException.php b/vendor/symfony/http-kernel/Exception/NotFoundHttpException.php
index 878173cc7b..433ff9b9e0 100644
--- a/vendor/symfony/http-kernel/Exception/NotFoundHttpException.php
+++ b/vendor/symfony/http-kernel/Exception/NotFoundHttpException.php
@@ -20,9 +20,10 @@ class NotFoundHttpException extends HttpException
* @param string $message The internal exception message
* @param \Exception $previous The previous exception
* @param int $code The internal exception code
+ * @param array $headers
*/
- public function __construct($message = null, \Exception $previous = null, $code = 0)
+ public function __construct(string $message = null, \Exception $previous = null, int $code = 0, array $headers = array())
{
- parent::__construct(404, $message, $previous, array(), $code);
+ parent::__construct(404, $message, $previous, $headers, $code);
}
}
diff --git a/vendor/symfony/http-kernel/Exception/PreconditionFailedHttpException.php b/vendor/symfony/http-kernel/Exception/PreconditionFailedHttpException.php
index 9f13a624cc..108178889c 100644
--- a/vendor/symfony/http-kernel/Exception/PreconditionFailedHttpException.php
+++ b/vendor/symfony/http-kernel/Exception/PreconditionFailedHttpException.php
@@ -20,9 +20,10 @@ class PreconditionFailedHttpException extends HttpException
* @param string $message The internal exception message
* @param \Exception $previous The previous exception
* @param int $code The internal exception code
+ * @param array $headers
*/
- public function __construct($message = null, \Exception $previous = null, $code = 0)
+ public function __construct(string $message = null, \Exception $previous = null, int $code = 0, array $headers = array())
{
- parent::__construct(412, $message, $previous, array(), $code);
+ parent::__construct(412, $message, $previous, $headers, $code);
}
}
diff --git a/vendor/symfony/http-kernel/Exception/PreconditionRequiredHttpException.php b/vendor/symfony/http-kernel/Exception/PreconditionRequiredHttpException.php
index 9d0a36d7d3..3078328241 100644
--- a/vendor/symfony/http-kernel/Exception/PreconditionRequiredHttpException.php
+++ b/vendor/symfony/http-kernel/Exception/PreconditionRequiredHttpException.php
@@ -22,9 +22,10 @@ class PreconditionRequiredHttpException extends HttpException
* @param string $message The internal exception message
* @param \Exception $previous The previous exception
* @param int $code The internal exception code
+ * @param array $headers
*/
- public function __construct($message = null, \Exception $previous = null, $code = 0)
+ public function __construct(string $message = null, \Exception $previous = null, int $code = 0, array $headers = array())
{
- parent::__construct(428, $message, $previous, array(), $code);
+ parent::__construct(428, $message, $previous, $headers, $code);
}
}
diff --git a/vendor/symfony/http-kernel/Exception/ServiceUnavailableHttpException.php b/vendor/symfony/http-kernel/Exception/ServiceUnavailableHttpException.php
index b2767c3fd5..667764779f 100644
--- a/vendor/symfony/http-kernel/Exception/ServiceUnavailableHttpException.php
+++ b/vendor/symfony/http-kernel/Exception/ServiceUnavailableHttpException.php
@@ -21,12 +21,12 @@ class ServiceUnavailableHttpException extends HttpException
* @param string $message The internal exception message
* @param \Exception $previous The previous exception
* @param int $code The internal exception code
+ * @param array $headers
*/
- public function __construct($retryAfter = null, $message = null, \Exception $previous = null, $code = 0)
+ public function __construct($retryAfter = null, string $message = null, \Exception $previous = null, ?int $code = 0, array $headers = array())
{
- $headers = array();
if ($retryAfter) {
- $headers = array('Retry-After' => $retryAfter);
+ $headers['Retry-After'] = $retryAfter;
}
parent::__construct(503, $message, $previous, $headers, $code);
diff --git a/vendor/symfony/http-kernel/Exception/TooManyRequestsHttpException.php b/vendor/symfony/http-kernel/Exception/TooManyRequestsHttpException.php
index 7d8a803323..60b024c330 100644
--- a/vendor/symfony/http-kernel/Exception/TooManyRequestsHttpException.php
+++ b/vendor/symfony/http-kernel/Exception/TooManyRequestsHttpException.php
@@ -23,12 +23,12 @@ class TooManyRequestsHttpException extends HttpException
* @param string $message The internal exception message
* @param \Exception $previous The previous exception
* @param int $code The internal exception code
+ * @param array $headers
*/
- public function __construct($retryAfter = null, $message = null, \Exception $previous = null, $code = 0)
+ public function __construct($retryAfter = null, string $message = null, \Exception $previous = null, ?int $code = 0, array $headers = array())
{
- $headers = array();
if ($retryAfter) {
- $headers = array('Retry-After' => $retryAfter);
+ $headers['Retry-After'] = $retryAfter;
}
parent::__construct(429, $message, $previous, $headers, $code);
diff --git a/vendor/symfony/http-kernel/Exception/UnauthorizedHttpException.php b/vendor/symfony/http-kernel/Exception/UnauthorizedHttpException.php
index 05ac875c55..17ebb25464 100644
--- a/vendor/symfony/http-kernel/Exception/UnauthorizedHttpException.php
+++ b/vendor/symfony/http-kernel/Exception/UnauthorizedHttpException.php
@@ -21,10 +21,11 @@ class UnauthorizedHttpException extends HttpException
* @param string $message The internal exception message
* @param \Exception $previous The previous exception
* @param int $code The internal exception code
+ * @param array $headers
*/
- public function __construct($challenge, $message = null, \Exception $previous = null, $code = 0)
+ public function __construct(string $challenge, string $message = null, \Exception $previous = null, ?int $code = 0, array $headers = array())
{
- $headers = array('WWW-Authenticate' => $challenge);
+ $headers['WWW-Authenticate'] = $challenge;
parent::__construct(401, $message, $previous, $headers, $code);
}
diff --git a/vendor/symfony/http-kernel/Exception/UnprocessableEntityHttpException.php b/vendor/symfony/http-kernel/Exception/UnprocessableEntityHttpException.php
index 01b8b8465a..3a4b40c984 100644
--- a/vendor/symfony/http-kernel/Exception/UnprocessableEntityHttpException.php
+++ b/vendor/symfony/http-kernel/Exception/UnprocessableEntityHttpException.php
@@ -20,9 +20,10 @@ class UnprocessableEntityHttpException extends HttpException
* @param string $message The internal exception message
* @param \Exception $previous The previous exception
* @param int $code The internal exception code
+ * @param array $headers
*/
- public function __construct($message = null, \Exception $previous = null, $code = 0)
+ public function __construct(string $message = null, \Exception $previous = null, int $code = 0, array $headers = array())
{
- parent::__construct(422, $message, $previous, array(), $code);
+ parent::__construct(422, $message, $previous, $headers, $code);
}
}
diff --git a/vendor/symfony/http-kernel/Exception/UnsupportedMediaTypeHttpException.php b/vendor/symfony/http-kernel/Exception/UnsupportedMediaTypeHttpException.php
index 6913504e83..ed6861154a 100644
--- a/vendor/symfony/http-kernel/Exception/UnsupportedMediaTypeHttpException.php
+++ b/vendor/symfony/http-kernel/Exception/UnsupportedMediaTypeHttpException.php
@@ -20,9 +20,10 @@ class UnsupportedMediaTypeHttpException extends HttpException
* @param string $message The internal exception message
* @param \Exception $previous The previous exception
* @param int $code The internal exception code
+ * @param array $headers
*/
- public function __construct($message = null, \Exception $previous = null, $code = 0)
+ public function __construct(string $message = null, \Exception $previous = null, int $code = 0, array $headers = array())
{
- parent::__construct(415, $message, $previous, array(), $code);
+ parent::__construct(415, $message, $previous, $headers, $code);
}
}
diff --git a/vendor/symfony/http-kernel/Fragment/AbstractSurrogateFragmentRenderer.php b/vendor/symfony/http-kernel/Fragment/AbstractSurrogateFragmentRenderer.php
index 3c8934ff89..6ab6ec1fd0 100644
--- a/vendor/symfony/http-kernel/Fragment/AbstractSurrogateFragmentRenderer.php
+++ b/vendor/symfony/http-kernel/Fragment/AbstractSurrogateFragmentRenderer.php
@@ -63,7 +63,7 @@ abstract class AbstractSurrogateFragmentRenderer extends RoutableFragmentRendere
{
if (!$this->surrogate || !$this->surrogate->hasSurrogateCapability($request)) {
if ($uri instanceof ControllerReference && $this->containsNonScalars($uri->attributes)) {
- @trigger_error('Passing non-scalar values as part of URI attributes to the ESI and SSI rendering strategies is deprecated since Symfony 3.1, and will be removed in 4.0. Use a different rendering strategy or pass scalar values.', E_USER_DEPRECATED);
+ throw new \InvalidArgumentException('Passing non-scalar values as part of URI attributes to the ESI and SSI rendering strategies is not supported. Use a different rendering strategy or pass scalar values.');
}
return $this->inlineStrategy->render($uri, $request, $options);
@@ -83,7 +83,7 @@ abstract class AbstractSurrogateFragmentRenderer extends RoutableFragmentRendere
return new Response($tag);
}
- private function generateSignedFragmentUri($uri, Request $request)
+ private function generateSignedFragmentUri($uri, Request $request): string
{
if (null === $this->signer) {
throw new \LogicException('You must use a URI when using the ESI rendering strategy or set a URL signer.');
@@ -95,7 +95,7 @@ abstract class AbstractSurrogateFragmentRenderer extends RoutableFragmentRendere
return substr($fragmentUri, \strlen($request->getSchemeAndHttpHost()));
}
- private function containsNonScalars(array $values)
+ private function containsNonScalars(array $values): bool
{
foreach ($values as $value) {
if (\is_array($value)) {
diff --git a/vendor/symfony/http-kernel/Fragment/FragmentHandler.php b/vendor/symfony/http-kernel/Fragment/FragmentHandler.php
index f11db73dc9..0c31826b27 100644
--- a/vendor/symfony/http-kernel/Fragment/FragmentHandler.php
+++ b/vendor/symfony/http-kernel/Fragment/FragmentHandler.php
@@ -37,7 +37,7 @@ class FragmentHandler
* @param FragmentRendererInterface[] $renderers An array of FragmentRendererInterface instances
* @param bool $debug Whether the debug mode is enabled or not
*/
- public function __construct(RequestStack $requestStack, array $renderers = array(), $debug = false)
+ public function __construct(RequestStack $requestStack, array $renderers = array(), bool $debug = false)
{
$this->requestStack = $requestStack;
foreach ($renderers as $renderer) {
diff --git a/vendor/symfony/http-kernel/Fragment/HIncludeFragmentRenderer.php b/vendor/symfony/http-kernel/Fragment/HIncludeFragmentRenderer.php
index f7150c1979..3ee0cfa264 100644
--- a/vendor/symfony/http-kernel/Fragment/HIncludeFragmentRenderer.php
+++ b/vendor/symfony/http-kernel/Fragment/HIncludeFragmentRenderer.php
@@ -38,7 +38,7 @@ class HIncludeFragmentRenderer extends RoutableFragmentRenderer
* @param string $globalDefaultTemplate The global default content (it can be a template name or the content)
* @param string $charset
*/
- public function __construct($templating = null, UriSigner $signer = null, $globalDefaultTemplate = null, $charset = 'utf-8')
+ public function __construct($templating = null, UriSigner $signer = null, string $globalDefaultTemplate = null, string $charset = 'utf-8')
{
$this->setTemplating($templating);
$this->globalDefaultTemplate = $globalDefaultTemplate;
@@ -121,12 +121,7 @@ class HIncludeFragmentRenderer extends RoutableFragmentRenderer
return new Response(sprintf('<hx:include src="%s"%s>%s</hx:include>', $uri, $renderedAttributes, $content));
}
- /**
- * @param string $template
- *
- * @return bool
- */
- private function templateExists($template)
+ private function templateExists(string $template): bool
{
if ($this->templating instanceof EngineInterface) {
try {
diff --git a/vendor/symfony/http-kernel/Fragment/InlineFragmentRenderer.php b/vendor/symfony/http-kernel/Fragment/InlineFragmentRenderer.php
index 13fc335624..ecf12f2182 100644
--- a/vendor/symfony/http-kernel/Fragment/InlineFragmentRenderer.php
+++ b/vendor/symfony/http-kernel/Fragment/InlineFragmentRenderer.php
@@ -118,9 +118,12 @@ class InlineFragmentRenderer extends RoutableFragmentRenderer
$subRequest->headers->set('Surrogate-Capability', $request->headers->get('Surrogate-Capability'));
}
- if ($session = $request->getSession()) {
- $subRequest->setSession($session);
+ static $setSession;
+
+ if (null === $setSession) {
+ $setSession = \Closure::bind(function ($subRequest, $request) { $subRequest->session = $request->session; }, null, Request::class);
}
+ $setSession($subRequest, $request);
if ($request->get('_format')) {
$subRequest->attributes->set('_format', $request->get('_format'));
diff --git a/vendor/symfony/http-kernel/HttpCache/HttpCache.php b/vendor/symfony/http-kernel/HttpCache/HttpCache.php
index 44405209d4..6980745add 100644
--- a/vendor/symfony/http-kernel/HttpCache/HttpCache.php
+++ b/vendor/symfony/http-kernel/HttpCache/HttpCache.php
@@ -93,7 +93,7 @@ class HttpCache implements HttpKernelInterface, TerminableInterface
/**
* Gets the current store.
*
- * @return StoreInterface $store A StoreInterface instance
+ * @return StoreInterface A StoreInterface instance
*/
public function getStore()
{
@@ -634,23 +634,16 @@ class HttpCache implements HttpKernelInterface, TerminableInterface
/**
* Records that an event took place.
- *
- * @param Request $request A Request instance
- * @param string $event The event name
*/
- private function record(Request $request, $event)
+ private function record(Request $request, string $event)
{
$this->traces[$this->getTraceKey($request)][] = $event;
}
/**
* Calculates the key we use in the "trace" array for a given request.
- *
- * @param Request $request
- *
- * @return string
*/
- private function getTraceKey(Request $request)
+ private function getTraceKey(Request $request): string
{
$path = $request->getPathInfo();
if ($qs = $request->getQueryString()) {
@@ -663,12 +656,8 @@ class HttpCache implements HttpKernelInterface, TerminableInterface
/**
* Checks whether the given (cached) response may be served as "stale" when a revalidation
* is currently in progress.
- *
- * @param Response $entry
- *
- * @return bool true when the stale response may be served, false otherwise
*/
- private function mayServeStaleWhileRevalidate(Response $entry)
+ private function mayServeStaleWhileRevalidate(Response $entry): bool
{
$timeout = $entry->headers->getCacheControlDirective('stale-while-revalidate');
@@ -681,12 +670,8 @@ class HttpCache implements HttpKernelInterface, TerminableInterface
/**
* Waits for the store to release a locked entry.
- *
- * @param Request $request The request to wait for
- *
- * @return bool true if the lock was released before the internal timeout was hit; false if the wait timeout was exceeded
*/
- private function waitForLock(Request $request)
+ private function waitForLock(Request $request): bool
{
$wait = 0;
while ($this->store->isLocked($request) && $wait < 100) {
diff --git a/vendor/symfony/http-kernel/HttpCache/Store.php b/vendor/symfony/http-kernel/HttpCache/Store.php
index 990091d065..925ca96fd4 100644
--- a/vendor/symfony/http-kernel/HttpCache/Store.php
+++ b/vendor/symfony/http-kernel/HttpCache/Store.php
@@ -29,11 +29,9 @@ class Store implements StoreInterface
private $locks;
/**
- * @param string $root The path to the cache directory
- *
* @throws \RuntimeException
*/
- public function __construct($root)
+ public function __construct(string $root)
{
$this->root = $root;
if (!file_exists($this->root) && !@mkdir($this->root, 0777, true) && !is_dir($this->root)) {
diff --git a/vendor/symfony/http-kernel/HttpCache/SubRequestHandler.php b/vendor/symfony/http-kernel/HttpCache/SubRequestHandler.php
index 9649072c16..84d7a84e79 100644
--- a/vendor/symfony/http-kernel/HttpCache/SubRequestHandler.php
+++ b/vendor/symfony/http-kernel/HttpCache/SubRequestHandler.php
@@ -23,42 +23,25 @@ use Symfony\Component\HttpKernel\HttpKernelInterface;
*/
class SubRequestHandler
{
- /**
- * @return Response
- */
- public static function handle(HttpKernelInterface $kernel, Request $request, $type, $catch)
+ public static function handle(HttpKernelInterface $kernel, Request $request, $type, $catch): Response
{
// save global state related to trusted headers and proxies
$trustedProxies = Request::getTrustedProxies();
$trustedHeaderSet = Request::getTrustedHeaderSet();
- if (\method_exists(Request::class, 'getTrustedHeaderName')) {
- Request::setTrustedProxies($trustedProxies, -1);
- $trustedHeaders = array(
- Request::HEADER_FORWARDED => Request::getTrustedHeaderName(Request::HEADER_FORWARDED, false),
- Request::HEADER_X_FORWARDED_FOR => Request::getTrustedHeaderName(Request::HEADER_X_FORWARDED_FOR, false),
- Request::HEADER_X_FORWARDED_HOST => Request::getTrustedHeaderName(Request::HEADER_X_FORWARDED_HOST, false),
- Request::HEADER_X_FORWARDED_PROTO => Request::getTrustedHeaderName(Request::HEADER_X_FORWARDED_PROTO, false),
- Request::HEADER_X_FORWARDED_PORT => Request::getTrustedHeaderName(Request::HEADER_X_FORWARDED_PORT, false),
- );
- Request::setTrustedProxies($trustedProxies, $trustedHeaderSet);
- } else {
- $trustedHeaders = array(
- Request::HEADER_FORWARDED => 'FORWARDED',
- Request::HEADER_X_FORWARDED_FOR => 'X_FORWARDED_FOR',
- Request::HEADER_X_FORWARDED_HOST => 'X_FORWARDED_HOST',
- Request::HEADER_X_FORWARDED_PROTO => 'X_FORWARDED_PROTO',
- Request::HEADER_X_FORWARDED_PORT => 'X_FORWARDED_PORT',
- );
- }
// remove untrusted values
$remoteAddr = $request->server->get('REMOTE_ADDR');
if (!IpUtils::checkIp($remoteAddr, $trustedProxies)) {
- foreach ($trustedHeaders as $key => $name) {
- if ($trustedHeaderSet & $key) {
- $request->headers->remove($name);
- $request->server->remove('HTTP_'.strtoupper(str_replace('-', '_', $name)));
- }
+ $trustedHeaders = array(
+ 'FORWARDED' => $trustedHeaderSet & Request::HEADER_FORWARDED,
+ 'X_FORWARDED_FOR' => $trustedHeaderSet & Request::HEADER_X_FORWARDED_FOR,
+ 'X_FORWARDED_HOST' => $trustedHeaderSet & Request::HEADER_X_FORWARDED_HOST,
+ 'X_FORWARDED_PROTO' => $trustedHeaderSet & Request::HEADER_X_FORWARDED_PROTO,
+ 'X_FORWARDED_PORT' => $trustedHeaderSet & Request::HEADER_X_FORWARDED_PORT,
+ );
+ foreach (array_filter($trustedHeaders) as $name => $key) {
+ $request->headers->remove($name);
+ $request->server->remove('HTTP_'.$name);
}
}
@@ -77,16 +60,16 @@ class SubRequestHandler
// set trusted values, reusing as much as possible the global trusted settings
if (Request::HEADER_FORWARDED & $trustedHeaderSet) {
$trustedValues[0] .= sprintf(';host="%s";proto=%s', $request->getHttpHost(), $request->getScheme());
- $request->headers->set($name = $trustedHeaders[Request::HEADER_FORWARDED], $v = implode(', ', $trustedValues));
- $request->server->set('HTTP_'.strtoupper(str_replace('-', '_', $name)), $v);
+ $request->headers->set('Forwarded', $v = implode(', ', $trustedValues));
+ $request->server->set('HTTP_FORWARDED', $v);
}
if (Request::HEADER_X_FORWARDED_FOR & $trustedHeaderSet) {
- $request->headers->set($name = $trustedHeaders[Request::HEADER_X_FORWARDED_FOR], $v = implode(', ', $trustedIps));
- $request->server->set('HTTP_'.strtoupper(str_replace('-', '_', $name)), $v);
+ $request->headers->set('X-Forwarded-For', $v = implode(', ', $trustedIps));
+ $request->server->set('HTTP_X_FORWARDED_FOR', $v);
} elseif (!(Request::HEADER_FORWARDED & $trustedHeaderSet)) {
Request::setTrustedProxies($trustedProxies, $trustedHeaderSet | Request::HEADER_X_FORWARDED_FOR);
- $request->headers->set($name = $trustedHeaders[Request::HEADER_X_FORWARDED_FOR], $v = implode(', ', $trustedIps));
- $request->server->set('HTTP_'.strtoupper(str_replace('-', '_', $name)), $v);
+ $request->headers->set('X-Forwarded-For', $v = implode(', ', $trustedIps));
+ $request->server->set('HTTP_X_FORWARDED_FOR', $v);
}
// fix the client IP address by setting it to 127.0.0.1,
diff --git a/vendor/symfony/http-kernel/HttpKernel.php b/vendor/symfony/http-kernel/HttpKernel.php
index 36c673093b..25a0423854 100644
--- a/vendor/symfony/http-kernel/HttpKernel.php
+++ b/vendor/symfony/http-kernel/HttpKernel.php
@@ -28,6 +28,7 @@ use Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent;
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
use Symfony\Component\HttpKernel\Event\PostResponseEvent;
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
+use Symfony\Component\HttpKernel\Exception\ControllerDoesNotReturnResponseException;
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
@@ -51,9 +52,7 @@ class HttpKernel implements HttpKernelInterface, TerminableInterface
$this->argumentResolver = $argumentResolver;
if (null === $this->argumentResolver) {
- @trigger_error(sprintf('As of 3.1 an %s is used to resolve arguments. In 4.0 the $argumentResolver becomes the %s if no other is provided instead of using the $resolver argument.', ArgumentResolverInterface::class, ArgumentResolver::class), E_USER_DEPRECATED);
- // fallback in case of deprecations
- $this->argumentResolver = $resolver;
+ $this->argumentResolver = new ArgumentResolver();
}
}
@@ -118,7 +117,7 @@ class HttpKernel implements HttpKernelInterface, TerminableInterface
* @throws \LogicException If one of the listener does not behave as expected
* @throws NotFoundHttpException When controller cannot be found
*/
- private function handleRaw(Request $request, $type = self::MASTER_REQUEST)
+ private function handleRaw(Request $request, int $type = self::MASTER_REQUEST)
{
$this->requestStack->push($request);
@@ -148,7 +147,7 @@ class HttpKernel implements HttpKernelInterface, TerminableInterface
$arguments = $event->getArguments();
// call controller
- $response = \call_user_func_array($controller, $arguments);
+ $response = $controller(...$arguments);
// view
if (!$response instanceof Response) {
@@ -157,16 +156,15 @@ class HttpKernel implements HttpKernelInterface, TerminableInterface
if ($event->hasResponse()) {
$response = $event->getResponse();
- }
-
- if (!$response instanceof Response) {
- $msg = sprintf('The controller must return a response (%s given).', $this->varToString($response));
+ } else {
+ $msg = sprintf('The controller must return a "Symfony\Component\HttpFoundation\Response" object but it returned %s.', $this->varToString($response));
// the user may have forgotten to return something
if (null === $response) {
$msg .= ' Did you forget to add a return statement somewhere in your controller?';
}
- throw new \LogicException($msg);
+
+ throw new ControllerDoesNotReturnResponseException($msg, $controller, __FILE__, __LINE__ - 17);
}
}
@@ -184,7 +182,7 @@ class HttpKernel implements HttpKernelInterface, TerminableInterface
*
* @throws \RuntimeException if the passed object is not a Response instance
*/
- private function filterResponse(Response $response, Request $request, $type)
+ private function filterResponse(Response $response, Request $request, int $type)
{
$event = new FilterResponseEvent($this, $request, $type, $response);
@@ -201,11 +199,8 @@ class HttpKernel implements HttpKernelInterface, TerminableInterface
* Note that the order of the operations is important here, otherwise
* operations such as {@link RequestStack::getParentRequest()} can lead to
* weird results.
- *
- * @param Request $request
- * @param int $type
*/
- private function finishRequest(Request $request, $type)
+ private function finishRequest(Request $request, int $type)
{
$this->dispatcher->dispatch(KernelEvents::FINISH_REQUEST, new FinishRequestEvent($this, $request, $type));
$this->requestStack->pop();
@@ -216,13 +211,11 @@ class HttpKernel implements HttpKernelInterface, TerminableInterface
*
* @param \Exception $e An \Exception instance
* @param Request $request A Request instance
- * @param int $type The type of the request
- *
- * @return Response A Response instance
+ * @param int $type The type of the request (one of HttpKernelInterface::MASTER_REQUEST or HttpKernelInterface::SUB_REQUEST)
*
* @throws \Exception
*/
- private function handleException(\Exception $e, $request, $type)
+ private function handleException(\Exception $e, Request $request, int $type): Response
{
$event = new GetResponseForExceptionEvent($this, $request, $type, $e);
$this->dispatcher->dispatch(KernelEvents::EXCEPTION, $event);
@@ -239,13 +232,7 @@ class HttpKernel implements HttpKernelInterface, TerminableInterface
$response = $event->getResponse();
// the developer asked for a specific status code
- if ($response->headers->has('X-Status-Code')) {
- @trigger_error(sprintf('Using the X-Status-Code header is deprecated since Symfony 3.3 and will be removed in 4.0. Use %s::allowCustomResponseCode() instead.', GetResponseForExceptionEvent::class), E_USER_DEPRECATED);
-
- $response->setStatusCode($response->headers->get('X-Status-Code'));
-
- $response->headers->remove('X-Status-Code');
- } elseif (!$event->isAllowingCustomResponseCode() && !$response->isClientError() && !$response->isServerError() && !$response->isRedirect()) {
+ if (!$event->isAllowingCustomResponseCode() && !$response->isClientError() && !$response->isServerError() && !$response->isRedirect()) {
// ensure that we actually have an error response
if ($e instanceof HttpExceptionInterface) {
// keep the HTTP status code and headers
@@ -263,23 +250,23 @@ class HttpKernel implements HttpKernelInterface, TerminableInterface
}
}
- private function varToString($var)
+ private function varToString($var): string
{
if (\is_object($var)) {
- return sprintf('Object(%s)', \get_class($var));
+ return sprintf('an object of type %s', \get_class($var));
}
if (\is_array($var)) {
$a = array();
foreach ($var as $k => $v) {
- $a[] = sprintf('%s => %s', $k, $this->varToString($v));
+ $a[] = sprintf('%s => ...', $k);
}
- return sprintf('Array(%s)', implode(', ', $a));
+ return sprintf('an array ([%s])', mb_substr(implode(', ', $a), 0, 255));
}
if (\is_resource($var)) {
- return sprintf('Resource(%s)', get_resource_type($var));
+ return sprintf('a resource (%s)', get_resource_type($var));
}
if (null === $var) {
@@ -287,11 +274,19 @@ class HttpKernel implements HttpKernelInterface, TerminableInterface
}
if (false === $var) {
- return 'false';
+ return 'a boolean value (false)';
}
if (true === $var) {
- return 'true';
+ return 'a boolean value (true)';
+ }
+
+ if (\is_string($var)) {
+ return sprintf('a string ("%s%s")', mb_substr($var, 0, 255), mb_strlen($var) > 255 ? '...' : '');
+ }
+
+ if (is_numeric($var)) {
+ return sprintf('a number (%s)', (string) $var);
}
return (string) $var;
diff --git a/vendor/symfony/http-kernel/Kernel.php b/vendor/symfony/http-kernel/Kernel.php
index f0137c6842..225a047d14 100644
--- a/vendor/symfony/http-kernel/Kernel.php
+++ b/vendor/symfony/http-kernel/Kernel.php
@@ -13,10 +13,10 @@ namespace Symfony\Component\HttpKernel;
use Symfony\Bridge\ProxyManager\LazyProxy\Instantiator\RuntimeInstantiator;
use Symfony\Bridge\ProxyManager\LazyProxy\PhpDumper\ProxyDumper;
-use Symfony\Component\ClassLoader\ClassCollectionLoader;
use Symfony\Component\Config\ConfigCache;
use Symfony\Component\Config\Loader\DelegatingLoader;
use Symfony\Component\Config\Loader\LoaderResolver;
+use Symfony\Component\Debug\DebugClassLoader;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\Compiler\PassConfig;
use Symfony\Component\DependencyInjection\ContainerBuilder;
@@ -33,7 +33,6 @@ use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Bundle\BundleInterface;
-use Symfony\Component\HttpKernel\Config\EnvParametersResource;
use Symfony\Component\HttpKernel\Config\FileLocator;
use Symfony\Component\HttpKernel\DependencyInjection\AddAnnotatedClassesToCachePass;
use Symfony\Component\HttpKernel\DependencyInjection\MergeExtensionConfigurationPass;
@@ -43,6 +42,9 @@ use Symfony\Component\HttpKernel\DependencyInjection\MergeExtensionConfiguration
*
* It manages an environment made of bundles.
*
+ * Environment names must always start with a letter and
+ * they must only contain letters and numbers.
+ *
* @author Fabien Potencier <fabien@symfony.com>
*/
abstract class Kernel implements KernelInterface, RebootableInterface, TerminableInterface
@@ -52,41 +54,41 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl
*/
protected $bundles = array();
- protected $bundleMap;
protected $container;
+ /**
+ * @deprecated since Symfony 4.2
+ */
protected $rootDir;
protected $environment;
protected $debug;
protected $booted = false;
+ /**
+ * @deprecated since Symfony 4.2
+ */
protected $name;
protected $startTime;
- protected $loadClassCache;
private $projectDir;
private $warmupDir;
private $requestStackSize = 0;
private $resetServices = false;
- const VERSION = '3.4.18';
- const VERSION_ID = 30418;
- const MAJOR_VERSION = 3;
- const MINOR_VERSION = 4;
- const RELEASE_VERSION = 18;
+ const VERSION = '4.2.0';
+ const VERSION_ID = 40200;
+ const MAJOR_VERSION = 4;
+ const MINOR_VERSION = 2;
+ const RELEASE_VERSION = 0;
const EXTRA_VERSION = '';
- const END_OF_MAINTENANCE = '11/2020';
- const END_OF_LIFE = '11/2021';
+ const END_OF_MAINTENANCE = '07/2019';
+ const END_OF_LIFE = '01/2020';
- /**
- * @param string $environment The environment
- * @param bool $debug Whether to enable debugging or not
- */
- public function __construct($environment, $debug)
+ public function __construct(string $environment, bool $debug)
{
$this->environment = $environment;
- $this->debug = (bool) $debug;
- $this->rootDir = $this->getRootDir();
- $this->name = $this->getName();
+ $this->debug = $debug;
+ $this->rootDir = $this->getRootDir(false);
+ $this->name = $this->getName(false);
}
public function __clone()
@@ -124,10 +126,6 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl
$_SERVER['SHELL_VERBOSITY'] = 3;
}
- if ($this->loadClassCache) {
- $this->doLoadClassCache($this->loadClassCache[0], $this->loadClassCache[1]);
- }
-
// init bundles
$this->initializeBundles();
@@ -224,26 +222,16 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl
/**
* {@inheritdoc}
*/
- public function getBundle($name, $first = true/*, $noDeprecation = false */)
+ public function getBundle($name)
{
- $noDeprecation = false;
- if (\func_num_args() >= 3) {
- $noDeprecation = func_get_arg(2);
- }
-
- if (!$first && !$noDeprecation) {
- @trigger_error(sprintf('Passing "false" as the second argument to "%s()" is deprecated as of 3.4 and will be removed in 4.0.', __METHOD__), E_USER_DEPRECATED);
- }
+ if (!isset($this->bundles[$name])) {
+ $class = \get_class($this);
+ $class = 'c' === $class[0] && 0 === strpos($class, "class@anonymous\0") ? get_parent_class($class).'@anonymous' : $class;
- if (!isset($this->bundleMap[$name])) {
- throw new \InvalidArgumentException(sprintf('Bundle "%s" does not exist or it is not enabled. Maybe you forgot to add it in the registerBundles() method of your %s.php file?', $name, \get_class($this)));
+ throw new \InvalidArgumentException(sprintf('Bundle "%s" does not exist or it is not enabled. Maybe you forgot to add it in the registerBundles() method of your %s.php file?', $name, $class));
}
- if (true === $first) {
- return $this->bundleMap[$name][0];
- }
-
- return $this->bundleMap[$name];
+ return $this->bundles[$name];
}
/**
@@ -269,29 +257,18 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl
$isResource = 0 === strpos($path, 'Resources') && null !== $dir;
$overridePath = substr($path, 9);
- $resourceBundle = null;
- $bundles = $this->getBundle($bundleName, false, true);
+ $bundle = $this->getBundle($bundleName);
$files = array();
- foreach ($bundles as $bundle) {
- if ($isResource && file_exists($file = $dir.'/'.$bundle->getName().$overridePath)) {
- if (null !== $resourceBundle) {
- throw new \RuntimeException(sprintf('"%s" resource is hidden by a resource from the "%s" derived bundle. Create a "%s" file to override the bundle resource.', $file, $resourceBundle, $dir.'/'.$bundles[0]->getName().$overridePath));
- }
-
- if ($first) {
- return $file;
- }
- $files[] = $file;
- }
+ if ($isResource && file_exists($file = $dir.'/'.$bundle->getName().$overridePath)) {
+ $files[] = $file;
+ }
- if (file_exists($file = $bundle->getPath().'/'.$path)) {
- if ($first && !$isResource) {
- return $file;
- }
- $files[] = $file;
- $resourceBundle = $bundle->getName();
+ if (file_exists($file = $bundle->getPath().'/'.$path)) {
+ if ($first && !$isResource) {
+ return $file;
}
+ $files[] = $file;
}
if (\count($files) > 0) {
@@ -303,9 +280,15 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl
/**
* {@inheritdoc}
+ *
+ * @deprecated since Symfony 4.2
*/
- public function getName()
+ public function getName(/* $triggerDeprecation = true */)
{
+ if (0 === \func_num_args() || func_get_arg(0)) {
+ @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.2.', __METHOD__), E_USER_DEPRECATED);
+ }
+
if (null === $this->name) {
$this->name = preg_replace('/[^a-zA-Z0-9_]+/', '', basename($this->rootDir));
if (ctype_digit($this->name[0])) {
@@ -334,9 +317,15 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl
/**
* {@inheritdoc}
+ *
+ * @deprecated since Symfony 4.2, use getProjectDir() instead
*/
- public function getRootDir()
+ public function getRootDir(/* $triggerDeprecation = true */)
{
+ if (0 === \func_num_args() || func_get_arg(0)) {
+ @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.2, use getProjectDir() instead.', __METHOD__), E_USER_DEPRECATED);
+ }
+
if (null === $this->rootDir) {
$r = new \ReflectionObject($this);
$this->rootDir = \dirname($r->getFileName());
@@ -376,43 +365,6 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl
}
/**
- * Loads the PHP class cache.
- *
- * This methods only registers the fact that you want to load the cache classes.
- * The cache will actually only be loaded when the Kernel is booted.
- *
- * That optimization is mainly useful when using the HttpCache class in which
- * case the class cache is not loaded if the Response is in the cache.
- *
- * @param string $name The cache name prefix
- * @param string $extension File extension of the resulting file
- *
- * @deprecated since version 3.3, to be removed in 4.0. The class cache is not needed anymore when using PHP 7.0.
- */
- public function loadClassCache($name = 'classes', $extension = '.php')
- {
- if (\PHP_VERSION_ID >= 70000) {
- @trigger_error(__METHOD__.'() is deprecated since Symfony 3.3, to be removed in 4.0.', E_USER_DEPRECATED);
- }
-
- $this->loadClassCache = array($name, $extension);
- }
-
- /**
- * @internal
- *
- * @deprecated since version 3.3, to be removed in 4.0.
- */
- public function setClassCache(array $classes)
- {
- if (\PHP_VERSION_ID >= 70000) {
- @trigger_error(__METHOD__.'() is deprecated since Symfony 3.3, to be removed in 4.0.', E_USER_DEPRECATED);
- }
-
- file_put_contents(($this->warmupDir ?: $this->getCacheDir()).'/classes.map', sprintf('<?php return %s;', var_export($classes, true)));
- }
-
- /**
* @internal
*/
public function setAnnotatedClassCache(array $annotatedClasses)
@@ -433,7 +385,7 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl
*/
public function getCacheDir()
{
- return $this->rootDir.'/cache/'.$this->environment;
+ return $this->getProjectDir().'/var/cache/'.$this->environment;
}
/**
@@ -441,7 +393,7 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl
*/
public function getLogDir()
{
- return $this->rootDir.'/logs';
+ return $this->getProjectDir().'/var/log';
}
/**
@@ -453,83 +405,28 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl
}
/**
- * @deprecated since version 3.3, to be removed in 4.0.
+ * Gets the patterns defining the classes to parse and cache for annotations.
*/
- protected function doLoadClassCache($name, $extension)
+ public function getAnnotatedClassesToCompile(): array
{
- if (\PHP_VERSION_ID >= 70000) {
- @trigger_error(__METHOD__.'() is deprecated since Symfony 3.3, to be removed in 4.0.', E_USER_DEPRECATED);
- }
- $cacheDir = $this->warmupDir ?: $this->getCacheDir();
-
- if (!$this->booted && is_file($cacheDir.'/classes.map')) {
- ClassCollectionLoader::load(include($cacheDir.'/classes.map'), $cacheDir, $name, $this->debug, false, $extension);
- }
+ return array();
}
/**
- * Initializes the data structures related to the bundle management.
- *
- * - the bundles property maps a bundle name to the bundle instance,
- * - the bundleMap property maps a bundle name to the bundle inheritance hierarchy (most derived bundle first).
+ * Initializes bundles.
*
* @throws \LogicException if two bundles share a common name
- * @throws \LogicException if a bundle tries to extend a non-registered bundle
- * @throws \LogicException if a bundle tries to extend itself
- * @throws \LogicException if two bundles extend the same ancestor
*/
protected function initializeBundles()
{
// init bundles
$this->bundles = array();
- $topMostBundles = array();
- $directChildren = array();
-
foreach ($this->registerBundles() as $bundle) {
$name = $bundle->getName();
if (isset($this->bundles[$name])) {
throw new \LogicException(sprintf('Trying to register two bundles with the same name "%s"', $name));
}
$this->bundles[$name] = $bundle;
-
- if ($parentName = $bundle->getParent()) {
- @trigger_error('Bundle inheritance is deprecated as of 3.4 and will be removed in 4.0.', E_USER_DEPRECATED);
-
- if (isset($directChildren[$parentName])) {
- throw new \LogicException(sprintf('Bundle "%s" is directly extended by two bundles "%s" and "%s".', $parentName, $name, $directChildren[$parentName]));
- }
- if ($parentName == $name) {
- throw new \LogicException(sprintf('Bundle "%s" can not extend itself.', $name));
- }
- $directChildren[$parentName] = $name;
- } else {
- $topMostBundles[$name] = $bundle;
- }
- }
-
- // look for orphans
- if (!empty($directChildren) && \count($diff = array_diff_key($directChildren, $this->bundles))) {
- $diff = array_keys($diff);
-
- throw new \LogicException(sprintf('Bundle "%s" extends bundle "%s", which is not registered.', $directChildren[$diff[0]], $diff[0]));
- }
-
- // inheritance
- $this->bundleMap = array();
- foreach ($topMostBundles as $name => $bundle) {
- $bundleMap = array($bundle);
- $hierarchy = array($name);
-
- while (isset($directChildren[$name])) {
- $name = $directChildren[$name];
- array_unshift($bundleMap, $this->bundles[$name]);
- $hierarchy[] = $name;
- }
-
- foreach ($hierarchy as $hierarchyBundle) {
- $this->bundleMap[$hierarchyBundle] = $bundleMap;
- array_pop($bundleMap);
- }
}
}
@@ -549,7 +446,10 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl
*/
protected function getContainerClass()
{
- return $this->name.ucfirst($this->environment).($this->debug ? 'Debug' : '').'ProjectContainer';
+ $class = \get_class($this);
+ $class = 'c' === $class[0] && 0 === strpos($class, "class@anonymous\0") ? get_parent_class($class).ContainerBuilder::hash($class) : $class;
+
+ return $this->name.str_replace('\\', '_', $class).ucfirst($this->environment).($this->debug ? 'Debug' : '').'Container';
}
/**
@@ -611,7 +511,7 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl
return;
}
- $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 3);
+ $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 5);
// Clean the trace by removing first frames added by the error handler itself.
for ($i = 0; isset($backtrace[$i]); ++$i) {
if (isset($backtrace[$i]['file'], $backtrace[$i]['line']) && $backtrace[$i]['line'] === $line && $backtrace[$i]['file'] === $file) {
@@ -619,13 +519,20 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl
break;
}
}
+ // Remove frames added by DebugClassLoader.
+ for ($i = \count($backtrace) - 2; 0 < $i; --$i) {
+ if (DebugClassLoader::class === ($backtrace[$i]['class'] ?? null)) {
+ $backtrace = array($backtrace[$i + 1]);
+ break;
+ }
+ }
$collectedLogs[$message] = array(
'type' => $type,
'message' => $message,
'file' => $file,
'line' => $line,
- 'trace' => $backtrace,
+ 'trace' => array($backtrace[0]),
'count' => 1,
);
});
@@ -694,57 +601,33 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl
foreach ($this->bundles as $name => $bundle) {
$bundles[$name] = \get_class($bundle);
$bundlesMetadata[$name] = array(
- 'parent' => $bundle->getParent(),
'path' => $bundle->getPath(),
'namespace' => $bundle->getNamespace(),
);
}
- return array_merge(
- array(
- 'kernel.root_dir' => realpath($this->rootDir) ?: $this->rootDir,
- 'kernel.project_dir' => realpath($this->getProjectDir()) ?: $this->getProjectDir(),
- 'kernel.environment' => $this->environment,
- 'kernel.debug' => $this->debug,
- 'kernel.name' => $this->name,
- 'kernel.cache_dir' => realpath($cacheDir = $this->warmupDir ?: $this->getCacheDir()) ?: $cacheDir,
- 'kernel.logs_dir' => realpath($this->getLogDir()) ?: $this->getLogDir(),
- 'kernel.bundles' => $bundles,
- 'kernel.bundles_metadata' => $bundlesMetadata,
- 'kernel.charset' => $this->getCharset(),
- 'kernel.container_class' => $this->getContainerClass(),
- ),
- $this->getEnvParameters(false)
+ return array(
+ /*
+ * @deprecated since Symfony 4.2, use kernel.project_dir instead
+ */
+ 'kernel.root_dir' => realpath($this->rootDir) ?: $this->rootDir,
+ 'kernel.project_dir' => realpath($this->getProjectDir()) ?: $this->getProjectDir(),
+ 'kernel.environment' => $this->environment,
+ 'kernel.debug' => $this->debug,
+ /*
+ * @deprecated since Symfony 4.2
+ */
+ 'kernel.name' => $this->name,
+ 'kernel.cache_dir' => realpath($cacheDir = $this->warmupDir ?: $this->getCacheDir()) ?: $cacheDir,
+ 'kernel.logs_dir' => realpath($this->getLogDir()) ?: $this->getLogDir(),
+ 'kernel.bundles' => $bundles,
+ 'kernel.bundles_metadata' => $bundlesMetadata,
+ 'kernel.charset' => $this->getCharset(),
+ 'kernel.container_class' => $this->getContainerClass(),
);
}
/**
- * Gets the environment parameters.
- *
- * Only the parameters starting with "SYMFONY__" are considered.
- *
- * @return array An array of parameters
- *
- * @deprecated since version 3.3, to be removed in 4.0
- */
- protected function getEnvParameters()
- {
- if (0 === \func_num_args() || func_get_arg(0)) {
- @trigger_error(sprintf('The "%s()" method is deprecated as of 3.3 and will be removed in 4.0. Use the %%env()%% syntax to get the value of any environment variable from configuration files instead.', __METHOD__), E_USER_DEPRECATED);
- }
-
- $parameters = array();
- foreach ($_SERVER as $key => $value) {
- if (0 === strpos($key, 'SYMFONY__')) {
- @trigger_error(sprintf('The support of special environment variables that start with SYMFONY__ (such as "%s") is deprecated as of 3.3 and will be removed in 4.0. Use the %%env()%% syntax instead to get the value of environment variables in configuration files.', $key), E_USER_DEPRECATED);
- $parameters[strtolower(str_replace('__', '.', substr($key, 9)))] = $value;
- }
- }
-
- return $parameters;
- }
-
- /**
* Builds the service container.
*
* @return ContainerBuilder The compiled service container
@@ -772,7 +655,6 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl
}
$container->addCompilerPass(new AddAnnotatedClassesToCachePass($this));
- $container->addResource(new EnvParametersResource('SYMFONY__'));
return $container;
}
@@ -850,7 +732,6 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl
'file' => $cache->getPath(),
'as_files' => true,
'debug' => $this->debug,
- 'inline_class_loader_parameter' => \PHP_VERSION_ID >= 70000 && !$this->loadClassCache && !class_exists(ClassCollectionLoader::class, false) ? 'container.dumper.inline_class_loader' : null,
'build_time' => $container->hasParameter('kernel.container_build_time') ? $container->getParameter('kernel.container_build_time') : time(),
));
@@ -942,11 +823,9 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl
$output .= $rawChunk;
- if (\PHP_VERSION_ID >= 70000) {
- // PHP 7 memory manager will not release after token_get_all(), see https://bugs.php.net/70098
- unset($tokens, $rawChunk);
- gc_mem_caches();
- }
+ // PHP 7 memory manager will not release after token_get_all(), see https://bugs.php.net/70098
+ unset($tokens, $rawChunk);
+ gc_mem_caches();
return $output;
}
@@ -958,11 +837,7 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl
public function unserialize($data)
{
- if (\PHP_VERSION_ID >= 70000) {
- list($environment, $debug) = unserialize($data, array('allowed_classes' => false));
- } else {
- list($environment, $debug) = unserialize($data);
- }
+ list($environment, $debug) = unserialize($data, array('allowed_classes' => false));
$this->__construct($environment, $debug);
}
diff --git a/vendor/symfony/http-kernel/KernelInterface.php b/vendor/symfony/http-kernel/KernelInterface.php
index d624d1219d..93c4190b9b 100644
--- a/vendor/symfony/http-kernel/KernelInterface.php
+++ b/vendor/symfony/http-kernel/KernelInterface.php
@@ -18,9 +18,11 @@ use Symfony\Component\HttpKernel\Bundle\BundleInterface;
/**
* The Kernel is the heart of the Symfony system.
*
- * It manages an environment made of bundles.
+ * It manages an environment made of application kernel and bundles.
*
* @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @method string getProjectDir() Gets the project dir (path of the project's composer file) - not defining it is deprecated since Symfony 4.2
*/
interface KernelInterface extends HttpKernelInterface, \Serializable
{
@@ -56,22 +58,18 @@ interface KernelInterface extends HttpKernelInterface, \Serializable
public function getBundles();
/**
- * Returns a bundle and optionally its descendants by its name.
- *
- * The second argument is deprecated as of 3.4 and will be removed in 4.0. This method
- * will always return an instance of BundleInterface in 4.0.
+ * Returns a bundle.
*
- * @param string $name Bundle name
- * @param bool $first Whether to return the first bundle only or together with its descendants
+ * @param string $name Bundle name
*
- * @return BundleInterface|BundleInterface[] A BundleInterface instance or an array of BundleInterface instances if $first is false
+ * @return BundleInterface A BundleInterface instance
*
* @throws \InvalidArgumentException when the bundle is not enabled
*/
- public function getBundle($name, $first = true);
+ public function getBundle($name);
/**
- * Returns the file path for a given resource.
+ * Returns the file path for a given bundle resource.
*
* A Resource can be a file or a directory.
*
@@ -104,6 +102,8 @@ interface KernelInterface extends HttpKernelInterface, \Serializable
* Gets the name of the kernel.
*
* @return string The kernel name
+ *
+ * @deprecated since Symfony 4.2
*/
public function getName();
@@ -125,6 +125,8 @@ interface KernelInterface extends HttpKernelInterface, \Serializable
* Gets the application root dir (path of the project's Kernel class).
*
* @return string The Kernel root dir
+ *
+ * @deprecated since Symfony 4.2
*/
public function getRootDir();
diff --git a/vendor/symfony/http-kernel/Log/DebugLoggerInterface.php b/vendor/symfony/http-kernel/Log/DebugLoggerInterface.php
index f0606d3b0e..2a27992e20 100644
--- a/vendor/symfony/http-kernel/Log/DebugLoggerInterface.php
+++ b/vendor/symfony/http-kernel/Log/DebugLoggerInterface.php
@@ -11,12 +11,12 @@
namespace Symfony\Component\HttpKernel\Log;
+use Symfony\Component\HttpFoundation\Request;
+
/**
* DebugLoggerInterface.
*
* @author Fabien Potencier <fabien@symfony.com>
- *
- * @method clear() Removes all log records.
*/
interface DebugLoggerInterface
{
@@ -27,14 +27,23 @@ interface DebugLoggerInterface
* timestamp, message, priority, and priorityName.
* It can also have an optional context key containing an array.
*
+ * @param Request|null $request The request to get logs for
+ *
* @return array An array of logs
*/
- public function getLogs();
+ public function getLogs(/* Request $request = null */);
/**
* Returns the number of errors.
*
+ * @param Request|null $request The request to count logs for
+ *
* @return int The number of errors
*/
- public function countErrors();
+ public function countErrors(/* Request $request = null */);
+
+ /**
+ * Removes all log records.
+ */
+ public function clear();
}
diff --git a/vendor/symfony/http-kernel/Log/Logger.php b/vendor/symfony/http-kernel/Log/Logger.php
index ca54d22f75..8b671d84df 100644
--- a/vendor/symfony/http-kernel/Log/Logger.php
+++ b/vendor/symfony/http-kernel/Log/Logger.php
@@ -37,7 +37,7 @@ class Logger extends AbstractLogger
private $formatter;
private $handle;
- public function __construct($minLevel = null, $output = 'php://stderr', callable $formatter = null)
+ public function __construct(string $minLevel = null, $output = 'php://stderr', callable $formatter = null)
{
if (null === $minLevel) {
$minLevel = LogLevel::WARNING;
@@ -80,14 +80,7 @@ class Logger extends AbstractLogger
fwrite($this->handle, $formatter($level, $message, $context));
}
- /**
- * @param string $level
- * @param string $message
- * @param array $context
- *
- * @return string
- */
- private function format($level, $message, array $context)
+ private function format(string $level, string $message, array $context): string
{
if (false !== strpos($message, '{')) {
$replacements = array();
diff --git a/vendor/symfony/http-kernel/Profiler/FileProfilerStorage.php b/vendor/symfony/http-kernel/Profiler/FileProfilerStorage.php
index 8bb57cf30c..955afed580 100644
--- a/vendor/symfony/http-kernel/Profiler/FileProfilerStorage.php
+++ b/vendor/symfony/http-kernel/Profiler/FileProfilerStorage.php
@@ -30,11 +30,9 @@ class FileProfilerStorage implements ProfilerStorageInterface
*
* Example : "file:/path/to/the/storage/folder"
*
- * @param string $dsn The DSN
- *
* @throws \RuntimeException
*/
- public function __construct($dsn)
+ public function __construct(string $dsn)
{
if (0 !== strpos($dsn, 'file:')) {
throw new \RuntimeException(sprintf('Please check your configuration. You are trying to use FileStorage with an invalid dsn "%s". The expected format is "file:/path/to/the/storage/folder".', $dsn));
@@ -146,7 +144,7 @@ class FileProfilerStorage implements ProfilerStorageInterface
// when there are errors in sub-requests, the parent and/or children tokens
// may equal the profile token, resulting in infinite loops
$parentToken = $profile->getParentToken() !== $profileToken ? $profile->getParentToken() : null;
- $childrenToken = array_filter(array_map(function ($p) use ($profileToken) {
+ $childrenToken = array_filter(array_map(function (Profile $p) use ($profileToken) {
return $profileToken !== $p->getToken() ? $p->getToken() : null;
}, $profile->getChildren()));
diff --git a/vendor/symfony/http-kernel/Profiler/Profile.php b/vendor/symfony/http-kernel/Profiler/Profile.php
index 9216f09e2b..4716a229ea 100644
--- a/vendor/symfony/http-kernel/Profiler/Profile.php
+++ b/vendor/symfony/http-kernel/Profiler/Profile.php
@@ -43,10 +43,7 @@ class Profile
*/
private $children = array();
- /**
- * @param string $token The token
- */
- public function __construct($token)
+ public function __construct(string $token)
{
$this->token = $token;
}
@@ -74,7 +71,7 @@ class Profile
/**
* Sets the parent token.
*/
- public function setParent(Profile $parent)
+ public function setParent(self $parent)
{
$this->parent = $parent;
}
@@ -213,12 +210,23 @@ class Profile
/**
* Adds the child token.
*/
- public function addChild(Profile $child)
+ public function addChild(self $child)
{
$this->children[] = $child;
$child->setParent($this);
}
+ public function getChildByToken(string $token): ?self
+ {
+ foreach ($this->children as $child) {
+ if ($token === $child->getToken()) {
+ return $child;
+ }
+ }
+
+ return null;
+ }
+
/**
* Gets a Collector by name.
*
diff --git a/vendor/symfony/http-kernel/Profiler/Profiler.php b/vendor/symfony/http-kernel/Profiler/Profiler.php
index f252da4766..809a3396b9 100644
--- a/vendor/symfony/http-kernel/Profiler/Profiler.php
+++ b/vendor/symfony/http-kernel/Profiler/Profiler.php
@@ -17,13 +17,14 @@ use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\DataCollector\DataCollectorInterface;
use Symfony\Component\HttpKernel\DataCollector\LateDataCollectorInterface;
+use Symfony\Contracts\Service\ResetInterface;
/**
* Profiler.
*
* @author Fabien Potencier <fabien@symfony.com>
*/
-class Profiler
+class Profiler implements ResetInterface
{
private $storage;
@@ -36,14 +37,11 @@ class Profiler
private $initiallyEnabled = true;
private $enabled = true;
- /**
- * @param bool $enable The initial enabled state
- */
- public function __construct(ProfilerStorageInterface $storage, LoggerInterface $logger = null, $enable = true)
+ public function __construct(ProfilerStorageInterface $storage, LoggerInterface $logger = null, bool $enable = true)
{
$this->storage = $storage;
$this->logger = $logger;
- $this->initiallyEnabled = $this->enabled = (bool) $enable;
+ $this->initiallyEnabled = $this->enabled = $enable;
}
/**
@@ -159,6 +157,10 @@ class Profiler
$profile->setIp('Unknown');
}
+ if ($prevToken = $response->headers->get('X-Debug-Token')) {
+ $response->headers->set('X-Previous-Debug-Token', $prevToken);
+ }
+
$response->headers->set('X-Debug-Token', $profile->getToken());
foreach ($this->collectors as $collector) {
@@ -174,10 +176,6 @@ class Profiler
public function reset()
{
foreach ($this->collectors as $collector) {
- if (!method_exists($collector, 'reset')) {
- continue;
- }
-
$collector->reset();
}
$this->enabled = $this->initiallyEnabled;
@@ -211,10 +209,6 @@ class Profiler
*/
public function add(DataCollectorInterface $collector)
{
- if (!method_exists($collector, 'reset')) {
- @trigger_error(sprintf('Implementing "%s" without the "reset()" method is deprecated since Symfony 3.4 and will be unsupported in 4.0 for class "%s".', DataCollectorInterface::class, \get_class($collector)), E_USER_DEPRECATED);
- }
-
$this->collectors[$collector->getName()] = $collector;
}
diff --git a/vendor/symfony/http-kernel/Profiler/ProfilerStorageInterface.php b/vendor/symfony/http-kernel/Profiler/ProfilerStorageInterface.php
index 544fb1fef6..b78bae847f 100644
--- a/vendor/symfony/http-kernel/Profiler/ProfilerStorageInterface.php
+++ b/vendor/symfony/http-kernel/Profiler/ProfilerStorageInterface.php
@@ -14,6 +14,14 @@ namespace Symfony\Component\HttpKernel\Profiler;
/**
* ProfilerStorageInterface.
*
+ * This interface exists for historical reasons. The only supported
+ * implementation is FileProfilerStorage.
+ *
+ * As the profiler must only be used on non-production servers, the file storage
+ * is more than enough and no other implementations will ever be supported.
+ *
+ * @internal since 4.2
+ *
* @author Fabien Potencier <fabien@symfony.com>
*/
interface ProfilerStorageInterface
diff --git a/vendor/symfony/http-kernel/Tests/Bundle/BundleTest.php b/vendor/symfony/http-kernel/Tests/Bundle/BundleTest.php
index 3408d7acd6..394e7ed7c6 100644
--- a/vendor/symfony/http-kernel/Tests/Bundle/BundleTest.php
+++ b/vendor/symfony/http-kernel/Tests/Bundle/BundleTest.php
@@ -12,11 +12,8 @@
namespace Symfony\Component\HttpKernel\Tests\Bundle;
use PHPUnit\Framework\TestCase;
-use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpKernel\Bundle\Bundle;
-use Symfony\Component\HttpKernel\Tests\Fixtures\ExtensionAbsentBundle\ExtensionAbsentBundle;
use Symfony\Component\HttpKernel\Tests\Fixtures\ExtensionNotValidBundle\ExtensionNotValidBundle;
-use Symfony\Component\HttpKernel\Tests\Fixtures\ExtensionPresentBundle\Command\FooCommand;
use Symfony\Component\HttpKernel\Tests\Fixtures\ExtensionPresentBundle\ExtensionPresentBundle;
class BundleTest extends TestCase
@@ -32,24 +29,6 @@ class BundleTest extends TestCase
}
/**
- * @group legacy
- * @expectedDeprecation Auto-registration of the command "Symfony\Component\HttpKernel\Tests\Fixtures\ExtensionPresentBundle\Command\FooCommand" is deprecated since Symfony 3.4 and won't be supported in 4.0. Use PSR-4 based service discovery instead.
- */
- public function testRegisterCommands()
- {
- $cmd = new FooCommand();
- $app = $this->getMockBuilder('Symfony\Component\Console\Application')->getMock();
- $app->expects($this->once())->method('add')->with($this->equalTo($cmd));
-
- $bundle = new ExtensionPresentBundle();
- $bundle->registerCommands($app);
-
- $bundle2 = new ExtensionAbsentBundle();
-
- $this->assertNull($bundle2->registerCommands($app));
- }
-
- /**
* @expectedException \LogicException
* @expectedExceptionMessage must implement Symfony\Component\DependencyInjection\Extension\ExtensionInterface
*/
@@ -59,20 +38,6 @@ class BundleTest extends TestCase
$bundle->getContainerExtension();
}
- public function testHttpKernelRegisterCommandsIgnoresCommandsThatAreRegisteredAsServices()
- {
- $container = new ContainerBuilder();
- $container->register('console.command.symfony_component_httpkernel_tests_fixtures_extensionpresentbundle_command_foocommand', 'Symfony\Component\HttpKernel\Tests\Fixtures\ExtensionPresentBundle\Command\FooCommand');
-
- $application = $this->getMockBuilder('Symfony\Component\Console\Application')->getMock();
- // add() is never called when the found command classes are already registered as services
- $application->expects($this->never())->method('add');
-
- $bundle = new ExtensionPresentBundle();
- $bundle->setContainer($container);
- $bundle->registerCommands($application);
- }
-
public function testBundleNameIsGuessedFromClass()
{
$bundle = new GuessedNameBundle();
diff --git a/vendor/symfony/http-kernel/Tests/CacheClearer/ChainCacheClearerTest.php b/vendor/symfony/http-kernel/Tests/CacheClearer/ChainCacheClearerTest.php
index ec2ecff948..5f09e4b226 100644
--- a/vendor/symfony/http-kernel/Tests/CacheClearer/ChainCacheClearerTest.php
+++ b/vendor/symfony/http-kernel/Tests/CacheClearer/ChainCacheClearerTest.php
@@ -20,7 +20,7 @@ class ChainCacheClearerTest extends TestCase
public static function setUpBeforeClass()
{
- self::$cacheDir = tempnam(sys_get_temp_dir(), 'sf2_cache_clearer_dir');
+ self::$cacheDir = tempnam(sys_get_temp_dir(), 'sf_cache_clearer_dir');
}
public static function tearDownAfterClass()
@@ -39,21 +39,6 @@ class ChainCacheClearerTest extends TestCase
$chainClearer->clear(self::$cacheDir);
}
- /**
- * @group legacy
- */
- public function testInjectClearerUsingAdd()
- {
- $clearer = $this->getMockClearer();
- $clearer
- ->expects($this->once())
- ->method('clear');
-
- $chainClearer = new ChainCacheClearer();
- $chainClearer->add($clearer);
- $chainClearer->clear(self::$cacheDir);
- }
-
protected function getMockClearer()
{
return $this->getMockBuilder('Symfony\Component\HttpKernel\CacheClearer\CacheClearerInterface')->getMock();
diff --git a/vendor/symfony/http-kernel/Tests/CacheClearer/Psr6CacheClearerTest.php b/vendor/symfony/http-kernel/Tests/CacheClearer/Psr6CacheClearerTest.php
index b3bed4e87f..e1d2fe82e9 100644
--- a/vendor/symfony/http-kernel/Tests/CacheClearer/Psr6CacheClearerTest.php
+++ b/vendor/symfony/http-kernel/Tests/CacheClearer/Psr6CacheClearerTest.php
@@ -45,25 +45,4 @@ class Psr6CacheClearerTest extends TestCase
{
(new Psr6CacheClearer())->clearPool('unknown');
}
-
- /**
- * @group legacy
- * @expectedDeprecation The Symfony\Component\HttpKernel\CacheClearer\Psr6CacheClearer::addPool() method is deprecated since Symfony 3.3 and will be removed in 4.0. Pass an array of pools indexed by name to the constructor instead.
- */
- public function testClearPoolsInjectedByAdder()
- {
- $pool1 = $this->getMockBuilder(CacheItemPoolInterface::class)->getMock();
- $pool1
- ->expects($this->once())
- ->method('clear');
-
- $pool2 = $this->getMockBuilder(CacheItemPoolInterface::class)->getMock();
- $pool2
- ->expects($this->once())
- ->method('clear');
-
- $clearer = new Psr6CacheClearer(array('pool1' => $pool1));
- $clearer->addPool($pool2);
- $clearer->clear('');
- }
}
diff --git a/vendor/symfony/http-kernel/Tests/CacheWarmer/CacheWarmerAggregateTest.php b/vendor/symfony/http-kernel/Tests/CacheWarmer/CacheWarmerAggregateTest.php
index ba159124c9..09ba7020ff 100644
--- a/vendor/symfony/http-kernel/Tests/CacheWarmer/CacheWarmerAggregateTest.php
+++ b/vendor/symfony/http-kernel/Tests/CacheWarmer/CacheWarmerAggregateTest.php
@@ -20,7 +20,7 @@ class CacheWarmerAggregateTest extends TestCase
public static function setUpBeforeClass()
{
- self::$cacheDir = tempnam(sys_get_temp_dir(), 'sf2_cache_warmer_dir');
+ self::$cacheDir = tempnam(sys_get_temp_dir(), 'sf_cache_warmer_dir');
}
public static function tearDownAfterClass()
@@ -38,34 +38,6 @@ class CacheWarmerAggregateTest extends TestCase
$aggregate->warmUp(self::$cacheDir);
}
- /**
- * @group legacy
- */
- public function testInjectWarmersUsingAdd()
- {
- $warmer = $this->getCacheWarmerMock();
- $warmer
- ->expects($this->once())
- ->method('warmUp');
- $aggregate = new CacheWarmerAggregate();
- $aggregate->add($warmer);
- $aggregate->warmUp(self::$cacheDir);
- }
-
- /**
- * @group legacy
- */
- public function testInjectWarmersUsingSetWarmers()
- {
- $warmer = $this->getCacheWarmerMock();
- $warmer
- ->expects($this->once())
- ->method('warmUp');
- $aggregate = new CacheWarmerAggregate();
- $aggregate->setWarmers(array($warmer));
- $aggregate->warmUp(self::$cacheDir);
- }
-
public function testWarmupDoesCallWarmupOnOptionalWarmersWhenEnableOptionalWarmersIsEnabled()
{
$warmer = $this->getCacheWarmerMock();
diff --git a/vendor/symfony/http-kernel/Tests/CacheWarmer/CacheWarmerTest.php b/vendor/symfony/http-kernel/Tests/CacheWarmer/CacheWarmerTest.php
index 4d34e7bfc9..cee8b55034 100644
--- a/vendor/symfony/http-kernel/Tests/CacheWarmer/CacheWarmerTest.php
+++ b/vendor/symfony/http-kernel/Tests/CacheWarmer/CacheWarmerTest.php
@@ -20,7 +20,7 @@ class CacheWarmerTest extends TestCase
public static function setUpBeforeClass()
{
- self::$cacheFile = tempnam(sys_get_temp_dir(), 'sf2_cache_warmer_dir');
+ self::$cacheFile = tempnam(sys_get_temp_dir(), 'sf_cache_warmer_dir');
}
public static function tearDownAfterClass()
diff --git a/vendor/symfony/http-kernel/Tests/ClientTest.php b/vendor/symfony/http-kernel/Tests/ClientTest.php
index 5af2730868..4ce3670a30 100644
--- a/vendor/symfony/http-kernel/Tests/ClientTest.php
+++ b/vendor/symfony/http-kernel/Tests/ClientTest.php
@@ -61,13 +61,13 @@ class ClientTest extends TestCase
$m->setAccessible(true);
$response = new Response();
- $response->headers->setCookie($cookie1 = new Cookie('foo', 'bar', \DateTime::createFromFormat('j-M-Y H:i:s T', '15-Feb-2009 20:00:00 GMT')->format('U'), '/foo', 'http://example.com', true, true));
+ $response->headers->setCookie($cookie1 = new Cookie('foo', 'bar', \DateTime::createFromFormat('j-M-Y H:i:s T', '15-Feb-2009 20:00:00 GMT')->format('U'), '/foo', 'http://example.com', true, true, false, null));
$domResponse = $m->invoke($client, $response);
$this->assertSame((string) $cookie1, $domResponse->getHeader('Set-Cookie'));
$response = new Response();
- $response->headers->setCookie($cookie1 = new Cookie('foo', 'bar', \DateTime::createFromFormat('j-M-Y H:i:s T', '15-Feb-2009 20:00:00 GMT')->format('U'), '/foo', 'http://example.com', true, true));
- $response->headers->setCookie($cookie2 = new Cookie('foo1', 'bar1', \DateTime::createFromFormat('j-M-Y H:i:s T', '15-Feb-2009 20:00:00 GMT')->format('U'), '/foo', 'http://example.com', true, true));
+ $response->headers->setCookie($cookie1 = new Cookie('foo', 'bar', \DateTime::createFromFormat('j-M-Y H:i:s T', '15-Feb-2009 20:00:00 GMT')->format('U'), '/foo', 'http://example.com', true, true, false, null));
+ $response->headers->setCookie($cookie2 = new Cookie('foo1', 'bar1', \DateTime::createFromFormat('j-M-Y H:i:s T', '15-Feb-2009 20:00:00 GMT')->format('U'), '/foo', 'http://example.com', true, true, false, null));
$domResponse = $m->invoke($client, $response);
$this->assertSame((string) $cookie1, $domResponse->getHeader('Set-Cookie'));
$this->assertSame(array((string) $cookie1, (string) $cookie2), $domResponse->getHeader('Set-Cookie', false));
@@ -100,8 +100,8 @@ class ClientTest extends TestCase
$client = new Client($kernel);
$files = array(
- array('tmp_name' => $source, 'name' => 'original', 'type' => 'mime/original', 'size' => 1, 'error' => UPLOAD_ERR_OK),
- new UploadedFile($source, 'original', 'mime/original', 1, UPLOAD_ERR_OK, true),
+ array('tmp_name' => $source, 'name' => 'original', 'type' => 'mime/original', 'size' => null, 'error' => UPLOAD_ERR_OK),
+ new UploadedFile($source, 'original', 'mime/original', UPLOAD_ERR_OK, true),
);
$file = null;
@@ -116,8 +116,7 @@ class ClientTest extends TestCase
$this->assertEquals('original', $file->getClientOriginalName());
$this->assertEquals('mime/original', $file->getClientMimeType());
- $this->assertSame(1, $file->getClientSize());
- $this->assertTrue($file->isValid());
+ $this->assertEquals(1, $file->getSize());
}
$file->move(\dirname($target), basename($target));
@@ -150,15 +149,19 @@ class ClientTest extends TestCase
$file = $this
->getMockBuilder('Symfony\Component\HttpFoundation\File\UploadedFile')
- ->setConstructorArgs(array($source, 'original', 'mime/original', 123, UPLOAD_ERR_OK, true))
- ->setMethods(array('getSize'))
+ ->setConstructorArgs(array($source, 'original', 'mime/original', UPLOAD_ERR_OK, true))
+ ->setMethods(array('getSize', 'getClientSize'))
->getMock()
;
-
- $file->expects($this->once())
+ /* should be modified when the getClientSize will be removed */
+ $file->expects($this->any())
->method('getSize')
->will($this->returnValue(INF))
;
+ $file->expects($this->any())
+ ->method('getClientSize')
+ ->will($this->returnValue(INF))
+ ;
$client->request('POST', '/', array(), array($file));
@@ -172,7 +175,7 @@ class ClientTest extends TestCase
$this->assertEquals(UPLOAD_ERR_INI_SIZE, $file->getError());
$this->assertEquals('mime/original', $file->getClientMimeType());
$this->assertEquals('original', $file->getClientOriginalName());
- $this->assertEquals(0, $file->getClientSize());
+ $this->assertEquals(0, $file->getSize());
unlink($source);
}
diff --git a/vendor/symfony/http-kernel/Tests/Config/EnvParametersResourceTest.php b/vendor/symfony/http-kernel/Tests/Config/EnvParametersResourceTest.php
deleted file mode 100644
index 986e05d8b8..0000000000
--- a/vendor/symfony/http-kernel/Tests/Config/EnvParametersResourceTest.php
+++ /dev/null
@@ -1,110 +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\HttpKernel\Tests\Config;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\HttpKernel\Config\EnvParametersResource;
-
-/**
- * @group legacy
- */
-class EnvParametersResourceTest extends TestCase
-{
- protected $prefix = '__DUMMY_';
- protected $initialEnv;
- protected $resource;
-
- protected function setUp()
- {
- $this->initialEnv = array(
- $this->prefix.'1' => 'foo',
- $this->prefix.'2' => 'bar',
- );
-
- foreach ($this->initialEnv as $key => $value) {
- $_SERVER[$key] = $value;
- }
-
- $this->resource = new EnvParametersResource($this->prefix);
- }
-
- protected function tearDown()
- {
- foreach ($_SERVER as $key => $value) {
- if (0 === strpos($key, $this->prefix)) {
- unset($_SERVER[$key]);
- }
- }
- }
-
- public function testGetResource()
- {
- $this->assertSame(
- array('prefix' => $this->prefix, 'variables' => $this->initialEnv),
- $this->resource->getResource(),
- '->getResource() returns the resource'
- );
- }
-
- public function testToString()
- {
- $this->assertSame(
- serialize(array('prefix' => $this->prefix, 'variables' => $this->initialEnv)),
- (string) $this->resource
- );
- }
-
- public function testIsFreshNotChanged()
- {
- $this->assertTrue(
- $this->resource->isFresh(time()),
- '->isFresh() returns true if the variables have not changed'
- );
- }
-
- public function testIsFreshValueChanged()
- {
- reset($this->initialEnv);
- $_SERVER[key($this->initialEnv)] = 'baz';
-
- $this->assertFalse(
- $this->resource->isFresh(time()),
- '->isFresh() returns false if a variable has been changed'
- );
- }
-
- public function testIsFreshValueRemoved()
- {
- reset($this->initialEnv);
- unset($_SERVER[key($this->initialEnv)]);
-
- $this->assertFalse(
- $this->resource->isFresh(time()),
- '->isFresh() returns false if a variable has been removed'
- );
- }
-
- public function testIsFreshValueAdded()
- {
- $_SERVER[$this->prefix.'3'] = 'foo';
-
- $this->assertFalse(
- $this->resource->isFresh(time()),
- '->isFresh() returns false if a variable has been added'
- );
- }
-
- public function testSerializeUnserialize()
- {
- $this->assertEquals($this->resource, unserialize(serialize($this->resource)));
- }
-}
diff --git a/vendor/symfony/http-kernel/Tests/Controller/ArgumentResolver/ServiceValueResolverTest.php b/vendor/symfony/http-kernel/Tests/Controller/ArgumentResolver/ServiceValueResolverTest.php
index f6a3689638..0b38af9556 100644
--- a/vendor/symfony/http-kernel/Tests/Controller/ArgumentResolver/ServiceValueResolverTest.php
+++ b/vendor/symfony/http-kernel/Tests/Controller/ArgumentResolver/ServiceValueResolverTest.php
@@ -12,10 +12,12 @@
namespace Symfony\Component\HttpKernel\Tests\Controller\ArgumentResolver;
use PHPUnit\Framework\TestCase;
+use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\ServiceLocator;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Controller\ArgumentResolver\ServiceValueResolver;
use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadata;
+use Symfony\Component\HttpKernel\DependencyInjection\RegisterControllerArgumentLocatorsPass;
class ServiceValueResolverTest extends TestCase
{
@@ -103,6 +105,25 @@ class ServiceValueResolverTest extends TestCase
$this->assertYieldEquals(array(new DummyService()), $resolver->resolve($request, $argument));
}
+ /**
+ * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
+ * @expectedExceptionMessage Cannot autowire argument $dummy of "Symfony\Component\HttpKernel\Tests\Controller\ArgumentResolver\DummyController::index()": it references class "Symfony\Component\HttpKernel\Tests\Controller\ArgumentResolver\DummyService" but no such service exists.
+ */
+ public function testErrorIsTruncated()
+ {
+ $container = new ContainerBuilder();
+ $container->addCompilerPass(new RegisterControllerArgumentLocatorsPass());
+
+ $container->register('argument_resolver.service', ServiceValueResolver::class)->addArgument(null)->setPublic(true);
+ $container->register(DummyController::class)->addTag('controller.service_arguments')->setPublic(true);
+
+ $container->compile();
+
+ $request = $this->requestWithAttributes(array('_controller' => array(DummyController::class, 'index')));
+ $argument = new ArgumentMetadata('dummy', DummyService::class, false, false, null);
+ $container->get('argument_resolver.service')->resolve($request, $argument)->current();
+ }
+
private function requestWithAttributes(array $attributes)
{
$request = Request::create('/');
@@ -128,3 +149,10 @@ class ServiceValueResolverTest extends TestCase
class DummyService
{
}
+
+class DummyController
+{
+ public function index(DummyService $dummy)
+ {
+ }
+}
diff --git a/vendor/symfony/http-kernel/Tests/Controller/ArgumentResolver/TraceableValueResolverTest.php b/vendor/symfony/http-kernel/Tests/Controller/ArgumentResolver/TraceableValueResolverTest.php
new file mode 100644
index 0000000000..3c2cc3f700
--- /dev/null
+++ b/vendor/symfony/http-kernel/Tests/Controller/ArgumentResolver/TraceableValueResolverTest.php
@@ -0,0 +1,76 @@
+<?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\HttpKernel\Tests\Controller\ArgumentResolver;
+
+use PHPUnit\Framework\TestCase;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpKernel\Controller\ArgumentResolver\TraceableValueResolver;
+use Symfony\Component\HttpKernel\Controller\ArgumentValueResolverInterface;
+use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadata;
+use Symfony\Component\Stopwatch\Stopwatch;
+
+class TraceableValueResolverTest extends TestCase
+{
+ public function testTimingsInSupports()
+ {
+ $stopwatch = new Stopwatch();
+ $resolver = new TraceableValueResolver(new ResolverStub(), $stopwatch);
+ $argument = new ArgumentMetadata('dummy', 'string', false, false, null);
+ $request = new Request();
+
+ $this->assertTrue($resolver->supports($request, $argument));
+
+ $event = $stopwatch->getEvent(ResolverStub::class.'::supports');
+ $this->assertCount(1, $event->getPeriods());
+ }
+
+ public function testTimingsInResolve()
+ {
+ $stopwatch = new Stopwatch();
+ $resolver = new TraceableValueResolver(new ResolverStub(), $stopwatch);
+ $argument = new ArgumentMetadata('dummy', 'string', false, false, null);
+ $request = new Request();
+
+ $iterable = $resolver->resolve($request, $argument);
+
+ foreach ($iterable as $index => $resolved) {
+ $event = $stopwatch->getEvent(ResolverStub::class.'::resolve');
+ $this->assertTrue($event->isStarted());
+ $this->assertEmpty($event->getPeriods());
+ switch ($index) {
+ case 0:
+ $this->assertEquals('first', $resolved);
+ break;
+ case 1:
+ $this->assertEquals('second', $resolved);
+ break;
+ }
+ }
+
+ $event = $stopwatch->getEvent(ResolverStub::class.'::resolve');
+ $this->assertCount(1, $event->getPeriods());
+ }
+}
+
+class ResolverStub implements ArgumentValueResolverInterface
+{
+ public function supports(Request $request, ArgumentMetadata $argument)
+ {
+ return true;
+ }
+
+ public function resolve(Request $request, ArgumentMetadata $argument)
+ {
+ yield 'first';
+ yield 'second';
+ }
+}
diff --git a/vendor/symfony/http-kernel/Tests/Controller/ArgumentResolverTest.php b/vendor/symfony/http-kernel/Tests/Controller/ArgumentResolverTest.php
index 729b90b2f6..bb4e06617e 100644
--- a/vendor/symfony/http-kernel/Tests/Controller/ArgumentResolverTest.php
+++ b/vendor/symfony/http-kernel/Tests/Controller/ArgumentResolverTest.php
@@ -152,9 +152,6 @@ class ArgumentResolverTest extends TestCase
$this->assertEquals(array($request), self::$resolver->getArguments($request, $controller), '->getArguments() injects the request when extended');
}
- /**
- * @requires PHP 5.6
- */
public function testGetVariadicArguments()
{
$request = Request::create('/');
@@ -166,7 +163,6 @@ class ArgumentResolverTest extends TestCase
}
/**
- * @requires PHP 5.6
* @expectedException \InvalidArgumentException
*/
public function testGetVariadicArgumentsWithoutArrayInRequest()
@@ -180,7 +176,6 @@ class ArgumentResolverTest extends TestCase
}
/**
- * @requires PHP 5.6
* @expectedException \InvalidArgumentException
*/
public function testGetArgumentWithoutArray()
@@ -210,9 +205,6 @@ class ArgumentResolverTest extends TestCase
self::$resolver->getArguments($request, $controller);
}
- /**
- * @requires PHP 7.1
- */
public function testGetNullableArguments()
{
$request = Request::create('/');
@@ -224,9 +216,6 @@ class ArgumentResolverTest extends TestCase
$this->assertEquals(array('foo', new \stdClass(), 'value', 'mandatory'), self::$resolver->getArguments($request, $controller));
}
- /**
- * @requires PHP 7.1
- */
public function testGetNullableArgumentsWithDefaults()
{
$request = Request::create('/');
diff --git a/vendor/symfony/http-kernel/Tests/Controller/ContainerControllerResolverTest.php b/vendor/symfony/http-kernel/Tests/Controller/ContainerControllerResolverTest.php
index 82407f5601..1a144eee49 100644
--- a/vendor/symfony/http-kernel/Tests/Controller/ContainerControllerResolverTest.php
+++ b/vendor/symfony/http-kernel/Tests/Controller/ContainerControllerResolverTest.php
@@ -13,15 +13,16 @@ namespace Symfony\Component\HttpKernel\Tests\Controller;
use Psr\Container\ContainerInterface;
use Psr\Log\LoggerInterface;
-use Symfony\Component\Debug\ErrorHandler;
use Symfony\Component\DependencyInjection\Container;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Controller\ContainerControllerResolver;
class ContainerControllerResolverTest extends ControllerResolverTest
{
- public function testGetControllerService()
+ public function testGetControllerServiceWithSingleColon()
{
+ $service = new ControllerTestService('foo');
+
$container = $this->createMockContainer();
$container->expects($this->once())
->method('has')
@@ -30,163 +31,132 @@ class ContainerControllerResolverTest extends ControllerResolverTest
$container->expects($this->once())
->method('get')
->with('foo')
- ->will($this->returnValue($this))
+ ->will($this->returnValue($service))
;
$resolver = $this->createControllerResolver(null, $container);
$request = Request::create('/');
- $request->attributes->set('_controller', 'foo:controllerMethod1');
+ $request->attributes->set('_controller', 'foo:action');
$controller = $resolver->getController($request);
- $this->assertInstanceOf(\get_class($this), $controller[0]);
- $this->assertSame('controllerMethod1', $controller[1]);
+ $this->assertSame($service, $controller[0]);
+ $this->assertSame('action', $controller[1]);
}
- public function testGetControllerInvokableService()
+ public function testGetControllerService()
{
- $invokableController = new InvokableController('bar');
+ $service = new ControllerTestService('foo');
$container = $this->createMockContainer();
$container->expects($this->once())
->method('has')
->with('foo')
- ->will($this->returnValue(true))
- ;
+ ->will($this->returnValue(true));
$container->expects($this->once())
->method('get')
->with('foo')
- ->will($this->returnValue($invokableController))
+ ->will($this->returnValue($service))
;
$resolver = $this->createControllerResolver(null, $container);
$request = Request::create('/');
- $request->attributes->set('_controller', 'foo');
+ $request->attributes->set('_controller', 'foo::action');
$controller = $resolver->getController($request);
- $this->assertEquals($invokableController, $controller);
+ $this->assertSame($service, $controller[0]);
+ $this->assertSame('action', $controller[1]);
}
- public function testGetControllerInvokableServiceWithClassNameAsName()
+ public function testGetControllerInvokableService()
{
- $invokableController = new InvokableController('bar');
- $className = __NAMESPACE__.'\InvokableController';
+ $service = new InvokableControllerService('bar');
$container = $this->createMockContainer();
$container->expects($this->once())
->method('has')
- ->with($className)
+ ->with('foo')
->will($this->returnValue(true))
;
$container->expects($this->once())
->method('get')
- ->with($className)
- ->will($this->returnValue($invokableController))
+ ->with('foo')
+ ->will($this->returnValue($service))
;
$resolver = $this->createControllerResolver(null, $container);
$request = Request::create('/');
- $request->attributes->set('_controller', $className);
+ $request->attributes->set('_controller', 'foo');
$controller = $resolver->getController($request);
- $this->assertEquals($invokableController, $controller);
+ $this->assertSame($service, $controller);
}
- public function testNonInstantiableController()
+ public function testGetControllerInvokableServiceWithClassNameAsName()
{
+ $service = new InvokableControllerService('bar');
+
$container = $this->createMockContainer();
$container->expects($this->once())
->method('has')
- ->with(NonInstantiableController::class)
- ->will($this->returnValue(false))
+ ->with(InvokableControllerService::class)
+ ->will($this->returnValue(true))
+ ;
+ $container->expects($this->once())
+ ->method('get')
+ ->with(InvokableControllerService::class)
+ ->will($this->returnValue($service))
;
$resolver = $this->createControllerResolver(null, $container);
$request = Request::create('/');
- $request->attributes->set('_controller', array(NonInstantiableController::class, 'action'));
+ $request->attributes->set('_controller', InvokableControllerService::class);
$controller = $resolver->getController($request);
- $this->assertSame(array(NonInstantiableController::class, 'action'), $controller);
+ $this->assertSame($service, $controller);
}
/**
- * @expectedException \LogicException
- * @expectedExceptionMessage Controller "Symfony\Component\HttpKernel\Tests\Controller\ImpossibleConstructController" cannot be fetched from the container because it is private. Did you forget to tag the service with "controller.service_arguments"?
+ * Tests where the fallback instantiation fails due to required constructor arguments.
+ *
+ * @expectedException \InvalidArgumentException
+ * @expectedExceptionMessage Controller "Symfony\Component\HttpKernel\Tests\Controller\ControllerTestService" cannot be fetched from the container because it is private. Did you forget to tag the service with "controller.service_arguments"?
*/
- public function testNonConstructController()
+ public function testExceptionWhenUsingRemovedControllerServiceWithClassNameAsName()
{
$container = $this->getMockBuilder(Container::class)->getMock();
- $container->expects($this->at(0))
- ->method('has')
- ->with(ImpossibleConstructController::class)
- ->will($this->returnValue(true))
- ;
-
- $container->expects($this->at(1))
+ $container->expects($this->once())
->method('has')
- ->with(ImpossibleConstructController::class)
+ ->with(ControllerTestService::class)
->will($this->returnValue(false))
;
$container->expects($this->atLeastOnce())
->method('getRemovedIds')
->with()
- ->will($this->returnValue(array(ImpossibleConstructController::class => true)))
+ ->will($this->returnValue(array(ControllerTestService::class => true)))
;
$resolver = $this->createControllerResolver(null, $container);
$request = Request::create('/');
- $request->attributes->set('_controller', array(ImpossibleConstructController::class, 'action'));
-
- if (\PHP_VERSION_ID < 70100) {
- ErrorHandler::register();
- try {
- $resolver->getController($request);
- } finally {
- restore_error_handler();
- restore_exception_handler();
- }
- } else {
- $resolver->getController($request);
- }
- }
-
- public function testNonInstantiableControllerWithCorrespondingService()
- {
- $service = new \stdClass();
+ $request->attributes->set('_controller', array(ControllerTestService::class, 'action'));
- $container = $this->createMockContainer();
- $container->expects($this->atLeastOnce())
- ->method('has')
- ->with(NonInstantiableController::class)
- ->will($this->returnValue(true))
- ;
- $container->expects($this->atLeastOnce())
- ->method('get')
- ->with(NonInstantiableController::class)
- ->will($this->returnValue($service))
- ;
-
- $resolver = $this->createControllerResolver(null, $container);
- $request = Request::create('/');
- $request->attributes->set('_controller', array(NonInstantiableController::class, 'action'));
-
- $controller = $resolver->getController($request);
-
- $this->assertSame(array($service, 'action'), $controller);
+ $resolver->getController($request);
}
/**
- * @expectedException \LogicException
+ * Tests where the fallback instantiation fails due to non-existing class.
+ *
+ * @expectedException \InvalidArgumentException
* @expectedExceptionMessage Controller "app.my_controller" cannot be fetched from the container because it is private. Did you forget to tag the service with "controller.service_arguments"?
*/
public function testExceptionWhenUsingRemovedControllerService()
{
$container = $this->getMockBuilder(Container::class)->getMock();
- $container->expects($this->at(0))
+ $container->expects($this->once())
->method('has')
->with('app.my_controller')
->will($this->returnValue(false))
@@ -205,62 +175,28 @@ class ContainerControllerResolverTest extends ControllerResolverTest
$resolver->getController($request);
}
- /**
- * @expectedException \LogicException
- * @expectedExceptionMessage Controller "app.my_controller" cannot be called without a method name. Did you forget an "__invoke" method?
- */
- public function testExceptionWhenUsingControllerWithoutAnInvokeMethod()
- {
- $container = $this->getMockBuilder(Container::class)->getMock();
- $container->expects($this->once())
- ->method('has')
- ->with('app.my_controller')
- ->will($this->returnValue(true))
- ;
- $container->expects($this->once())
- ->method('get')
- ->with('app.my_controller')
- ->will($this->returnValue(new ImpossibleConstructController('toto', 'controller')))
- ;
-
- $resolver = $this->createControllerResolver(null, $container);
-
- $request = Request::create('/');
- $request->attributes->set('_controller', 'app.my_controller');
- $resolver->getController($request);
- }
-
- /**
- * @dataProvider getUndefinedControllers
- */
- public function testGetControllerOnNonUndefinedFunction($controller, $exceptionName = null, $exceptionMessage = null)
- {
- // All this logic needs to be duplicated, since calling parent::testGetControllerOnNonUndefinedFunction will override the expected excetion and not use the regex
- $resolver = $this->createControllerResolver();
- if (method_exists($this, 'expectException')) {
- $this->expectException($exceptionName);
- $this->expectExceptionMessageRegExp($exceptionMessage);
- } else {
- $this->setExpectedExceptionRegExp($exceptionName, $exceptionMessage);
- }
-
- $request = Request::create('/');
- $request->attributes->set('_controller', $controller);
- $resolver->getController($request);
- }
-
public function getUndefinedControllers()
{
- return array(
- array('foo', \LogicException::class, '/Controller not found: service "foo" does not exist\./'),
- array('oof::bar', \InvalidArgumentException::class, '/Class "oof" does not exist\./'),
- array('stdClass', \LogicException::class, '/Controller not found: service "stdClass" does not exist\./'),
- array(
- 'Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest::bar',
- \InvalidArgumentException::class,
- '/.?[cC]ontroller(.*?) for URI "\/" is not callable\.( Expected method(.*) Available methods)?/',
- ),
+ $tests = parent::getUndefinedControllers();
+ $tests[0] = array('foo', \InvalidArgumentException::class, 'Controller "foo" does neither exist as service nor as class');
+ $tests[1] = array('oof::bar', \InvalidArgumentException::class, 'Controller "oof" does neither exist as service nor as class');
+ $tests[2] = array(array('oof', 'bar'), \InvalidArgumentException::class, 'Controller "oof" does neither exist as service nor as class');
+ $tests[] = array(
+ array(ControllerTestService::class, 'action'),
+ \InvalidArgumentException::class,
+ 'Controller "Symfony\Component\HttpKernel\Tests\Controller\ControllerTestService" has required constructor arguments and does not exist in the container. Did you forget to define such a service?',
);
+ $tests[] = array(
+ ControllerTestService::class.'::action',
+ \InvalidArgumentException::class, 'Controller "Symfony\Component\HttpKernel\Tests\Controller\ControllerTestService" has required constructor arguments and does not exist in the container. Did you forget to define such a service?',
+ );
+ $tests[] = array(
+ InvokableControllerService::class,
+ \InvalidArgumentException::class,
+ 'Controller "Symfony\Component\HttpKernel\Tests\Controller\InvokableControllerService" has required constructor arguments and does not exist in the container. Did you forget to define such a service?',
+ );
+
+ return $tests;
}
protected function createControllerResolver(LoggerInterface $logger = null, ContainerInterface $container = null)
@@ -278,7 +214,7 @@ class ContainerControllerResolverTest extends ControllerResolverTest
}
}
-class InvokableController
+class InvokableControllerService
{
public function __construct($bar) // mandatory argument to prevent automatic instantiation
{
@@ -289,16 +225,9 @@ class InvokableController
}
}
-abstract class NonInstantiableController
-{
- public static function action()
- {
- }
-}
-
-class ImpossibleConstructController
+class ControllerTestService
{
- public function __construct($toto, $controller)
+ public function __construct($foo)
{
}
diff --git a/vendor/symfony/http-kernel/Tests/Controller/ControllerResolverTest.php b/vendor/symfony/http-kernel/Tests/Controller/ControllerResolverTest.php
index 87f598d16d..fe624f7b60 100644
--- a/vendor/symfony/http-kernel/Tests/Controller/ControllerResolverTest.php
+++ b/vendor/symfony/http-kernel/Tests/Controller/ControllerResolverTest.php
@@ -15,8 +15,6 @@ use PHPUnit\Framework\TestCase;
use Psr\Log\LoggerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Controller\ControllerResolver;
-use Symfony\Component\HttpKernel\Tests\Fixtures\Controller\NullableController;
-use Symfony\Component\HttpKernel\Tests\Fixtures\Controller\VariadicController;
class ControllerResolverTest extends TestCase
{
@@ -43,51 +41,55 @@ class ControllerResolverTest extends TestCase
public function testGetControllerWithObjectAndInvokeMethod()
{
$resolver = $this->createControllerResolver();
+ $object = new InvokableController();
$request = Request::create('/');
- $request->attributes->set('_controller', $this);
+ $request->attributes->set('_controller', $object);
$controller = $resolver->getController($request);
- $this->assertSame($this, $controller);
+ $this->assertSame($object, $controller);
}
public function testGetControllerWithObjectAndMethod()
{
$resolver = $this->createControllerResolver();
+ $object = new ControllerTest();
$request = Request::create('/');
- $request->attributes->set('_controller', array($this, 'controllerMethod1'));
+ $request->attributes->set('_controller', array($object, 'publicAction'));
$controller = $resolver->getController($request);
- $this->assertSame(array($this, 'controllerMethod1'), $controller);
+ $this->assertSame(array($object, 'publicAction'), $controller);
}
- public function testGetControllerWithClassAndMethod()
+ public function testGetControllerWithClassAndMethodAsArray()
{
$resolver = $this->createControllerResolver();
$request = Request::create('/');
- $request->attributes->set('_controller', array('Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest', 'controllerMethod4'));
+ $request->attributes->set('_controller', array(ControllerTest::class, 'publicAction'));
$controller = $resolver->getController($request);
- $this->assertSame(array('Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest', 'controllerMethod4'), $controller);
+ $this->assertInstanceOf(ControllerTest::class, $controller[0]);
+ $this->assertSame('publicAction', $controller[1]);
}
- public function testGetControllerWithObjectAndMethodAsString()
+ public function testGetControllerWithClassAndMethodAsString()
{
$resolver = $this->createControllerResolver();
$request = Request::create('/');
- $request->attributes->set('_controller', 'Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest::controllerMethod1');
+ $request->attributes->set('_controller', ControllerTest::class.'::publicAction');
$controller = $resolver->getController($request);
- $this->assertInstanceOf('Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest', $controller[0], '->getController() returns a PHP callable');
+ $this->assertInstanceOf(ControllerTest::class, $controller[0]);
+ $this->assertSame('publicAction', $controller[1]);
}
- public function testGetControllerWithClassAndInvokeMethod()
+ public function testGetControllerWithInvokableClass()
{
$resolver = $this->createControllerResolver();
$request = Request::create('/');
- $request->attributes->set('_controller', 'Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest');
+ $request->attributes->set('_controller', InvokableController::class);
$controller = $resolver->getController($request);
- $this->assertInstanceOf('Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest', $controller);
+ $this->assertInstanceOf(InvokableController::class, $controller);
}
/**
@@ -112,220 +114,146 @@ class ControllerResolverTest extends TestCase
$this->assertSame('Symfony\Component\HttpKernel\Tests\Controller\some_controller_function', $controller);
}
- /**
- * @dataProvider getUndefinedControllers
- */
- public function testGetControllerOnNonUndefinedFunction($controller, $exceptionName = null, $exceptionMessage = null)
- {
- $resolver = $this->createControllerResolver();
- if (method_exists($this, 'expectException')) {
- $this->expectException($exceptionName);
- $this->expectExceptionMessage($exceptionMessage);
- } else {
- $this->setExpectedException($exceptionName, $exceptionMessage);
- }
-
- $request = Request::create('/');
- $request->attributes->set('_controller', $controller);
- $resolver->getController($request);
- }
-
- public function getUndefinedControllers()
- {
- return array(
- array(1, 'InvalidArgumentException', 'Unable to find controller "1".'),
- array('foo', 'InvalidArgumentException', 'Unable to find controller "foo".'),
- array('oof::bar', 'InvalidArgumentException', 'Class "oof" does not exist.'),
- array('stdClass', 'InvalidArgumentException', 'Unable to find controller "stdClass".'),
- array('Symfony\Component\HttpKernel\Tests\Controller\ControllerTest::staticsAction', 'InvalidArgumentException', 'The controller for URI "/" is not callable. Expected method "staticsAction" on class "Symfony\Component\HttpKernel\Tests\Controller\ControllerTest", did you mean "staticAction"?'),
- array('Symfony\Component\HttpKernel\Tests\Controller\ControllerTest::privateAction', 'InvalidArgumentException', 'The controller for URI "/" is not callable. Method "privateAction" on class "Symfony\Component\HttpKernel\Tests\Controller\ControllerTest" should be public and non-abstract'),
- array('Symfony\Component\HttpKernel\Tests\Controller\ControllerTest::protectedAction', 'InvalidArgumentException', 'The controller for URI "/" is not callable. Method "protectedAction" on class "Symfony\Component\HttpKernel\Tests\Controller\ControllerTest" should be public and non-abstract'),
- array('Symfony\Component\HttpKernel\Tests\Controller\ControllerTest::undefinedAction', 'InvalidArgumentException', 'The controller for URI "/" is not callable. Expected method "undefinedAction" on class "Symfony\Component\HttpKernel\Tests\Controller\ControllerTest". Available methods: "publicAction", "staticAction"'),
- );
- }
-
- /**
- * @group legacy
- */
- public function testGetArguments()
+ public function testGetControllerWithClosure()
{
$resolver = $this->createControllerResolver();
- $request = Request::create('/');
- $controller = array(new self(), 'testGetArguments');
- $this->assertEquals(array(), $resolver->getArguments($request, $controller), '->getArguments() returns an empty array if the method takes no arguments');
-
- $request = Request::create('/');
- $request->attributes->set('foo', 'foo');
- $controller = array(new self(), 'controllerMethod1');
- $this->assertEquals(array('foo'), $resolver->getArguments($request, $controller), '->getArguments() returns an array of arguments for the controller method');
+ $closure = function () {
+ return 'test';
+ };
$request = Request::create('/');
- $request->attributes->set('foo', 'foo');
- $controller = array(new self(), 'controllerMethod2');
- $this->assertEquals(array('foo', null), $resolver->getArguments($request, $controller), '->getArguments() uses default values if present');
-
- $request->attributes->set('bar', 'bar');
- $this->assertEquals(array('foo', 'bar'), $resolver->getArguments($request, $controller), '->getArguments() overrides default values if provided in the request attributes');
-
- $request = Request::create('/');
- $request->attributes->set('foo', 'foo');
- $controller = function ($foo) {};
- $this->assertEquals(array('foo'), $resolver->getArguments($request, $controller));
-
- $request = Request::create('/');
- $request->attributes->set('foo', 'foo');
- $controller = function ($foo, $bar = 'bar') {};
- $this->assertEquals(array('foo', 'bar'), $resolver->getArguments($request, $controller));
-
- $request = Request::create('/');
- $request->attributes->set('foo', 'foo');
- $controller = new self();
- $this->assertEquals(array('foo', null), $resolver->getArguments($request, $controller));
- $request->attributes->set('bar', 'bar');
- $this->assertEquals(array('foo', 'bar'), $resolver->getArguments($request, $controller));
-
- $request = Request::create('/');
- $request->attributes->set('foo', 'foo');
- $request->attributes->set('foobar', 'foobar');
- $controller = 'Symfony\Component\HttpKernel\Tests\Controller\some_controller_function';
- $this->assertEquals(array('foo', 'foobar'), $resolver->getArguments($request, $controller));
-
- $request = Request::create('/');
- $request->attributes->set('foo', 'foo');
- $request->attributes->set('foobar', 'foobar');
- $controller = array(new self(), 'controllerMethod3');
-
- try {
- $resolver->getArguments($request, $controller);
- $this->fail('->getArguments() throws a \RuntimeException exception if it cannot determine the argument value');
- } catch (\Exception $e) {
- $this->assertInstanceOf('\RuntimeException', $e, '->getArguments() throws a \RuntimeException exception if it cannot determine the argument value');
- }
-
- $request = Request::create('/');
- $controller = array(new self(), 'controllerMethod5');
- $this->assertEquals(array($request), $resolver->getArguments($request, $controller), '->getArguments() injects the request');
+ $request->attributes->set('_controller', $closure);
+ $controller = $resolver->getController($request);
+ $this->assertInstanceOf(\Closure::class, $controller);
+ $this->assertSame('test', $controller());
}
/**
- * @requires PHP 5.6
- * @group legacy
+ * @dataProvider getStaticControllers
*/
- public function testGetVariadicArguments()
+ public function testGetControllerWithStaticController($staticController, $returnValue)
{
- $resolver = new ControllerResolver();
-
- $request = Request::create('/');
- $request->attributes->set('foo', 'foo');
- $request->attributes->set('bar', array('foo', 'bar'));
- $controller = array(new VariadicController(), 'action');
- $this->assertEquals(array('foo', 'foo', 'bar'), $resolver->getArguments($request, $controller));
- }
-
- public function testCreateControllerCanReturnAnyCallable()
- {
- $mock = $this->getMockBuilder('Symfony\Component\HttpKernel\Controller\ControllerResolver')->setMethods(array('createController'))->getMock();
- $mock->expects($this->once())->method('createController')->will($this->returnValue('Symfony\Component\HttpKernel\Tests\Controller\some_controller_function'));
+ $resolver = $this->createControllerResolver();
$request = Request::create('/');
- $request->attributes->set('_controller', 'foobar');
- $mock->getController($request);
+ $request->attributes->set('_controller', $staticController);
+ $controller = $resolver->getController($request);
+ $this->assertSame($staticController, $controller);
+ $this->assertSame($returnValue, $controller());
}
- /**
- * @expectedException \RuntimeException
- * @group legacy
- */
- public function testIfExceptionIsThrownWhenMissingAnArgument()
+ public function getStaticControllers()
{
- $resolver = new ControllerResolver();
- $request = Request::create('/');
-
- $controller = array($this, 'controllerMethod1');
-
- $resolver->getArguments($request, $controller);
+ return array(
+ array(TestAbstractController::class.'::staticAction', 'foo'),
+ array(array(TestAbstractController::class, 'staticAction'), 'foo'),
+ array(PrivateConstructorController::class.'::staticAction', 'bar'),
+ array(array(PrivateConstructorController::class, 'staticAction'), 'bar'),
+ );
}
/**
- * @requires PHP 7.1
- * @group legacy
+ * @dataProvider getUndefinedControllers
*/
- public function testGetNullableArguments()
+ public function testGetControllerWithUndefinedController($controller, $exceptionName = null, $exceptionMessage = null)
{
- $resolver = new ControllerResolver();
+ $resolver = $this->createControllerResolver();
+ if (method_exists($this, 'expectException')) {
+ $this->expectException($exceptionName);
+ $this->expectExceptionMessage($exceptionMessage);
+ } else {
+ $this->setExpectedException($exceptionName, $exceptionMessage);
+ }
$request = Request::create('/');
- $request->attributes->set('foo', 'foo');
- $request->attributes->set('bar', new \stdClass());
- $request->attributes->set('mandatory', 'mandatory');
- $controller = array(new NullableController(), 'action');
- $this->assertEquals(array('foo', new \stdClass(), 'value', 'mandatory'), $resolver->getArguments($request, $controller));
+ $request->attributes->set('_controller', $controller);
+ $resolver->getController($request);
}
- /**
- * @requires PHP 7.1
- * @group legacy
- */
- public function testGetNullableArgumentsWithDefaults()
+ public function getUndefinedControllers()
{
- $resolver = new ControllerResolver();
+ $controller = new ControllerTest();
- $request = Request::create('/');
- $request->attributes->set('mandatory', 'mandatory');
- $controller = array(new NullableController(), 'action');
- $this->assertEquals(array(null, null, 'value', 'mandatory'), $resolver->getArguments($request, $controller));
+ return array(
+ array('foo', \Error::class, 'Class \'foo\' not found'),
+ array('oof::bar', \Error::class, 'Class \'oof\' not found'),
+ array(array('oof', 'bar'), \Error::class, 'Class \'oof\' not found'),
+ array('Symfony\Component\HttpKernel\Tests\Controller\ControllerTest::staticsAction', \InvalidArgumentException::class, 'The controller for URI "/" is not callable. Expected method "staticsAction" on class "Symfony\Component\HttpKernel\Tests\Controller\ControllerTest", did you mean "staticAction"?'),
+ array('Symfony\Component\HttpKernel\Tests\Controller\ControllerTest::privateAction', \InvalidArgumentException::class, 'The controller for URI "/" is not callable. Method "privateAction" on class "Symfony\Component\HttpKernel\Tests\Controller\ControllerTest" should be public and non-abstract'),
+ array('Symfony\Component\HttpKernel\Tests\Controller\ControllerTest::protectedAction', \InvalidArgumentException::class, 'The controller for URI "/" is not callable. Method "protectedAction" on class "Symfony\Component\HttpKernel\Tests\Controller\ControllerTest" should be public and non-abstract'),
+ array('Symfony\Component\HttpKernel\Tests\Controller\ControllerTest::undefinedAction', \InvalidArgumentException::class, 'The controller for URI "/" is not callable. Expected method "undefinedAction" on class "Symfony\Component\HttpKernel\Tests\Controller\ControllerTest". Available methods: "publicAction", "staticAction"'),
+ array('Symfony\Component\HttpKernel\Tests\Controller\ControllerTest', \InvalidArgumentException::class, 'The controller for URI "/" is not callable. Controller class "Symfony\Component\HttpKernel\Tests\Controller\ControllerTest" cannot be called without a method name. You need to implement "__invoke" or use one of the available methods: "publicAction", "staticAction".'),
+ array(array($controller, 'staticsAction'), \InvalidArgumentException::class, 'The controller for URI "/" is not callable. Expected method "staticsAction" on class "Symfony\Component\HttpKernel\Tests\Controller\ControllerTest", did you mean "staticAction"?'),
+ array(array($controller, 'privateAction'), \InvalidArgumentException::class, 'The controller for URI "/" is not callable. Method "privateAction" on class "Symfony\Component\HttpKernel\Tests\Controller\ControllerTest" should be public and non-abstract'),
+ array(array($controller, 'protectedAction'), \InvalidArgumentException::class, 'The controller for URI "/" is not callable. Method "protectedAction" on class "Symfony\Component\HttpKernel\Tests\Controller\ControllerTest" should be public and non-abstract'),
+ array(array($controller, 'undefinedAction'), \InvalidArgumentException::class, 'The controller for URI "/" is not callable. Expected method "undefinedAction" on class "Symfony\Component\HttpKernel\Tests\Controller\ControllerTest". Available methods: "publicAction", "staticAction"'),
+ array($controller, \InvalidArgumentException::class, 'The controller for URI "/" is not callable. Controller class "Symfony\Component\HttpKernel\Tests\Controller\ControllerTest" cannot be called without a method name. You need to implement "__invoke" or use one of the available methods: "publicAction", "staticAction".'),
+ array(array('a' => 'foo', 'b' => 'bar'), \InvalidArgumentException::class, 'The controller for URI "/" is not callable. Invalid array callable, expected array(controller, method).'),
+ );
}
protected function createControllerResolver(LoggerInterface $logger = null)
{
return new ControllerResolver($logger);
}
+}
- public function __invoke($foo, $bar = null)
+function some_controller_function($foo, $foobar)
+{
+}
+
+class ControllerTest
+{
+ public function __construct()
{
}
- public function controllerMethod1($foo)
+ public function __toString()
{
+ return '';
}
- protected function controllerMethod2($foo, $bar = null)
+ public function publicAction()
{
}
- protected function controllerMethod3($foo, $bar, $foobar)
+ private function privateAction()
{
}
- protected static function controllerMethod4()
+ protected function protectedAction()
{
}
- protected function controllerMethod5(Request $request)
+ public static function staticAction()
{
}
}
-function some_controller_function($foo, $foobar)
+class InvokableController
{
-}
-
-class ControllerTest
-{
- public function publicAction()
+ public function __invoke($foo, $bar = null)
{
}
+}
- private function privateAction()
+abstract class TestAbstractController
+{
+ public static function staticAction()
{
+ return 'foo';
}
+}
- protected function protectedAction()
+class PrivateConstructorController
+{
+ private function __construct()
{
}
public static function staticAction()
{
+ return 'bar';
}
}
diff --git a/vendor/symfony/http-kernel/Tests/ControllerMetadata/ArgumentMetadataFactoryTest.php b/vendor/symfony/http-kernel/Tests/ControllerMetadata/ArgumentMetadataFactoryTest.php
index bf0db5ad56..a667705f50 100644
--- a/vendor/symfony/http-kernel/Tests/ControllerMetadata/ArgumentMetadataFactoryTest.php
+++ b/vendor/symfony/http-kernel/Tests/ControllerMetadata/ArgumentMetadataFactoryTest.php
@@ -84,9 +84,6 @@ class ArgumentMetadataFactoryTest extends TestCase
), $arguments);
}
- /**
- * @requires PHP 5.6
- */
public function testVariadicSignature()
{
$arguments = $this->factory->createArgumentMetadata(array(new VariadicController(), 'action'));
@@ -97,9 +94,6 @@ class ArgumentMetadataFactoryTest extends TestCase
), $arguments);
}
- /**
- * @requires PHP 7.0
- */
public function testBasicTypesSignature()
{
$arguments = $this->factory->createArgumentMetadata(array(new BasicTypesController(), 'action'));
@@ -111,9 +105,6 @@ class ArgumentMetadataFactoryTest extends TestCase
), $arguments);
}
- /**
- * @requires PHP 7.1
- */
public function testNullableTypesSignature()
{
$arguments = $this->factory->createArgumentMetadata(array(new NullableController(), 'action'));
diff --git a/vendor/symfony/http-kernel/Tests/DataCollector/ConfigDataCollectorTest.php b/vendor/symfony/http-kernel/Tests/DataCollector/ConfigDataCollectorTest.php
index 3f51b13ce9..10b0585840 100644
--- a/vendor/symfony/http-kernel/Tests/DataCollector/ConfigDataCollectorTest.php
+++ b/vendor/symfony/http-kernel/Tests/DataCollector/ConfigDataCollectorTest.php
@@ -30,7 +30,6 @@ class ConfigDataCollectorTest extends TestCase
$this->assertSame('test', $c->getEnv());
$this->assertTrue($c->isDebug());
$this->assertSame('config', $c->getName());
- $this->assertSame('testkernel', $c->getAppName());
$this->assertRegExp('~^'.preg_quote($c->getPhpVersion(), '~').'~', PHP_VERSION);
$this->assertRegExp('~'.preg_quote((string) $c->getPhpVersionExtra(), '~').'$~', PHP_VERSION);
$this->assertSame(PHP_INT_SIZE * 8, $c->getPhpArchitecture());
@@ -42,15 +41,26 @@ class ConfigDataCollectorTest extends TestCase
$this->assertSame(\extension_loaded('Zend OPcache') && filter_var(ini_get('opcache.enable'), FILTER_VALIDATE_BOOLEAN), $c->hasZendOpcache());
$this->assertSame(\extension_loaded('apcu') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN), $c->hasApcu());
}
-}
-class KernelForTest extends Kernel
-{
- public function getName()
+ /**
+ * @group legacy
+ * @expectedDeprecation The "$name" argument in method "Symfony\Component\HttpKernel\DataCollector\ConfigDataCollector::__construct()" is deprecated since Symfony 4.2.
+ * @expectedDeprecation The "$version" argument in method "Symfony\Component\HttpKernel\DataCollector\ConfigDataCollector::__construct()" is deprecated since Symfony 4.2.
+ * @expectedDeprecation The method "Symfony\Component\HttpKernel\DataCollector\ConfigDataCollector::getApplicationName()" is deprecated since Symfony 4.2.
+ * @expectedDeprecation The method "Symfony\Component\HttpKernel\DataCollector\ConfigDataCollector::getApplicationVersion()" is deprecated since Symfony 4.2.
+ */
+ public function testLegacy()
{
- return 'testkernel';
+ $c = new ConfigDataCollector('name', null);
+ $c->collect(new Request(), new Response());
+
+ $this->assertSame('name', $c->getApplicationName());
+ $this->assertNull($c->getApplicationVersion());
}
+}
+class KernelForTest extends Kernel
+{
public function registerBundles()
{
}
diff --git a/vendor/symfony/http-kernel/Tests/DataCollector/DumpDataCollectorTest.php b/vendor/symfony/http-kernel/Tests/DataCollector/DumpDataCollectorTest.php
index fd5ea11e72..57384a79ff 100644
--- a/vendor/symfony/http-kernel/Tests/DataCollector/DumpDataCollectorTest.php
+++ b/vendor/symfony/http-kernel/Tests/DataCollector/DumpDataCollectorTest.php
@@ -17,6 +17,7 @@ use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\DataCollector\DumpDataCollector;
use Symfony\Component\VarDumper\Cloner\Data;
use Symfony\Component\VarDumper\Dumper\CliDumper;
+use Symfony\Component\VarDumper\Server\Connection;
/**
* @author Nicolas Grekas <p@tchwork.com>
@@ -56,6 +57,24 @@ class DumpDataCollectorTest extends TestCase
$this->assertSame('a:2:{i:0;b:0;i:1;s:5:"UTF-8";}', $collector->serialize());
}
+ public function testDumpWithServerConnection()
+ {
+ $data = new Data(array(array(123)));
+
+ // Server is up, server dumper is used
+ $serverDumper = $this->getMockBuilder(Connection::class)->disableOriginalConstructor()->getMock();
+ $serverDumper->expects($this->once())->method('write')->willReturn(true);
+
+ $collector = new DumpDataCollector(null, null, null, null, $serverDumper);
+ $collector->dump($data);
+
+ // Collect doesn't re-trigger dump
+ ob_start();
+ $collector->collect(new Request(), new Response());
+ $this->assertEmpty(ob_get_clean());
+ $this->assertStringMatchesFormat('a:3:{i:0;a:5:{s:4:"data";%c:39:"Symfony\Component\VarDumper\Cloner\Data":%a', $collector->serialize());
+ }
+
public function testCollectDefault()
{
$data = new Data(array(array(123)));
diff --git a/vendor/symfony/http-kernel/Tests/DataCollector/LoggerDataCollectorTest.php b/vendor/symfony/http-kernel/Tests/DataCollector/LoggerDataCollectorTest.php
index 3dec3bd7f8..b5c7057fd6 100644
--- a/vendor/symfony/http-kernel/Tests/DataCollector/LoggerDataCollectorTest.php
+++ b/vendor/symfony/http-kernel/Tests/DataCollector/LoggerDataCollectorTest.php
@@ -13,7 +13,11 @@ namespace Symfony\Component\HttpKernel\Tests\DataCollector;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Debug\Exception\SilencedErrorContext;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\RequestStack;
+use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\DataCollector\LoggerDataCollector;
+use Symfony\Component\HttpKernel\Log\DebugLoggerInterface;
class LoggerDataCollectorTest extends TestCase
{
@@ -41,6 +45,46 @@ class LoggerDataCollectorTest extends TestCase
), $compilerLogs['Unknown Compiler Pass']);
}
+ public function testWithMasterRequest()
+ {
+ $masterRequest = new Request();
+ $stack = new RequestStack();
+ $stack->push($masterRequest);
+
+ $logger = $this
+ ->getMockBuilder(DebugLoggerInterface::class)
+ ->setMethods(array('countErrors', 'getLogs', 'clear'))
+ ->getMock();
+ $logger->expects($this->once())->method('countErrors')->with(null);
+ $logger->expects($this->exactly(2))->method('getLogs')->with(null)->will($this->returnValue(array()));
+
+ $c = new LoggerDataCollector($logger, __DIR__.'/', $stack);
+
+ $c->collect($masterRequest, new Response());
+ $c->lateCollect();
+ }
+
+ public function testWithSubRequest()
+ {
+ $masterRequest = new Request();
+ $subRequest = new Request();
+ $stack = new RequestStack();
+ $stack->push($masterRequest);
+ $stack->push($subRequest);
+
+ $logger = $this
+ ->getMockBuilder(DebugLoggerInterface::class)
+ ->setMethods(array('countErrors', 'getLogs', 'clear'))
+ ->getMock();
+ $logger->expects($this->once())->method('countErrors')->with($subRequest);
+ $logger->expects($this->exactly(2))->method('getLogs')->with($subRequest)->will($this->returnValue(array()));
+
+ $c = new LoggerDataCollector($logger, __DIR__.'/', $stack);
+
+ $c->collect($subRequest, new Response());
+ $c->lateCollect();
+ }
+
/**
* @dataProvider getCollectTestData
*/
diff --git a/vendor/symfony/http-kernel/Tests/DataCollector/RequestDataCollectorTest.php b/vendor/symfony/http-kernel/Tests/DataCollector/RequestDataCollectorTest.php
index cce08e27c4..24904f7cca 100644
--- a/vendor/symfony/http-kernel/Tests/DataCollector/RequestDataCollectorTest.php
+++ b/vendor/symfony/http-kernel/Tests/DataCollector/RequestDataCollectorTest.php
@@ -225,6 +225,8 @@ class RequestDataCollectorTest extends TestCase
$cookie = $this->getCookieByName($response, 'sf_redirect');
$this->assertNotEmpty($cookie->getValue());
+ $this->assertSame('lax', $cookie->getSameSite());
+ $this->assertFalse($cookie->isSecure());
}
public function testItCollectsTheRedirectionAndClearTheCookie()
@@ -274,9 +276,9 @@ class RequestDataCollectorTest extends TestCase
$response->setStatusCode(200);
$response->headers->set('Content-Type', 'application/json');
$response->headers->set('X-Foo-Bar', null);
- $response->headers->setCookie(new Cookie('foo', 'bar', 1, '/foo', 'localhost', true, true));
- $response->headers->setCookie(new Cookie('bar', 'foo', new \DateTime('@946684800')));
- $response->headers->setCookie(new Cookie('bazz', 'foo', '2000-12-12'));
+ $response->headers->setCookie(new Cookie('foo', 'bar', 1, '/foo', 'localhost', true, true, false, null));
+ $response->headers->setCookie(new Cookie('bar', 'foo', new \DateTime('@946684800'), '/', null, false, true, false, null));
+ $response->headers->setCookie(new Cookie('bazz', 'foo', '2000-12-12', '/', null, false, true, false, null));
return $response;
}
diff --git a/vendor/symfony/http-kernel/Tests/DataCollector/Util/ValueExporterTest.php b/vendor/symfony/http-kernel/Tests/DataCollector/Util/ValueExporterTest.php
deleted file mode 100644
index 5fe92d60e0..0000000000
--- a/vendor/symfony/http-kernel/Tests/DataCollector/Util/ValueExporterTest.php
+++ /dev/null
@@ -1,51 +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\HttpKernel\Tests\DataCollector\Util;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\HttpKernel\DataCollector\Util\ValueExporter;
-
-/**
- * @group legacy
- */
-class ValueExporterTest extends TestCase
-{
- /**
- * @var ValueExporter
- */
- private $valueExporter;
-
- protected function setUp()
- {
- $this->valueExporter = new ValueExporter();
- }
-
- public function testDateTime()
- {
- $dateTime = new \DateTime('2014-06-10 07:35:40', new \DateTimeZone('UTC'));
- $this->assertSame('Object(DateTime) - 2014-06-10T07:35:40+00:00', $this->valueExporter->exportValue($dateTime));
- }
-
- public function testDateTimeImmutable()
- {
- $dateTime = new \DateTimeImmutable('2014-06-10 07:35:40', new \DateTimeZone('UTC'));
- $this->assertSame('Object(DateTimeImmutable) - 2014-06-10T07:35:40+00:00', $this->valueExporter->exportValue($dateTime));
- }
-
- public function testIncompleteClass()
- {
- $foo = new \__PHP_Incomplete_Class();
- $array = new \ArrayObject($foo);
- $array['__PHP_Incomplete_Class_Name'] = 'AppBundle/Foo';
- $this->assertSame('__PHP_Incomplete_Class(AppBundle/Foo)', $this->valueExporter->exportValue($foo));
- }
-}
diff --git a/vendor/symfony/http-kernel/Tests/DependencyInjection/ControllerArgumentValueResolverPassTest.php b/vendor/symfony/http-kernel/Tests/DependencyInjection/ControllerArgumentValueResolverPassTest.php
index df8977de0b..49bbd0f9c1 100644
--- a/vendor/symfony/http-kernel/Tests/DependencyInjection/ControllerArgumentValueResolverPassTest.php
+++ b/vendor/symfony/http-kernel/Tests/DependencyInjection/ControllerArgumentValueResolverPassTest.php
@@ -17,6 +17,7 @@ use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Reference;
use Symfony\Component\HttpKernel\Controller\ArgumentResolver;
use Symfony\Component\HttpKernel\DependencyInjection\ControllerArgumentValueResolverPass;
+use Symfony\Component\Stopwatch\Stopwatch;
class ControllerArgumentValueResolverPassTest extends TestCase
{
@@ -42,8 +43,69 @@ class ControllerArgumentValueResolverPassTest extends TestCase
$container->register($id)->addTag('controller.argument_value_resolver', $tag);
}
+ $container->setParameter('kernel.debug', false);
+
(new ControllerArgumentValueResolverPass())->process($container);
$this->assertEquals($expected, $definition->getArgument(1)->getValues());
+
+ $this->assertFalse($container->hasDefinition('n1.traceable'));
+ $this->assertFalse($container->hasDefinition('n2.traceable'));
+ $this->assertFalse($container->hasDefinition('n3.traceable'));
+ }
+
+ public function testInDebugWithStopWatchDefinition()
+ {
+ $services = array(
+ 'n3' => array(array()),
+ 'n1' => array(array('priority' => 200)),
+ 'n2' => array(array('priority' => 100)),
+ );
+
+ $expected = array(
+ new Reference('n1'),
+ new Reference('n2'),
+ new Reference('n3'),
+ );
+
+ $definition = new Definition(ArgumentResolver::class, array(null, array()));
+ $container = new ContainerBuilder();
+ $container->register('debug.stopwatch', Stopwatch::class);
+ $container->setDefinition('argument_resolver', $definition);
+
+ foreach ($services as $id => list($tag)) {
+ $container->register($id)->addTag('controller.argument_value_resolver', $tag);
+ }
+
+ $container->setParameter('kernel.debug', true);
+
+ (new ControllerArgumentValueResolverPass())->process($container);
+ $this->assertEquals($expected, $definition->getArgument(1)->getValues());
+
+ $this->assertTrue($container->hasDefinition('debug.n1'));
+ $this->assertTrue($container->hasDefinition('debug.n2'));
+ $this->assertTrue($container->hasDefinition('debug.n3'));
+
+ $this->assertTrue($container->hasDefinition('n1'));
+ $this->assertTrue($container->hasDefinition('n2'));
+ $this->assertTrue($container->hasDefinition('n3'));
+ }
+
+ public function testInDebugWithouStopWatchDefinition()
+ {
+ $expected = array(new Reference('n1'));
+
+ $definition = new Definition(ArgumentResolver::class, array(null, array()));
+ $container = new ContainerBuilder();
+ $container->register('n1')->addTag('controller.argument_value_resolver');
+ $container->setDefinition('argument_resolver', $definition);
+
+ $container->setParameter('kernel.debug', true);
+
+ (new ControllerArgumentValueResolverPass())->process($container);
+ $this->assertEquals($expected, $definition->getArgument(1)->getValues());
+
+ $this->assertFalse($container->hasDefinition('debug.n1'));
+ $this->assertTrue($container->hasDefinition('n1'));
}
public function testReturningEmptyArrayWhenNoService()
@@ -52,6 +114,8 @@ class ControllerArgumentValueResolverPassTest extends TestCase
$container = new ContainerBuilder();
$container->setDefinition('argument_resolver', $definition);
+ $container->setParameter('kernel.debug', false);
+
(new ControllerArgumentValueResolverPass())->process($container);
$this->assertEquals(array(), $definition->getArgument(1)->getValues());
}
diff --git a/vendor/symfony/http-kernel/Tests/DependencyInjection/LazyLoadingFragmentHandlerTest.php b/vendor/symfony/http-kernel/Tests/DependencyInjection/LazyLoadingFragmentHandlerTest.php
index 95baaa54c1..2bc84a53c8 100644
--- a/vendor/symfony/http-kernel/Tests/DependencyInjection/LazyLoadingFragmentHandlerTest.php
+++ b/vendor/symfony/http-kernel/Tests/DependencyInjection/LazyLoadingFragmentHandlerTest.php
@@ -18,31 +18,6 @@ use Symfony\Component\HttpKernel\DependencyInjection\LazyLoadingFragmentHandler;
class LazyLoadingFragmentHandlerTest extends TestCase
{
- /**
- * @group legacy
- * @expectedDeprecation The Symfony\Component\HttpKernel\DependencyInjection\LazyLoadingFragmentHandler::addRendererService() method is deprecated since Symfony 3.3 and will be removed in 4.0.
- */
- public function testRenderWithLegacyMapping()
- {
- $renderer = $this->getMockBuilder('Symfony\Component\HttpKernel\Fragment\FragmentRendererInterface')->getMock();
- $renderer->expects($this->once())->method('getName')->will($this->returnValue('foo'));
- $renderer->expects($this->any())->method('render')->will($this->returnValue(new Response()));
-
- $requestStack = $this->getMockBuilder('Symfony\Component\HttpFoundation\RequestStack')->getMock();
- $requestStack->expects($this->any())->method('getCurrentRequest')->will($this->returnValue(Request::create('/')));
-
- $container = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerInterface')->getMock();
- $container->expects($this->once())->method('get')->will($this->returnValue($renderer));
-
- $handler = new LazyLoadingFragmentHandler($container, $requestStack, false);
- $handler->addRendererService('foo', 'foo');
-
- $handler->render('/foo', 'foo');
-
- // second call should not lazy-load anymore (see once() above on the get() method)
- $handler->render('/foo', 'foo');
- }
-
public function testRender()
{
$renderer = $this->getMockBuilder('Symfony\Component\HttpKernel\Fragment\FragmentRendererInterface')->getMock();
diff --git a/vendor/symfony/http-kernel/Tests/DependencyInjection/RegisterControllerArgumentLocatorsPassTest.php b/vendor/symfony/http-kernel/Tests/DependencyInjection/RegisterControllerArgumentLocatorsPassTest.php
index ca121c7327..d03ea53a37 100644
--- a/vendor/symfony/http-kernel/Tests/DependencyInjection/RegisterControllerArgumentLocatorsPassTest.php
+++ b/vendor/symfony/http-kernel/Tests/DependencyInjection/RegisterControllerArgumentLocatorsPassTest.php
@@ -141,15 +141,15 @@ class RegisterControllerArgumentLocatorsPassTest extends TestCase
$locator = $container->getDefinition((string) $resolver->getArgument(0))->getArgument(0);
- $this->assertEquals(array('foo:fooAction'), array_keys($locator));
- $this->assertInstanceof(ServiceClosureArgument::class, $locator['foo:fooAction']);
+ $this->assertEquals(array('foo::fooAction'), array_keys($locator));
+ $this->assertInstanceof(ServiceClosureArgument::class, $locator['foo::fooAction']);
- $locator = $container->getDefinition((string) $locator['foo:fooAction']->getValues()[0]);
+ $locator = $container->getDefinition((string) $locator['foo::fooAction']->getValues()[0]);
$this->assertSame(ServiceLocator::class, $locator->getClass());
$this->assertFalse($locator->isPublic());
- $expected = array('bar' => new ServiceClosureArgument(new TypedReference(ControllerDummy::class, ControllerDummy::class, RegisterTestController::class, ContainerInterface::IGNORE_ON_INVALID_REFERENCE)));
+ $expected = array('bar' => new ServiceClosureArgument(new TypedReference(ControllerDummy::class, ControllerDummy::class, ContainerInterface::RUNTIME_EXCEPTION_ON_INVALID_REFERENCE, 'bar')));
$this->assertEquals($expected, $locator->getArgument(0));
}
@@ -167,9 +167,9 @@ class RegisterControllerArgumentLocatorsPassTest extends TestCase
$pass->process($container);
$locator = $container->getDefinition((string) $resolver->getArgument(0))->getArgument(0);
- $locator = $container->getDefinition((string) $locator['foo:fooAction']->getValues()[0]);
+ $locator = $container->getDefinition((string) $locator['foo::fooAction']->getValues()[0]);
- $expected = array('bar' => new ServiceClosureArgument(new TypedReference('bar', ControllerDummy::class, RegisterTestController::class)));
+ $expected = array('bar' => new ServiceClosureArgument(new TypedReference('bar', ControllerDummy::class, ContainerInterface::RUNTIME_EXCEPTION_ON_INVALID_REFERENCE)));
$this->assertEquals($expected, $locator->getArgument(0));
}
@@ -186,9 +186,9 @@ class RegisterControllerArgumentLocatorsPassTest extends TestCase
$pass->process($container);
$locator = $container->getDefinition((string) $resolver->getArgument(0))->getArgument(0);
- $locator = $container->getDefinition((string) $locator['foo:fooAction']->getValues()[0]);
+ $locator = $container->getDefinition((string) $locator['foo::fooAction']->getValues()[0]);
- $expected = array('bar' => new ServiceClosureArgument(new TypedReference('bar', ControllerDummy::class, RegisterTestController::class, ContainerInterface::IGNORE_ON_INVALID_REFERENCE)));
+ $expected = array('bar' => new ServiceClosureArgument(new TypedReference('bar', ControllerDummy::class, ContainerInterface::IGNORE_ON_INVALID_REFERENCE)));
$this->assertEquals($expected, $locator->getArgument(0));
}
@@ -204,7 +204,7 @@ class RegisterControllerArgumentLocatorsPassTest extends TestCase
$pass->process($container);
$locator = $container->getDefinition((string) $resolver->getArgument(0))->getArgument(0);
- $this->assertSame(array('foo:fooAction'), array_keys($locator));
+ $this->assertSame(array('foo::fooAction'), array_keys($locator));
}
/**
@@ -251,7 +251,7 @@ class RegisterControllerArgumentLocatorsPassTest extends TestCase
$pass->process($container);
$locator = $container->getDefinition((string) $resolver->getArgument(0))->getArgument(0);
- $this->assertSame(array('foo:barAction', 'foo:fooAction'), array_keys($locator));
+ $this->assertSame(array('foo::barAction', 'foo::fooAction'), array_keys($locator));
}
public function testArgumentWithNoTypeHintIsOk()
@@ -301,7 +301,7 @@ class RegisterControllerArgumentLocatorsPassTest extends TestCase
$locator = $container->getDefinition((string) $resolver->getArgument(0))->getArgument(0);
- $locator = $container->getDefinition((string) $locator['foo:fooAction']->getValues()[0]);
+ $locator = $container->getDefinition((string) $locator['foo::fooAction']->getValues()[0]);
$expected = array('bar' => new ServiceClosureArgument(new Reference('foo')));
$this->assertEquals($expected, $locator->getArgument(0));
@@ -309,23 +309,49 @@ class RegisterControllerArgumentLocatorsPassTest extends TestCase
public function provideBindings()
{
- return array(array(ControllerDummy::class), array('$bar'));
+ return array(
+ array(ControllerDummy::class.'$bar'),
+ array(ControllerDummy::class),
+ array('$bar'),
+ );
}
- public function testDoNotBindScalarValueToControllerArgument()
+ /**
+ * @dataProvider provideBindScalarValueToControllerArgument
+ */
+ public function testBindScalarValueToControllerArgument($bindingKey)
{
$container = new ContainerBuilder();
$resolver = $container->register('argument_resolver.service')->addArgument(array());
$container->register('foo', ArgumentWithoutTypeController::class)
- ->setBindings(array('$someArg' => '%foo%'))
+ ->setBindings(array($bindingKey => '%foo%'))
->addTag('controller.service_arguments');
+ $container->setParameter('foo', 'foo_val');
+
$pass = new RegisterControllerArgumentLocatorsPass();
$pass->process($container);
$locator = $container->getDefinition((string) $resolver->getArgument(0))->getArgument(0);
- $this->assertEmpty($locator);
+
+ $locator = $container->getDefinition((string) $locator['foo::fooAction']->getValues()[0]);
+
+ // assert the locator has a someArg key
+ $arguments = $locator->getArgument(0);
+ $this->assertArrayHasKey('someArg', $arguments);
+ $this->assertInstanceOf(ServiceClosureArgument::class, $arguments['someArg']);
+ // get the Reference that someArg points to
+ $reference = $arguments['someArg']->getValues()[0];
+ // make sure this service *does* exist and returns the correct value
+ $this->assertTrue($container->has((string) $reference));
+ $this->assertSame('foo_val', $container->get((string) $reference));
+ }
+
+ public function provideBindScalarValueToControllerArgument()
+ {
+ yield array('$someArg');
+ yield array('string $someArg');
}
public function testBindingsOnChildDefinitions()
@@ -344,9 +370,9 @@ class RegisterControllerArgumentLocatorsPassTest extends TestCase
$pass->process($container);
$locator = $container->getDefinition((string) $resolver->getArgument(0))->getArgument(0);
- $this->assertInstanceOf(ServiceClosureArgument::class, $locator['child:fooAction']);
+ $this->assertInstanceOf(ServiceClosureArgument::class, $locator['child::fooAction']);
- $locator = $container->getDefinition((string) $locator['child:fooAction']->getValues()[0])->getArgument(0);
+ $locator = $container->getDefinition((string) $locator['child::fooAction']->getValues()[0])->getArgument(0);
$this->assertInstanceOf(ServiceClosureArgument::class, $locator['someArg']);
$this->assertEquals(new Reference('parent'), $locator['someArg']->getValues()[0]);
}
@@ -407,7 +433,7 @@ class NonExistentClassOptionalController
class ArgumentWithoutTypeController
{
- public function fooAction($someArg)
+ public function fooAction(string $someArg)
{
}
}
diff --git a/vendor/symfony/http-kernel/Tests/DependencyInjection/RemoveEmptyControllerArgumentLocatorsPassTest.php b/vendor/symfony/http-kernel/Tests/DependencyInjection/RemoveEmptyControllerArgumentLocatorsPassTest.php
index 9cac968185..dfec38347d 100644
--- a/vendor/symfony/http-kernel/Tests/DependencyInjection/RemoveEmptyControllerArgumentLocatorsPassTest.php
+++ b/vendor/symfony/http-kernel/Tests/DependencyInjection/RemoveEmptyControllerArgumentLocatorsPassTest.php
@@ -36,49 +36,30 @@ class RemoveEmptyControllerArgumentLocatorsPassTest extends TestCase
$controllers = $container->getDefinition((string) $resolver->getArgument(0))->getArgument(0);
- $this->assertCount(2, $container->getDefinition((string) $controllers['c1:fooAction']->getValues()[0])->getArgument(0));
- $this->assertCount(1, $container->getDefinition((string) $controllers['c2:setTestCase']->getValues()[0])->getArgument(0));
- $this->assertCount(1, $container->getDefinition((string) $controllers['c2:fooAction']->getValues()[0])->getArgument(0));
+ $this->assertCount(2, $container->getDefinition((string) $controllers['c1::fooAction']->getValues()[0])->getArgument(0));
+ $this->assertCount(1, $container->getDefinition((string) $controllers['c2::setTestCase']->getValues()[0])->getArgument(0));
+ $this->assertCount(1, $container->getDefinition((string) $controllers['c2::fooAction']->getValues()[0])->getArgument(0));
(new ResolveInvalidReferencesPass())->process($container);
- $this->assertCount(1, $container->getDefinition((string) $controllers['c2:setTestCase']->getValues()[0])->getArgument(0));
- $this->assertSame(array(), $container->getDefinition((string) $controllers['c2:fooAction']->getValues()[0])->getArgument(0));
+ $this->assertCount(1, $container->getDefinition((string) $controllers['c2::setTestCase']->getValues()[0])->getArgument(0));
+ $this->assertSame(array(), $container->getDefinition((string) $controllers['c2::fooAction']->getValues()[0])->getArgument(0));
(new RemoveEmptyControllerArgumentLocatorsPass())->process($container);
$controllers = $container->getDefinition((string) $resolver->getArgument(0))->getArgument(0);
- $this->assertSame(array('c1:fooAction'), array_keys($controllers));
- $this->assertSame(array('bar'), array_keys($container->getDefinition((string) $controllers['c1:fooAction']->getValues()[0])->getArgument(0)));
+ $this->assertSame(array('c1::fooAction', 'c1:fooAction'), array_keys($controllers));
+ $this->assertSame(array('bar'), array_keys($container->getDefinition((string) $controllers['c1::fooAction']->getValues()[0])->getArgument(0)));
$expectedLog = array(
- 'Symfony\Component\HttpKernel\DependencyInjection\RemoveEmptyControllerArgumentLocatorsPass: Removing service-argument resolver for controller "c2:fooAction": no corresponding services exist for the referenced types.',
+ 'Symfony\Component\HttpKernel\DependencyInjection\RemoveEmptyControllerArgumentLocatorsPass: Removing service-argument resolver for controller "c2::fooAction": no corresponding services exist for the referenced types.',
'Symfony\Component\HttpKernel\DependencyInjection\RemoveEmptyControllerArgumentLocatorsPass: Removing method "setTestCase" of service "c2" from controller candidates: the method is called at instantiation, thus cannot be an action.',
);
$this->assertSame($expectedLog, $container->getCompiler()->getLog());
}
- public function testSameIdClass()
- {
- $container = new ContainerBuilder();
- $resolver = $container->register('argument_resolver.service')->addArgument(array());
-
- $container->register(RegisterTestController::class, RegisterTestController::class)
- ->addTag('controller.service_arguments')
- ;
-
- (new RegisterControllerArgumentLocatorsPass())->process($container);
- (new RemoveEmptyControllerArgumentLocatorsPass())->process($container);
-
- $expected = array(
- RegisterTestController::class.':fooAction',
- RegisterTestController::class.'::fooAction',
- );
- $this->assertEquals($expected, array_keys($container->getDefinition((string) $resolver->getArgument(0))->getArgument(0)));
- }
-
public function testInvoke()
{
$container = new ContainerBuilder();
@@ -92,35 +73,15 @@ class RemoveEmptyControllerArgumentLocatorsPassTest extends TestCase
(new RemoveEmptyControllerArgumentLocatorsPass())->process($container);
$this->assertEquals(
- array('invokable:__invoke', 'invokable'),
+ array('invokable::__invoke', 'invokable:__invoke', 'invokable'),
array_keys($container->getDefinition((string) $resolver->getArgument(0))->getArgument(0))
);
}
-
- public function testInvokeSameIdClass()
- {
- $container = new ContainerBuilder();
- $resolver = $container->register('argument_resolver.service')->addArgument(array());
-
- $container->register(InvokableRegisterTestController::class, InvokableRegisterTestController::class)
- ->addTag('controller.service_arguments')
- ;
-
- (new RegisterControllerArgumentLocatorsPass())->process($container);
- (new RemoveEmptyControllerArgumentLocatorsPass())->process($container);
-
- $expected = array(
- InvokableRegisterTestController::class.':__invoke',
- InvokableRegisterTestController::class.'::__invoke',
- InvokableRegisterTestController::class,
- );
- $this->assertEquals($expected, array_keys($container->getDefinition((string) $resolver->getArgument(0))->getArgument(0)));
- }
}
class RemoveTestController1
{
- public function fooAction(\stdClass $bar, ClassNotInContainer $baz)
+ public function fooAction(\stdClass $bar, ClassNotInContainer $baz = null)
{
}
}
@@ -131,7 +92,7 @@ class RemoveTestController2
{
}
- public function fooAction(ClassNotInContainer $bar)
+ public function fooAction(ClassNotInContainer $bar = null)
{
}
}
diff --git a/vendor/symfony/http-kernel/Tests/EventListener/ExceptionListenerTest.php b/vendor/symfony/http-kernel/Tests/EventListener/ExceptionListenerTest.php
index 0b73075e7b..5251976e49 100644
--- a/vendor/symfony/http-kernel/Tests/EventListener/ExceptionListenerTest.php
+++ b/vendor/symfony/http-kernel/Tests/EventListener/ExceptionListenerTest.php
@@ -54,11 +54,13 @@ class ExceptionListenerTest extends TestCase
$this->iniSet('error_log', file_exists('/dev/null') ? '/dev/null' : 'nul');
$l = new ExceptionListener('foo');
+ $l->logKernelException($event);
$l->onKernelException($event);
$this->assertEquals(new Response('foo'), $event->getResponse());
try {
+ $l->logKernelException($event2);
$l->onKernelException($event2);
$this->fail('RuntimeException expected');
} catch (\RuntimeException $e) {
@@ -75,11 +77,13 @@ class ExceptionListenerTest extends TestCase
$logger = new TestLogger();
$l = new ExceptionListener('foo', $logger);
+ $l->logKernelException($event);
$l->onKernelException($event);
$this->assertEquals(new Response('foo'), $event->getResponse());
try {
+ $l->logKernelException($event2);
$l->onKernelException($event2);
$this->fail('RuntimeException expected');
} catch (\RuntimeException $e) {
@@ -151,6 +155,25 @@ class ExceptionListenerTest extends TestCase
$this->assertFalse($response->headers->has('content-security-policy'), 'CSP header has been removed');
$this->assertFalse($dispatcher->hasListeners(KernelEvents::RESPONSE), 'CSP removal listener has been removed');
}
+
+ public function testNullController()
+ {
+ $listener = new ExceptionListener(null);
+ $kernel = $this->getMockBuilder(HttpKernelInterface::class)->getMock();
+ $kernel->expects($this->once())->method('handle')->will($this->returnCallback(function (Request $request) {
+ $controller = $request->attributes->get('_controller');
+
+ return $controller();
+ }));
+ $request = Request::create('/');
+ $event = new GetResponseForExceptionEvent($kernel, $request, HttpKernelInterface::MASTER_REQUEST, new \Exception('foo'));
+
+ $listener->onKernelException($event);
+ $this->assertNull($event->getResponse());
+
+ $listener->onKernelException($event);
+ $this->assertContains('Whoops, looks like something went wrong.', $event->getResponse()->getContent());
+ }
}
class TestLogger extends Logger implements DebugLoggerInterface
diff --git a/vendor/symfony/http-kernel/Tests/EventListener/RouterListenerTest.php b/vendor/symfony/http-kernel/Tests/EventListener/RouterListenerTest.php
index ecbce409fb..92e7272965 100644
--- a/vendor/symfony/http-kernel/Tests/EventListener/RouterListenerTest.php
+++ b/vendor/symfony/http-kernel/Tests/EventListener/RouterListenerTest.php
@@ -70,12 +70,7 @@ class RouterListenerTest extends TestCase
);
}
- /**
- * @param string $uri
- *
- * @return GetResponseEvent
- */
- private function createGetResponseEventForUri($uri)
+ private function createGetResponseEventForUri(string $uri): GetResponseEvent
{
$kernel = $this->getMockBuilder('Symfony\Component\HttpKernel\HttpKernelInterface')->getMock();
$request = Request::create($uri);
diff --git a/vendor/symfony/http-kernel/Tests/EventListener/SaveSessionListenerTest.php b/vendor/symfony/http-kernel/Tests/EventListener/SaveSessionListenerTest.php
index 5492c3d784..a903fd5891 100644
--- a/vendor/symfony/http-kernel/Tests/EventListener/SaveSessionListenerTest.php
+++ b/vendor/symfony/http-kernel/Tests/EventListener/SaveSessionListenerTest.php
@@ -19,6 +19,9 @@ use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
use Symfony\Component\HttpKernel\EventListener\SaveSessionListener;
use Symfony\Component\HttpKernel\HttpKernelInterface;
+/**
+ * @group legacy
+ */
class SaveSessionListenerTest extends TestCase
{
public function testOnlyTriggeredOnMasterRequest()
diff --git a/vendor/symfony/http-kernel/Tests/EventListener/SessionListenerTest.php b/vendor/symfony/http-kernel/Tests/EventListener/SessionListenerTest.php
index 1b95d19f9c..e6255a56e1 100644
--- a/vendor/symfony/http-kernel/Tests/EventListener/SessionListenerTest.php
+++ b/vendor/symfony/http-kernel/Tests/EventListener/SessionListenerTest.php
@@ -13,6 +13,7 @@ namespace Symfony\Component\HttpKernel\Tests\EventListener;
use PHPUnit\Framework\TestCase;
use Symfony\Component\DependencyInjection\Container;
+use Symfony\Component\DependencyInjection\ServiceLocator;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\Session;
@@ -56,25 +57,73 @@ class SessionListenerTest extends TestCase
$this->assertSame($session, $request->getSession());
}
- public function testResponseIsPrivate()
+ public function testResponseIsPrivateIfSessionStarted()
{
$session = $this->getMockBuilder(Session::class)->disableOriginalConstructor()->getMock();
$session->expects($this->exactly(2))->method('getUsageIndex')->will($this->onConsecutiveCalls(0, 1));
$container = new Container();
- $container->set('session', $session);
+ $container->set('initialized_session', $session);
$listener = new SessionListener($container);
$kernel = $this->getMockBuilder(HttpKernelInterface::class)->disableOriginalConstructor()->getMock();
$request = new Request();
- $response = new Response();
$listener->onKernelRequest(new GetResponseEvent($kernel, $request, HttpKernelInterface::MASTER_REQUEST));
- $listener->onKernelResponse(new FilterResponseEvent($kernel, $request, HttpKernelInterface::MASTER_REQUEST, $response));
+
+ $response = new Response();
+ $listener->onKernelResponse(new FilterResponseEvent($kernel, new Request(), HttpKernelInterface::MASTER_REQUEST, $response));
$this->assertTrue($response->headers->hasCacheControlDirective('private'));
$this->assertTrue($response->headers->hasCacheControlDirective('must-revalidate'));
$this->assertSame('0', $response->headers->getCacheControlDirective('max-age'));
+ $this->assertFalse($response->headers->has(AbstractSessionListener::NO_AUTO_CACHE_CONTROL_HEADER));
+ }
+
+ public function testResponseIsStillPublicIfSessionStartedAndHeaderPresent()
+ {
+ $session = $this->getMockBuilder(Session::class)->disableOriginalConstructor()->getMock();
+ $session->expects($this->exactly(2))->method('getUsageIndex')->will($this->onConsecutiveCalls(0, 1));
+
+ $container = new Container();
+ $container->set('initialized_session', $session);
+
+ $listener = new SessionListener($container);
+ $kernel = $this->getMockBuilder(HttpKernelInterface::class)->disableOriginalConstructor()->getMock();
+
+ $request = new Request();
+ $listener->onKernelRequest(new GetResponseEvent($kernel, $request, HttpKernelInterface::MASTER_REQUEST));
+
+ $response = new Response();
+ $response->setSharedMaxAge(60);
+ $response->headers->set(AbstractSessionListener::NO_AUTO_CACHE_CONTROL_HEADER, 'true');
+ $listener->onKernelResponse(new FilterResponseEvent($kernel, new Request(), HttpKernelInterface::MASTER_REQUEST, $response));
+
+ $this->assertTrue($response->headers->hasCacheControlDirective('public'));
+ $this->assertFalse($response->headers->hasCacheControlDirective('private'));
+ $this->assertFalse($response->headers->hasCacheControlDirective('must-revalidate'));
+ $this->assertSame('60', $response->headers->getCacheControlDirective('s-maxage'));
+ $this->assertFalse($response->headers->has(AbstractSessionListener::NO_AUTO_CACHE_CONTROL_HEADER));
+ }
+
+ public function testUninitializedSession()
+ {
+ $kernel = $this->getMockBuilder(HttpKernelInterface::class)->disableOriginalConstructor()->getMock();
+ $response = new Response();
+ $response->setSharedMaxAge(60);
+ $response->headers->set(AbstractSessionListener::NO_AUTO_CACHE_CONTROL_HEADER, 'true');
+
+ $container = new ServiceLocator(array(
+ 'initialized_session' => function () {},
+ ));
+
+ $listener = new SessionListener($container);
+ $listener->onKernelResponse(new FilterResponseEvent($kernel, new Request(), HttpKernelInterface::MASTER_REQUEST, $response));
+ $this->assertTrue($response->headers->hasCacheControlDirective('public'));
+ $this->assertFalse($response->headers->hasCacheControlDirective('private'));
+ $this->assertFalse($response->headers->hasCacheControlDirective('must-revalidate'));
+ $this->assertSame('60', $response->headers->getCacheControlDirective('s-maxage'));
+ $this->assertFalse($response->headers->has(AbstractSessionListener::NO_AUTO_CACHE_CONTROL_HEADER));
}
public function testSurrogateMasterRequestIsPublic()
@@ -83,6 +132,7 @@ class SessionListenerTest extends TestCase
$session->expects($this->exactly(4))->method('getUsageIndex')->will($this->onConsecutiveCalls(0, 1, 1, 1));
$container = new Container();
+ $container->set('initialized_session', $session);
$container->set('session', $session);
$listener = new SessionListener($container);
diff --git a/vendor/symfony/http-kernel/Tests/EventListener/TestSessionListenerTest.php b/vendor/symfony/http-kernel/Tests/EventListener/TestSessionListenerTest.php
index 0d0985ca5d..cd52bd56e2 100644
--- a/vendor/symfony/http-kernel/Tests/EventListener/TestSessionListenerTest.php
+++ b/vendor/symfony/http-kernel/Tests/EventListener/TestSessionListenerTest.php
@@ -12,7 +12,6 @@
namespace Symfony\Component\HttpKernel\Tests\EventListener;
use PHPUnit\Framework\TestCase;
-use Symfony\Component\DependencyInjection\ServiceSubscriberInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
@@ -144,13 +143,14 @@ class TestSessionListenerTest extends TestCase
$this->filterResponse(new Request());
}
- public function testDoesNotImplementServiceSubscriberInterface()
+ public function testDoesNotThrowIfRequestDoesNotHaveASession()
{
- $this->assertTrue(interface_exists(ServiceSubscriberInterface::class));
- $this->assertTrue(class_exists(SessionListener::class));
- $this->assertTrue(class_exists(TestSessionListener::class));
- $this->assertFalse(is_subclass_of(SessionListener::class, ServiceSubscriberInterface::class), 'Implementing ServiceSubscriberInterface would create a dep on the DI component, which eg Silex cannot afford');
- $this->assertFalse(is_subclass_of(TestSessionListener::class, ServiceSubscriberInterface::class, 'Implementing ServiceSubscriberInterface would create a dep on the DI component, which eg Silex cannot afford'));
+ $kernel = $this->getMockBuilder('Symfony\Component\HttpKernel\HttpKernelInterface')->getMock();
+ $event = new FilterResponseEvent($kernel, new Request(), HttpKernelInterface::MASTER_REQUEST, new Response());
+
+ $this->listener->onKernelResponse($event);
+
+ $this->assertTrue(true);
}
private function filterResponse(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, Response $response = null)
diff --git a/vendor/symfony/http-kernel/Tests/EventListener/TranslatorListenerTest.php b/vendor/symfony/http-kernel/Tests/EventListener/TranslatorListenerTest.php
index 23b833177a..c4cb9d053b 100644
--- a/vendor/symfony/http-kernel/Tests/EventListener/TranslatorListenerTest.php
+++ b/vendor/symfony/http-kernel/Tests/EventListener/TranslatorListenerTest.php
@@ -17,6 +17,7 @@ use Symfony\Component\HttpKernel\Event\FinishRequestEvent;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\EventListener\TranslatorListener;
use Symfony\Component\HttpKernel\HttpKernelInterface;
+use Symfony\Contracts\Translation\TranslatorInterface;
class TranslatorListenerTest extends TestCase
{
@@ -26,7 +27,7 @@ class TranslatorListenerTest extends TestCase
protected function setUp()
{
- $this->translator = $this->getMockBuilder('Symfony\Component\Translation\TranslatorInterface')->getMock();
+ $this->translator = $this->getMockBuilder(TranslatorInterface::class)->getMock();
$this->requestStack = $this->getMockBuilder('Symfony\Component\HttpFoundation\RequestStack')->getMock();
$this->listener = new TranslatorListener($this->translator, $this->requestStack);
}
diff --git a/vendor/symfony/http-kernel/Tests/Exception/MethodNotAllowedHttpExceptionTest.php b/vendor/symfony/http-kernel/Tests/Exception/MethodNotAllowedHttpExceptionTest.php
index b5def13ce3..ea82014952 100644
--- a/vendor/symfony/http-kernel/Tests/Exception/MethodNotAllowedHttpExceptionTest.php
+++ b/vendor/symfony/http-kernel/Tests/Exception/MethodNotAllowedHttpExceptionTest.php
@@ -12,6 +12,19 @@ class MethodNotAllowedHttpExceptionTest extends HttpExceptionTest
$this->assertSame(array('Allow' => 'GET, PUT'), $exception->getHeaders());
}
+ public function testWithHeaderConstruct()
+ {
+ $headers = array(
+ 'Cache-Control' => 'public, s-maxage=1200',
+ );
+
+ $exception = new MethodNotAllowedHttpException(array('get'), null, null, null, $headers);
+
+ $headers['Allow'] = 'GET';
+
+ $this->assertSame($headers, $exception->getHeaders());
+ }
+
/**
* @dataProvider headerDataProvider
*/
diff --git a/vendor/symfony/http-kernel/Tests/Exception/ServiceUnavailableHttpExceptionTest.php b/vendor/symfony/http-kernel/Tests/Exception/ServiceUnavailableHttpExceptionTest.php
index e41a23d4e7..83cbdc2bcc 100644
--- a/vendor/symfony/http-kernel/Tests/Exception/ServiceUnavailableHttpExceptionTest.php
+++ b/vendor/symfony/http-kernel/Tests/Exception/ServiceUnavailableHttpExceptionTest.php
@@ -12,6 +12,19 @@ class ServiceUnavailableHttpExceptionTest extends HttpExceptionTest
$this->assertSame(array('Retry-After' => 10), $exception->getHeaders());
}
+ public function testWithHeaderConstruct()
+ {
+ $headers = array(
+ 'Cache-Control' => 'public, s-maxage=1337',
+ );
+
+ $exception = new ServiceUnavailableHttpException(1337, null, null, null, $headers);
+
+ $headers['Retry-After'] = 1337;
+
+ $this->assertSame($headers, $exception->getHeaders());
+ }
+
/**
* @dataProvider headerDataProvider
*/
diff --git a/vendor/symfony/http-kernel/Tests/Exception/TooManyRequestsHttpExceptionTest.php b/vendor/symfony/http-kernel/Tests/Exception/TooManyRequestsHttpExceptionTest.php
index 2079bb3380..6ec7f3d079 100644
--- a/vendor/symfony/http-kernel/Tests/Exception/TooManyRequestsHttpExceptionTest.php
+++ b/vendor/symfony/http-kernel/Tests/Exception/TooManyRequestsHttpExceptionTest.php
@@ -12,6 +12,19 @@ class TooManyRequestsHttpExceptionTest extends HttpExceptionTest
$this->assertSame(array('Retry-After' => 10), $exception->getHeaders());
}
+ public function testWithHeaderConstruct()
+ {
+ $headers = array(
+ 'Cache-Control' => 'public, s-maxage=69',
+ );
+
+ $exception = new TooManyRequestsHttpException(69, null, null, null, $headers);
+
+ $headers['Retry-After'] = 69;
+
+ $this->assertSame($headers, $exception->getHeaders());
+ }
+
/**
* @dataProvider headerDataProvider
*/
diff --git a/vendor/symfony/http-kernel/Tests/Exception/UnauthorizedHttpExceptionTest.php b/vendor/symfony/http-kernel/Tests/Exception/UnauthorizedHttpExceptionTest.php
index 37a0028dc8..1e93d25b1a 100644
--- a/vendor/symfony/http-kernel/Tests/Exception/UnauthorizedHttpExceptionTest.php
+++ b/vendor/symfony/http-kernel/Tests/Exception/UnauthorizedHttpExceptionTest.php
@@ -12,6 +12,19 @@ class UnauthorizedHttpExceptionTest extends HttpExceptionTest
$this->assertSame(array('WWW-Authenticate' => 'Challenge'), $exception->getHeaders());
}
+ public function testWithHeaderConstruct()
+ {
+ $headers = array(
+ 'Cache-Control' => 'public, s-maxage=1200',
+ );
+
+ $exception = new UnauthorizedHttpException('Challenge', null, null, null, $headers);
+
+ $headers['WWW-Authenticate'] = 'Challenge';
+
+ $this->assertSame($headers, $exception->getHeaders());
+ }
+
/**
* @dataProvider headerDataProvider
*/
diff --git a/vendor/symfony/http-kernel/Tests/Fixtures/123/Kernel123.php b/vendor/symfony/http-kernel/Tests/Fixtures/123/Kernel123.php
deleted file mode 100644
index d3a76684df..0000000000
--- a/vendor/symfony/http-kernel/Tests/Fixtures/123/Kernel123.php
+++ /dev/null
@@ -1,37 +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\HttpKernel\Tests\Fixtures\_123;
-
-use Symfony\Component\Config\Loader\LoaderInterface;
-use Symfony\Component\HttpKernel\Kernel;
-
-class Kernel123 extends Kernel
-{
- public function registerBundles()
- {
- return array();
- }
-
- public function registerContainerConfiguration(LoaderInterface $loader)
- {
- }
-
- public function getCacheDir()
- {
- return sys_get_temp_dir().'/'.Kernel::VERSION.'/kernel123/cache/'.$this->environment;
- }
-
- public function getLogDir()
- {
- return sys_get_temp_dir().'/'.Kernel::VERSION.'/kernel123/logs';
- }
-}
diff --git a/vendor/symfony/http-kernel/Tests/Fixtures/KernelForTest.php b/vendor/symfony/http-kernel/Tests/Fixtures/KernelForTest.php
index 9acee4cac5..9734594b6e 100644
--- a/vendor/symfony/http-kernel/Tests/Fixtures/KernelForTest.php
+++ b/vendor/symfony/http-kernel/Tests/Fixtures/KernelForTest.php
@@ -34,4 +34,14 @@ class KernelForTest extends Kernel
{
return $this->booted;
}
+
+ public function getCacheDir()
+ {
+ return $this->getProjectDir().'/Tests/Fixtures/cache.'.$this->environment;
+ }
+
+ public function getLogDir()
+ {
+ return $this->getProjectDir().'/Tests/Fixtures/logs';
+ }
}
diff --git a/vendor/symfony/http-kernel/Tests/Fixtures/KernelWithoutBundles.php b/vendor/symfony/http-kernel/Tests/Fixtures/KernelWithoutBundles.php
index cee1b09fb2..0d0881d629 100644
--- a/vendor/symfony/http-kernel/Tests/Fixtures/KernelWithoutBundles.php
+++ b/vendor/symfony/http-kernel/Tests/Fixtures/KernelWithoutBundles.php
@@ -26,6 +26,11 @@ class KernelWithoutBundles extends Kernel
{
}
+ public function getProjectDir()
+ {
+ return __DIR__;
+ }
+
protected function build(ContainerBuilder $container)
{
$container->setParameter('test_executed', true);
diff --git a/vendor/symfony/http-kernel/Tests/Fixtures/TestEventDispatcher.php b/vendor/symfony/http-kernel/Tests/Fixtures/TestEventDispatcher.php
index ca2e6a693d..d5456fe5dc 100644
--- a/vendor/symfony/http-kernel/Tests/Fixtures/TestEventDispatcher.php
+++ b/vendor/symfony/http-kernel/Tests/Fixtures/TestEventDispatcher.php
@@ -11,10 +11,9 @@
namespace Symfony\Component\HttpKernel\Tests\Fixtures;
-use Symfony\Component\EventDispatcher\Debug\TraceableEventDispatcherInterface;
-use Symfony\Component\EventDispatcher\EventDispatcher;
+use Symfony\Component\EventDispatcher\Debug\TraceableEventDispatcher;
-class TestEventDispatcher extends EventDispatcher implements TraceableEventDispatcherInterface
+class TestEventDispatcher extends TraceableEventDispatcher
{
public function getCalledListeners()
{
@@ -29,4 +28,9 @@ class TestEventDispatcher extends EventDispatcher implements TraceableEventDispa
public function reset()
{
}
+
+ public function getOrphanedEvents()
+ {
+ return array();
+ }
}
diff --git a/vendor/symfony/http-kernel/Tests/Fragment/EsiFragmentRendererTest.php b/vendor/symfony/http-kernel/Tests/Fragment/EsiFragmentRendererTest.php
index 00d796d520..7ac1f4faa5 100644
--- a/vendor/symfony/http-kernel/Tests/Fragment/EsiFragmentRendererTest.php
+++ b/vendor/symfony/http-kernel/Tests/Fragment/EsiFragmentRendererTest.php
@@ -26,19 +26,7 @@ class EsiFragmentRendererTest extends TestCase
$strategy->render('/', Request::create('/'));
}
- /**
- * @group legacy
- * @expectedDeprecation Passing non-scalar values as part of URI attributes to the ESI and SSI rendering strategies is deprecated %s.
- */
- public function testRenderFallbackWithObjectAttributesIsDeprecated()
- {
- $strategy = new EsiFragmentRenderer(new Esi(), $this->getInlineStrategy(true), new UriSigner('foo'));
- $request = Request::create('/');
- $reference = new ControllerReference('main_controller', array('foo' => new \stdClass()), array());
- $strategy->render($reference, $request);
- }
-
- public function testRenderFallbackWithScalarIsNotDeprecated()
+ public function testRenderFallbackWithScalar()
{
$strategy = new EsiFragmentRenderer(new Esi(), $this->getInlineStrategy(true), new UriSigner('foo'));
$request = Request::create('/');
diff --git a/vendor/symfony/http-kernel/Tests/Fragment/FragmentHandlerTest.php b/vendor/symfony/http-kernel/Tests/Fragment/FragmentHandlerTest.php
index a296aa0e18..0dfaa79682 100644
--- a/vendor/symfony/http-kernel/Tests/Fragment/FragmentHandlerTest.php
+++ b/vendor/symfony/http-kernel/Tests/Fragment/FragmentHandlerTest.php
@@ -88,7 +88,7 @@ class FragmentHandlerTest extends TestCase
;
if ($arguments) {
- \call_user_func_array(array($e, 'with'), $arguments);
+ $e->with(...$arguments);
}
$handler = new FragmentHandler($this->requestStack);
diff --git a/vendor/symfony/http-kernel/Tests/Fragment/InlineFragmentRendererTest.php b/vendor/symfony/http-kernel/Tests/Fragment/InlineFragmentRendererTest.php
index 80f9cd2b53..ceaa249ab6 100644
--- a/vendor/symfony/http-kernel/Tests/Fragment/InlineFragmentRendererTest.php
+++ b/vendor/symfony/http-kernel/Tests/Fragment/InlineFragmentRendererTest.php
@@ -16,9 +16,7 @@ use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Response;
-use Symfony\Component\HttpKernel\Controller\ArgumentResolver;
use Symfony\Component\HttpKernel\Controller\ControllerReference;
-use Symfony\Component\HttpKernel\Controller\ControllerResolverInterface;
use Symfony\Component\HttpKernel\Fragment\InlineFragmentRenderer;
use Symfony\Component\HttpKernel\HttpKernel;
use Symfony\Component\HttpKernel\KernelEvents;
@@ -55,48 +53,6 @@ class InlineFragmentRendererTest extends TestCase
$this->assertSame('foo', $strategy->render(new ControllerReference('main_controller', array('object' => $object), array()), Request::create('/'))->getContent());
}
- /**
- * @group legacy
- */
- public function testRenderWithObjectsAsAttributesPassedAsObjectsInTheControllerLegacy()
- {
- $resolver = $this->getMockBuilder('Symfony\\Component\\HttpKernel\\Controller\\ControllerResolver')->setMethods(array('getController'))->getMock();
- $resolver
- ->expects($this->once())
- ->method('getController')
- ->will($this->returnValue(function (\stdClass $object, Bar $object1) {
- return new Response($object1->getBar());
- }))
- ;
-
- $kernel = new HttpKernel(new EventDispatcher(), $resolver, new RequestStack());
- $renderer = new InlineFragmentRenderer($kernel);
-
- $response = $renderer->render(new ControllerReference('main_controller', array('object' => new \stdClass(), 'object1' => new Bar()), array()), Request::create('/'));
- $this->assertEquals('bar', $response->getContent());
- }
-
- /**
- * @group legacy
- */
- public function testRenderWithObjectsAsAttributesPassedAsObjectsInTheController()
- {
- $resolver = $this->getMockBuilder(ControllerResolverInterface::class)->getMock();
- $resolver
- ->expects($this->once())
- ->method('getController')
- ->will($this->returnValue(function (\stdClass $object, Bar $object1) {
- return new Response($object1->getBar());
- }))
- ;
-
- $kernel = new HttpKernel(new EventDispatcher(), $resolver, new RequestStack(), new ArgumentResolver());
- $renderer = new InlineFragmentRenderer($kernel);
-
- $response = $renderer->render(new ControllerReference('main_controller', array('object' => new \stdClass(), 'object1' => new Bar()), array()), Request::create('/'));
- $this->assertEquals('bar', $response->getContent());
- }
-
public function testRenderWithTrustedHeaderDisabled()
{
Request::setTrustedProxies(array(), 0);
diff --git a/vendor/symfony/http-kernel/Tests/HttpCache/EsiTest.php b/vendor/symfony/http-kernel/Tests/HttpCache/EsiTest.php
index 863ad76147..846caee4cc 100644
--- a/vendor/symfony/http-kernel/Tests/HttpCache/EsiTest.php
+++ b/vendor/symfony/http-kernel/Tests/HttpCache/EsiTest.php
@@ -234,7 +234,7 @@ class EsiTest extends TestCase
if (\is_array($response)) {
$cache->expects($this->any())
->method('handle')
- ->will(\call_user_func_array(array($this, 'onConsecutiveCalls'), $response))
+ ->will($this->onConsecutiveCalls(...$response))
;
} else {
$cache->expects($this->any())
diff --git a/vendor/symfony/http-kernel/Tests/HttpCache/SsiTest.php b/vendor/symfony/http-kernel/Tests/HttpCache/SsiTest.php
index 26ef6cb2b8..1f1fbf8499 100644
--- a/vendor/symfony/http-kernel/Tests/HttpCache/SsiTest.php
+++ b/vendor/symfony/http-kernel/Tests/HttpCache/SsiTest.php
@@ -201,7 +201,7 @@ class SsiTest extends TestCase
if (\is_array($response)) {
$cache->expects($this->any())
->method('handle')
- ->will(\call_user_func_array(array($this, 'onConsecutiveCalls'), $response))
+ ->will($this->onConsecutiveCalls(...$response))
;
} else {
$cache->expects($this->any())
diff --git a/vendor/symfony/http-kernel/Tests/HttpKernelTest.php b/vendor/symfony/http-kernel/Tests/HttpKernelTest.php
index 4b9ec69d1e..129fa704be 100644
--- a/vendor/symfony/http-kernel/Tests/HttpKernelTest.php
+++ b/vendor/symfony/http-kernel/Tests/HttpKernelTest.php
@@ -23,6 +23,7 @@ use Symfony\Component\HttpKernel\Controller\ControllerResolverInterface;
use Symfony\Component\HttpKernel\Event\FilterControllerArgumentsEvent;
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
+use Symfony\Component\HttpKernel\Exception\ControllerDoesNotReturnResponseException;
use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException;
use Symfony\Component\HttpKernel\HttpKernel;
use Symfony\Component\HttpKernel\HttpKernelInterface;
@@ -111,24 +112,6 @@ class HttpKernelTest extends TestCase
$this->assertEquals('POST', $response->headers->get('Allow'));
}
- /**
- * @group legacy
- * @dataProvider getStatusCodes
- */
- public function testLegacyHandleWhenAnExceptionIsHandledWithASpecificStatusCode($responseStatusCode, $expectedStatusCode)
- {
- $dispatcher = new EventDispatcher();
- $dispatcher->addListener(KernelEvents::EXCEPTION, function ($event) use ($responseStatusCode, $expectedStatusCode) {
- $event->setResponse(new Response('', $responseStatusCode, array('X-Status-Code' => $expectedStatusCode)));
- });
-
- $kernel = $this->getHttpKernel($dispatcher, function () { throw new \RuntimeException(); });
- $response = $kernel->handle(new Request());
-
- $this->assertEquals($expectedStatusCode, $response->getStatusCode());
- $this->assertFalse($response->headers->has('X-Status-Code'));
- }
-
public function getStatusCodes()
{
return array(
@@ -229,15 +212,23 @@ class HttpKernelTest extends TestCase
$this->assertResponseEquals(new Response('foo'), $kernel->handle(new Request()));
}
- /**
- * @expectedException \LogicException
- */
public function testHandleWhenTheControllerDoesNotReturnAResponse()
{
$dispatcher = new EventDispatcher();
$kernel = $this->getHttpKernel($dispatcher, function () { return 'foo'; });
- $kernel->handle(new Request());
+ try {
+ $kernel->handle(new Request());
+
+ $this->fail('The kernel should throw an exception.');
+ } catch (ControllerDoesNotReturnResponseException $e) {
+ }
+
+ $first = $e->getTrace()[0];
+
+ // `file` index the array starting at 0, and __FILE__ starts at 1
+ $line = file($first['file'])[$first['line'] - 2];
+ $this->assertContains('// call controller', $line);
}
public function testHandleWhenTheControllerDoesNotReturnAResponseButAViewIsRegistered()
@@ -283,7 +274,7 @@ class HttpKernelTest extends TestCase
$oldArguments = $event->getArguments();
$newController = function ($id) use ($oldController, $oldArguments) {
- $response = \call_user_func_array($oldController, $oldArguments);
+ $response = $oldController(...$oldArguments);
$response->headers->set('X-Id', $id);
diff --git a/vendor/symfony/http-kernel/Tests/KernelTest.php b/vendor/symfony/http-kernel/Tests/KernelTest.php
index ab0b8cfb6e..2b581398c5 100644
--- a/vendor/symfony/http-kernel/Tests/KernelTest.php
+++ b/vendor/symfony/http-kernel/Tests/KernelTest.php
@@ -19,7 +19,6 @@ use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Bundle\BundleInterface;
-use Symfony\Component\HttpKernel\Config\EnvParametersResource;
use Symfony\Component\HttpKernel\DependencyInjection\ResettableServicePass;
use Symfony\Component\HttpKernel\DependencyInjection\ServicesResetter;
use Symfony\Component\HttpKernel\HttpKernelInterface;
@@ -34,7 +33,7 @@ class KernelTest extends TestCase
public static function tearDownAfterClass()
{
$fs = new Filesystem();
- $fs->remove(__DIR__.'/Fixtures/cache');
+ $fs->remove(__DIR__.'/Fixtures/var');
}
public function testConstructor()
@@ -68,15 +67,15 @@ class KernelTest extends TestCase
public function testInitializeContainerClearsOldContainers()
{
$fs = new Filesystem();
- $legacyContainerDir = __DIR__.'/Fixtures/cache/custom/ContainerA123456';
+ $legacyContainerDir = __DIR__.'/Fixtures/var/cache/custom/ContainerA123456';
$fs->mkdir($legacyContainerDir);
touch($legacyContainerDir.'.legacy');
$kernel = new CustomProjectDirKernel();
$kernel->boot();
- $containerDir = __DIR__.'/Fixtures/cache/custom/'.substr(\get_class($kernel->getContainer()), 0, 16);
- $this->assertTrue(unlink(__DIR__.'/Fixtures/cache/custom/FixturesCustomDebugProjectContainer.php.meta'));
+ $containerDir = __DIR__.'/Fixtures/var/cache/custom/'.substr(\get_class($kernel->getContainer()), 0, 16);
+ $this->assertTrue(unlink(__DIR__.'/Fixtures/var/cache/custom/TestsSymfony_Component_HttpKernel_Tests_CustomProjectDirKernelCustomDebugContainer.php.meta'));
$this->assertFileExists($containerDir);
$this->assertFileNotExists($containerDir.'.legacy');
@@ -124,20 +123,6 @@ class KernelTest extends TestCase
$this->assertTrue($kernel->isBooted());
}
- /**
- * @group legacy
- */
- public function testClassCacheIsLoaded()
- {
- $kernel = $this->getKernel(array('initializeBundles', 'initializeContainer', 'doLoadClassCache'));
- $kernel->loadClassCache('name', '.extension');
- $kernel->expects($this->once())
- ->method('doLoadClassCache')
- ->with('name', '.extension');
-
- $kernel->boot();
- }
-
public function testClassCacheIsNotLoadedByDefault()
{
$kernel = $this->getKernel(array('initializeBundles', 'initializeContainer', 'doLoadClassCache'));
@@ -147,53 +132,6 @@ class KernelTest extends TestCase
$kernel->boot();
}
- /**
- * @group legacy
- */
- public function testClassCacheIsNotLoadedWhenKernelIsNotBooted()
- {
- $kernel = $this->getKernel(array('initializeBundles', 'initializeContainer', 'doLoadClassCache'));
- $kernel->loadClassCache();
- $kernel->expects($this->never())
- ->method('doLoadClassCache');
- }
-
- public function testEnvParametersResourceIsAdded()
- {
- $container = new ContainerBuilder();
- $kernel = $this->getMockBuilder('Symfony\Component\HttpKernel\Tests\Fixtures\KernelForTest')
- ->disableOriginalConstructor()
- ->setMethods(array('getContainerBuilder', 'prepareContainer', 'getCacheDir', 'getLogDir'))
- ->getMock();
- $kernel->expects($this->any())
- ->method('getContainerBuilder')
- ->will($this->returnValue($container));
- $kernel->expects($this->any())
- ->method('prepareContainer')
- ->will($this->returnValue(null));
- $kernel->expects($this->any())
- ->method('getCacheDir')
- ->will($this->returnValue(sys_get_temp_dir()));
- $kernel->expects($this->any())
- ->method('getLogDir')
- ->will($this->returnValue(sys_get_temp_dir()));
-
- $reflection = new \ReflectionClass(\get_class($kernel));
- $method = $reflection->getMethod('buildContainer');
- $method->setAccessible(true);
- $method->invoke($kernel);
-
- $found = false;
- foreach ($container->getResources() as $resource) {
- if ($resource instanceof EnvParametersResource) {
- $found = true;
- break;
- }
- }
-
- $this->assertTrue($found);
- }
-
public function testBootKernelSeveralTimesOnlyInitializesBundlesOnce()
{
$kernel = $this->getKernel(array('initializeBundles', 'initializeContainer'));
@@ -357,6 +295,9 @@ EOF;
$this->assertEquals($expected, $output);
}
+ /**
+ * @group legacy
+ */
public function testGetRootDir()
{
$kernel = new KernelForTest('test', true);
@@ -364,6 +305,9 @@ EOF;
$this->assertEquals(__DIR__.\DIRECTORY_SEPARATOR.'Fixtures', realpath($kernel->getRootDir()));
}
+ /**
+ * @group legacy
+ */
public function testGetName()
{
$kernel = new KernelForTest('test', true);
@@ -371,6 +315,9 @@ EOF;
$this->assertEquals('Fixtures', $kernel->getName());
}
+ /**
+ * @group legacy
+ */
public function testOverrideGetName()
{
$kernel = new KernelForOverrideName('test', true);
@@ -421,7 +368,7 @@ EOF;
$kernel
->expects($this->once())
->method('getBundle')
- ->will($this->returnValue(array($this->getBundle(__DIR__.'/Fixtures/Bundle1Bundle'))))
+ ->will($this->returnValue($this->getBundle(__DIR__.'/Fixtures/Bundle1Bundle')))
;
$kernel->locateResource('@Bundle1Bundle/config/routing.xml');
@@ -433,80 +380,19 @@ EOF;
$kernel
->expects($this->once())
->method('getBundle')
- ->will($this->returnValue(array($this->getBundle(__DIR__.'/Fixtures/Bundle1Bundle'))))
+ ->will($this->returnValue($this->getBundle(__DIR__.'/Fixtures/Bundle1Bundle')))
;
$this->assertEquals(__DIR__.'/Fixtures/Bundle1Bundle/foo.txt', $kernel->locateResource('@Bundle1Bundle/foo.txt'));
}
- /**
- * @group legacy
- */
- public function testLocateResourceReturnsTheFirstThatMatchesWithParent()
- {
- $parent = $this->getBundle(__DIR__.'/Fixtures/Bundle1Bundle');
- $child = $this->getBundle(__DIR__.'/Fixtures/Bundle2Bundle');
-
- $kernel = $this->getKernel(array('getBundle'));
- $kernel
- ->expects($this->exactly(2))
- ->method('getBundle')
- ->will($this->returnValue(array($child, $parent)))
- ;
-
- $this->assertEquals(__DIR__.'/Fixtures/Bundle2Bundle/foo.txt', $kernel->locateResource('@ParentAABundle/foo.txt'));
- $this->assertEquals(__DIR__.'/Fixtures/Bundle1Bundle/bar.txt', $kernel->locateResource('@ParentAABundle/bar.txt'));
- }
-
- /**
- * @group legacy
- */
- public function testLocateResourceReturnsAllMatches()
- {
- $parent = $this->getBundle(__DIR__.'/Fixtures/Bundle1Bundle');
- $child = $this->getBundle(__DIR__.'/Fixtures/Bundle2Bundle');
-
- $kernel = $this->getKernel(array('getBundle'));
- $kernel
- ->expects($this->once())
- ->method('getBundle')
- ->will($this->returnValue(array($child, $parent)))
- ;
-
- $this->assertEquals(array(
- __DIR__.'/Fixtures/Bundle2Bundle/foo.txt',
- __DIR__.'/Fixtures/Bundle1Bundle/foo.txt', ),
- $kernel->locateResource('@Bundle1Bundle/foo.txt', null, false));
- }
-
- /**
- * @group legacy
- */
- public function testLocateResourceReturnsAllMatchesBis()
- {
- $kernel = $this->getKernel(array('getBundle'));
- $kernel
- ->expects($this->once())
- ->method('getBundle')
- ->will($this->returnValue(array(
- $this->getBundle(__DIR__.'/Fixtures/Bundle1Bundle'),
- $this->getBundle(__DIR__.'/Foobar'),
- )))
- ;
-
- $this->assertEquals(
- array(__DIR__.'/Fixtures/Bundle1Bundle/foo.txt'),
- $kernel->locateResource('@Bundle1Bundle/foo.txt', null, false)
- );
- }
-
public function testLocateResourceIgnoresDirOnNonResource()
{
$kernel = $this->getKernel(array('getBundle'));
$kernel
->expects($this->once())
->method('getBundle')
- ->will($this->returnValue(array($this->getBundle(__DIR__.'/Fixtures/Bundle1Bundle'))))
+ ->will($this->returnValue($this->getBundle(__DIR__.'/Fixtures/Bundle1Bundle')))
;
$this->assertEquals(
@@ -521,7 +407,7 @@ EOF;
$kernel
->expects($this->once())
->method('getBundle')
- ->will($this->returnValue(array($this->getBundle(__DIR__.'/Fixtures/FooBundle', null, null, 'FooBundle'))))
+ ->will($this->returnValue($this->getBundle(__DIR__.'/Fixtures/FooBundle', null, null, 'FooBundle')))
;
$this->assertEquals(
@@ -530,73 +416,13 @@ EOF;
);
}
- /**
- * @group legacy
- */
- public function testLocateResourceReturnsTheDirOneForResourcesAndBundleOnes()
- {
- $kernel = $this->getKernel(array('getBundle'));
- $kernel
- ->expects($this->once())
- ->method('getBundle')
- ->will($this->returnValue(array($this->getBundle(__DIR__.'/Fixtures/Bundle1Bundle', null, null, 'Bundle1Bundle'))))
- ;
-
- $this->assertEquals(array(
- __DIR__.'/Fixtures/Resources/Bundle1Bundle/foo.txt',
- __DIR__.'/Fixtures/Bundle1Bundle/Resources/foo.txt', ),
- $kernel->locateResource('@Bundle1Bundle/Resources/foo.txt', __DIR__.'/Fixtures/Resources', false)
- );
- }
-
- /**
- * @group legacy
- */
- public function testLocateResourceOverrideBundleAndResourcesFolders()
- {
- $parent = $this->getBundle(__DIR__.'/Fixtures/BaseBundle', null, 'BaseBundle', 'BaseBundle');
- $child = $this->getBundle(__DIR__.'/Fixtures/ChildBundle', 'ParentBundle', 'ChildBundle', 'ChildBundle');
-
- $kernel = $this->getKernel(array('getBundle'));
- $kernel
- ->expects($this->exactly(4))
- ->method('getBundle')
- ->will($this->returnValue(array($child, $parent)))
- ;
-
- $this->assertEquals(array(
- __DIR__.'/Fixtures/Resources/ChildBundle/foo.txt',
- __DIR__.'/Fixtures/ChildBundle/Resources/foo.txt',
- __DIR__.'/Fixtures/BaseBundle/Resources/foo.txt',
- ),
- $kernel->locateResource('@BaseBundle/Resources/foo.txt', __DIR__.'/Fixtures/Resources', false)
- );
-
- $this->assertEquals(
- __DIR__.'/Fixtures/Resources/ChildBundle/foo.txt',
- $kernel->locateResource('@BaseBundle/Resources/foo.txt', __DIR__.'/Fixtures/Resources')
- );
-
- try {
- $kernel->locateResource('@BaseBundle/Resources/hide.txt', __DIR__.'/Fixtures/Resources', false);
- $this->fail('Hidden resources should raise an exception when returning an array of matching paths');
- } catch (\RuntimeException $e) {
- }
-
- try {
- $kernel->locateResource('@BaseBundle/Resources/hide.txt', __DIR__.'/Fixtures/Resources', true);
- $this->fail('Hidden resources should raise an exception when returning the first matching path');
- } catch (\RuntimeException $e) {
- }
- }
-
public function testLocateResourceOnDirectories()
{
$kernel = $this->getKernel(array('getBundle'));
$kernel
->expects($this->exactly(2))
->method('getBundle')
- ->will($this->returnValue(array($this->getBundle(__DIR__.'/Fixtures/FooBundle', null, null, 'FooBundle'))))
+ ->will($this->returnValue($this->getBundle(__DIR__.'/Fixtures/FooBundle', null, null, 'FooBundle')))
;
$this->assertEquals(
@@ -612,7 +438,7 @@ EOF;
$kernel
->expects($this->exactly(2))
->method('getBundle')
- ->will($this->returnValue(array($this->getBundle(__DIR__.'/Fixtures/Bundle1Bundle', null, null, 'Bundle1Bundle'))))
+ ->will($this->returnValue($this->getBundle(__DIR__.'/Fixtures/Bundle1Bundle', null, null, 'Bundle1Bundle')))
;
$this->assertEquals(
@@ -626,103 +452,6 @@ EOF;
}
/**
- * @group legacy
- */
- public function testInitializeBundles()
- {
- $parent = $this->getBundle(null, null, 'ParentABundle');
- $child = $this->getBundle(null, 'ParentABundle', 'ChildABundle');
-
- // use test kernel so we can access getBundleMap()
- $kernel = $this->getKernelForTest(array('registerBundles'));
- $kernel
- ->expects($this->once())
- ->method('registerBundles')
- ->will($this->returnValue(array($parent, $child)))
- ;
- $kernel->boot();
-
- $map = $kernel->getBundleMap();
- $this->assertEquals(array($child, $parent), $map['ParentABundle']);
- }
-
- /**
- * @group legacy
- */
- public function testInitializeBundlesSupportInheritanceCascade()
- {
- $grandparent = $this->getBundle(null, null, 'GrandParentBBundle');
- $parent = $this->getBundle(null, 'GrandParentBBundle', 'ParentBBundle');
- $child = $this->getBundle(null, 'ParentBBundle', 'ChildBBundle');
-
- // use test kernel so we can access getBundleMap()
- $kernel = $this->getKernelForTest(array('registerBundles'));
- $kernel
- ->expects($this->once())
- ->method('registerBundles')
- ->will($this->returnValue(array($grandparent, $parent, $child)))
- ;
- $kernel->boot();
-
- $map = $kernel->getBundleMap();
- $this->assertEquals(array($child, $parent, $grandparent), $map['GrandParentBBundle']);
- $this->assertEquals(array($child, $parent), $map['ParentBBundle']);
- $this->assertEquals(array($child), $map['ChildBBundle']);
- }
-
- /**
- * @group legacy
- * @expectedException \LogicException
- * @expectedExceptionMessage Bundle "ChildCBundle" extends bundle "FooBar", which is not registered.
- */
- public function testInitializeBundlesThrowsExceptionWhenAParentDoesNotExists()
- {
- $child = $this->getBundle(null, 'FooBar', 'ChildCBundle');
- $kernel = $this->getKernel(array(), array($child));
- $kernel->boot();
- }
-
- /**
- * @group legacy
- */
- public function testInitializeBundlesSupportsArbitraryBundleRegistrationOrder()
- {
- $grandparent = $this->getBundle(null, null, 'GrandParentCBundle');
- $parent = $this->getBundle(null, 'GrandParentCBundle', 'ParentCBundle');
- $child = $this->getBundle(null, 'ParentCBundle', 'ChildCBundle');
-
- // use test kernel so we can access getBundleMap()
- $kernel = $this->getKernelForTest(array('registerBundles'));
- $kernel
- ->expects($this->once())
- ->method('registerBundles')
- ->will($this->returnValue(array($parent, $grandparent, $child)))
- ;
- $kernel->boot();
-
- $map = $kernel->getBundleMap();
- $this->assertEquals(array($child, $parent, $grandparent), $map['GrandParentCBundle']);
- $this->assertEquals(array($child, $parent), $map['ParentCBundle']);
- $this->assertEquals(array($child), $map['ChildCBundle']);
- }
-
- /**
- * @group legacy
- * @expectedException \LogicException
- * @expectedExceptionMessage Bundle "ParentCBundle" is directly extended by two bundles "ChildC2Bundle" and "ChildC1Bundle".
- */
- public function testInitializeBundlesThrowsExceptionWhenABundleIsDirectlyExtendedByTwoBundles()
- {
- $parent = $this->getBundle(null, null, 'ParentCBundle');
- $child1 = $this->getBundle(null, 'ParentCBundle', 'ChildC1Bundle');
- $child2 = $this->getBundle(null, 'ParentCBundle', 'ChildC2Bundle');
-
- $kernel = $this->getKernel(array(), array($parent, $child1, $child2));
- $kernel->boot();
- }
-
- /**
- * @group legacy
* @expectedException \LogicException
* @expectedExceptionMessage Trying to register two bundles with the same name "DuplicateName"
*/
@@ -735,19 +464,6 @@ EOF;
$kernel->boot();
}
- /**
- * @group legacy
- * @expectedException \LogicException
- * @expectedExceptionMessage Bundle "CircularRefBundle" can not extend itself.
- */
- public function testInitializeBundleThrowsExceptionWhenABundleExtendsItself()
- {
- $circularRef = $this->getBundle(null, 'CircularRefBundle', 'CircularRefBundle');
-
- $kernel = $this->getKernel(array(), array($circularRef));
- $kernel->boot();
- }
-
public function testTerminateReturnsSilentlyIfKernelIsNotBooted()
{
$kernel = $this->getKernel(array('getHttpKernel'));
@@ -799,59 +515,32 @@ EOF;
$this->assertTrue($kernel->getContainer()->getParameter('test_executed'));
}
- public function testKernelRootDirNameStartingWithANumber()
- {
- $dir = __DIR__.'/Fixtures/123';
- require_once $dir.'/Kernel123.php';
- $kernel = new \Symfony\Component\HttpKernel\Tests\Fixtures\_123\Kernel123('dev', true);
- $this->assertEquals('_123', $kernel->getName());
- }
-
- /**
- * @group legacy
- * @expectedDeprecation The "Symfony\Component\HttpKernel\Kernel::getEnvParameters()" method is deprecated as of 3.3 and will be removed in 4.0. Use the %cenv()%c syntax to get the value of any environment variable from configuration files instead.
- * @expectedDeprecation The support of special environment variables that start with SYMFONY__ (such as "SYMFONY__FOO__BAR") is deprecated as of 3.3 and will be removed in 4.0. Use the %cenv()%c syntax instead to get the value of environment variables in configuration files.
- */
- public function testSymfonyEnvironmentVariables()
- {
- $_SERVER['SYMFONY__FOO__BAR'] = 'baz';
-
- $kernel = $this->getKernel();
- $method = new \ReflectionMethod($kernel, 'getEnvParameters');
- $method->setAccessible(true);
-
- $envParameters = $method->invoke($kernel);
- $this->assertSame('baz', $envParameters['foo.bar']);
-
- unset($_SERVER['SYMFONY__FOO__BAR']);
- }
-
public function testProjectDirExtension()
{
$kernel = new CustomProjectDirKernel();
$kernel->boot();
- $this->assertSame('foo', $kernel->getProjectDir());
- $this->assertSame('foo', $kernel->getContainer()->getParameter('kernel.project_dir'));
+ $this->assertSame(__DIR__.'/Fixtures', $kernel->getProjectDir());
+ $this->assertSame(__DIR__.\DIRECTORY_SEPARATOR.'Fixtures', $kernel->getContainer()->getParameter('kernel.project_dir'));
}
public function testKernelReset()
{
- (new Filesystem())->remove(__DIR__.'/Fixtures/cache');
+ (new Filesystem())->remove(__DIR__.'/Fixtures/var/cache');
$kernel = new CustomProjectDirKernel();
$kernel->boot();
$containerClass = \get_class($kernel->getContainer());
$containerFile = (new \ReflectionClass($kernel->getContainer()))->getFileName();
- unlink(__DIR__.'/Fixtures/cache/custom/FixturesCustomDebugProjectContainer.php.meta');
+ unlink(__DIR__.'/Fixtures/var/cache/custom/TestsSymfony_Component_HttpKernel_Tests_CustomProjectDirKernelCustomDebugContainer.php.meta');
$kernel = new CustomProjectDirKernel();
$kernel->boot();
$this->assertInstanceOf($containerClass, $kernel->getContainer());
$this->assertFileExists($containerFile);
- unlink(__DIR__.'/Fixtures/cache/custom/FixturesCustomDebugProjectContainer.php.meta');
+ unlink(__DIR__.'/Fixtures/var/cache/custom/TestsSymfony_Component_HttpKernel_Tests_CustomProjectDirKernelCustomDebugContainer.php.meta');
$kernel = new CustomProjectDirKernel(function ($container) { $container->register('foo', 'stdClass')->setPublic(true); });
$kernel->boot();
@@ -1019,11 +708,10 @@ class CustomProjectDirKernel extends Kernel
private $buildContainer;
private $httpKernel;
- public function __construct(\Closure $buildContainer = null, HttpKernelInterface $httpKernel = null, $name = 'custom')
+ public function __construct(\Closure $buildContainer = null, HttpKernelInterface $httpKernel = null, $env = 'custom')
{
- parent::__construct($name, true);
+ parent::__construct($env, true);
- $this->baseDir = 'foo';
$this->buildContainer = $buildContainer;
$this->httpKernel = $httpKernel;
}
@@ -1039,11 +727,6 @@ class CustomProjectDirKernel extends Kernel
public function getProjectDir()
{
- return $this->baseDir;
- }
-
- public function getRootDir()
- {
return __DIR__.'/Fixtures';
}
diff --git a/vendor/symfony/http-kernel/Tests/Profiler/FileProfilerStorageTest.php b/vendor/symfony/http-kernel/Tests/Profiler/FileProfilerStorageTest.php
index a1db1d9c0e..e64c622c37 100644
--- a/vendor/symfony/http-kernel/Tests/Profiler/FileProfilerStorageTest.php
+++ b/vendor/symfony/http-kernel/Tests/Profiler/FileProfilerStorageTest.php
@@ -22,7 +22,7 @@ class FileProfilerStorageTest extends TestCase
protected function setUp()
{
- $this->tmpDir = sys_get_temp_dir().'/sf2_profiler_file_storage';
+ $this->tmpDir = sys_get_temp_dir().'/sf_profiler_file_storage';
if (is_dir($this->tmpDir)) {
self::cleanDir();
}
diff --git a/vendor/symfony/http-kernel/Tests/Profiler/ProfilerTest.php b/vendor/symfony/http-kernel/Tests/Profiler/ProfilerTest.php
index cff133c1aa..2f7e8dd284 100644
--- a/vendor/symfony/http-kernel/Tests/Profiler/ProfilerTest.php
+++ b/vendor/symfony/http-kernel/Tests/Profiler/ProfilerTest.php
@@ -84,7 +84,7 @@ class ProfilerTest extends TestCase
protected function setUp()
{
- $this->tmp = tempnam(sys_get_temp_dir(), 'sf2_profiler');
+ $this->tmp = tempnam(sys_get_temp_dir(), 'sf_profiler');
if (file_exists($this->tmp)) {
@unlink($this->tmp);
}
diff --git a/vendor/symfony/http-kernel/UriSigner.php b/vendor/symfony/http-kernel/UriSigner.php
index 28459b4ecd..de73039b34 100644
--- a/vendor/symfony/http-kernel/UriSigner.php
+++ b/vendor/symfony/http-kernel/UriSigner.php
@@ -25,7 +25,7 @@ class UriSigner
* @param string $secret A secret
* @param string $parameter Query string parameter to use
*/
- public function __construct($secret, $parameter = '_hash')
+ public function __construct(string $secret, string $parameter = '_hash')
{
$this->secret = $secret;
$this->parameter = $parameter;
diff --git a/vendor/symfony/http-kernel/composer.json b/vendor/symfony/http-kernel/composer.json
index 9ad3877ba1..8228377e04 100644
--- a/vendor/symfony/http-kernel/composer.json
+++ b/vendor/symfony/http-kernel/composer.json
@@ -16,38 +16,39 @@
}
],
"require": {
- "php": "^5.5.9|>=7.0.8",
- "symfony/event-dispatcher": "~2.8|~3.0|~4.0",
- "symfony/http-foundation": "~3.4.12|~4.0.12|^4.1.1",
- "symfony/debug": "~2.8|~3.0|~4.0",
+ "php": "^7.1.3",
+ "symfony/contracts": "^1.0",
+ "symfony/event-dispatcher": "~4.1",
+ "symfony/http-foundation": "^4.1.1",
+ "symfony/debug": "~3.4|~4.0",
"symfony/polyfill-ctype": "~1.8",
"psr/log": "~1.0"
},
"require-dev": {
- "symfony/browser-kit": "~2.8|~3.0|~4.0",
- "symfony/class-loader": "~2.8|~3.0",
- "symfony/config": "~2.8|~3.0|~4.0",
- "symfony/console": "~2.8|~3.0|~4.0",
- "symfony/css-selector": "~2.8|~3.0|~4.0",
- "symfony/dependency-injection": "^3.4.10|^4.0.10",
- "symfony/dom-crawler": "~2.8|~3.0|~4.0",
- "symfony/expression-language": "~2.8|~3.0|~4.0",
- "symfony/finder": "~2.8|~3.0|~4.0",
- "symfony/process": "~2.8|~3.0|~4.0",
+ "symfony/browser-kit": "~3.4|~4.0",
+ "symfony/config": "~3.4|~4.0",
+ "symfony/console": "~3.4|~4.0",
+ "symfony/css-selector": "~3.4|~4.0",
+ "symfony/dependency-injection": "^4.2",
+ "symfony/dom-crawler": "~3.4|~4.0",
+ "symfony/expression-language": "~3.4|~4.0",
+ "symfony/finder": "~3.4|~4.0",
+ "symfony/process": "~3.4|~4.0",
"symfony/routing": "~3.4|~4.0",
- "symfony/stopwatch": "~2.8|~3.0|~4.0",
- "symfony/templating": "~2.8|~3.0|~4.0",
- "symfony/translation": "~2.8|~3.0|~4.0",
- "symfony/var-dumper": "~3.3|~4.0",
+ "symfony/stopwatch": "~3.4|~4.0",
+ "symfony/templating": "~3.4|~4.0",
+ "symfony/translation": "~4.2",
+ "symfony/var-dumper": "^4.1.1",
"psr/cache": "~1.0"
},
"provide": {
"psr/log-implementation": "1.0"
},
"conflict": {
- "symfony/config": "<2.8",
- "symfony/dependency-injection": "<3.4.10|<4.0.10,>=4",
- "symfony/var-dumper": "<3.3",
+ "symfony/config": "<3.4",
+ "symfony/dependency-injection": "<4.2",
+ "symfony/translation": "<4.2",
+ "symfony/var-dumper": "<4.1.1",
"twig/twig": "<1.34|<2.4,>=2"
},
"suggest": {
@@ -55,7 +56,6 @@
"symfony/config": "",
"symfony/console": "",
"symfony/dependency-injection": "",
- "symfony/finder": "",
"symfony/var-dumper": ""
},
"autoload": {
@@ -67,7 +67,7 @@
"minimum-stability": "dev",
"extra": {
"branch-alias": {
- "dev-master": "3.4-dev"
+ "dev-master": "4.2-dev"
}
}
}
diff --git a/vendor/symfony/http-kernel/phpunit.xml.dist b/vendor/symfony/http-kernel/phpunit.xml.dist
index e0de769dd7..3fc07707f2 100644
--- a/vendor/symfony/http-kernel/phpunit.xml.dist
+++ b/vendor/symfony/http-kernel/phpunit.xml.dist
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.1/phpunit.xsd"
+ xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/5.2/phpunit.xsd"
backupGlobals="false"
colors="true"
bootstrap="vendor/autoload.php"