Issue #3198594 by catch, longwave, nikitagupta, alexpott, andypost: Forward compatibility layer for InputBag
parent
2fccc04de4
commit
fc37ffa5cd
|
@ -528,7 +528,7 @@
|
|||
"dist": {
|
||||
"type": "path",
|
||||
"url": "core",
|
||||
"reference": "02fb64caa7f852779c5ba9b94d7b48755612d45d"
|
||||
"reference": "365584bd91d9f305a9bf0db5a9acecf55c22ba57"
|
||||
},
|
||||
"require": {
|
||||
"asm89/stack-cors": "^1.1",
|
||||
|
@ -751,6 +751,7 @@
|
|||
"lib/Drupal/Core/DependencyInjection/Container.php",
|
||||
"lib/Drupal/Core/DrupalKernel.php",
|
||||
"lib/Drupal/Core/DrupalKernelInterface.php",
|
||||
"lib/Drupal/Core/Http/InputBag.php",
|
||||
"lib/Drupal/Core/Installer/InstallerRedirectTrait.php",
|
||||
"lib/Drupal/Core/Site/Settings.php"
|
||||
],
|
||||
|
@ -7811,12 +7812,12 @@
|
|||
"version": "1.9.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/webmozart/assert.git",
|
||||
"url": "https://github.com/webmozarts/assert.git",
|
||||
"reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
|
||||
"url": "https://api.github.com/repos/webmozarts/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
|
||||
"reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389",
|
||||
"shasum": ""
|
||||
},
|
||||
|
@ -7854,8 +7855,8 @@
|
|||
"validate"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/webmozart/assert/issues",
|
||||
"source": "https://github.com/webmozart/assert/tree/master"
|
||||
"issues": "https://github.com/webmozarts/assert/issues",
|
||||
"source": "https://github.com/webmozarts/assert/tree/1.9.1"
|
||||
},
|
||||
"time": "2020-07-08T17:02:28+00:00"
|
||||
}
|
||||
|
|
|
@ -196,6 +196,7 @@
|
|||
"lib/Drupal/Core/DependencyInjection/Container.php",
|
||||
"lib/Drupal/Core/DrupalKernel.php",
|
||||
"lib/Drupal/Core/DrupalKernelInterface.php",
|
||||
"lib/Drupal/Core/Http/InputBag.php",
|
||||
"lib/Drupal/Core/Installer/InstallerRedirectTrait.php",
|
||||
"lib/Drupal/Core/Site/Settings.php"
|
||||
],
|
||||
|
|
|
@ -17,6 +17,7 @@ use Drupal\Core\DependencyInjection\ServiceProviderInterface;
|
|||
use Drupal\Core\DependencyInjection\YamlFileLoader;
|
||||
use Drupal\Core\Extension\ExtensionDiscovery;
|
||||
use Drupal\Core\File\MimeType\MimeTypeGuesser;
|
||||
use Drupal\Core\Http\InputBag;
|
||||
use Drupal\Core\Http\TrustedHostsRequestFactory;
|
||||
use Drupal\Core\Installer\InstallerKernel;
|
||||
use Drupal\Core\Installer\InstallerRedirectTrait;
|
||||
|
@ -33,6 +34,7 @@ use Symfony\Component\HttpFoundation\Response;
|
|||
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
|
||||
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
|
||||
use Symfony\Component\HttpKernel\TerminableInterface;
|
||||
use Symfony\Component\HttpFoundation\InputBag as SymfonyInputBag;
|
||||
use TYPO3\PharStreamWrapper\Manager as PharStreamWrapperManager;
|
||||
use TYPO3\PharStreamWrapper\Behavior as PharStreamWrapperBehavior;
|
||||
use TYPO3\PharStreamWrapper\PharStreamWrapper;
|
||||
|
@ -692,6 +694,14 @@ class DrupalKernel implements DrupalKernelInterface, TerminableInterface {
|
|||
// Ensure sane PHP environment variables.
|
||||
static::bootEnvironment();
|
||||
|
||||
// Replace ParameterBag with InputBag for compatibility with Symfony 5.
|
||||
// @todo Remove this when Symfony 4 is no longer supported.
|
||||
foreach (['request', 'query', 'cookies'] as $bag) {
|
||||
if (!($bag instanceof SymfonyInputBag)) {
|
||||
$request->$bag = new InputBag($request->$bag->all());
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
$this->initializeSettings($request);
|
||||
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\Core\Http;
|
||||
|
||||
use Symfony\Component\HttpFoundation\ParameterBag;
|
||||
|
||||
/**
|
||||
* Forward compatibility class for Symfony 5.
|
||||
*
|
||||
* @internal only used as a bridge from Symfony 4 to Symfony 5, will be removed
|
||||
* in drupal:10.0.0.
|
||||
*/
|
||||
final class InputBag extends ParameterBag {
|
||||
|
||||
/**
|
||||
* Returns the parameters.
|
||||
*
|
||||
* @param string|null $key
|
||||
* The name of the parameter to return or null to get them all.
|
||||
*
|
||||
* @return array
|
||||
* An array of parameters.
|
||||
*/
|
||||
public function all(string $key = NULL): array {
|
||||
if ($key === NULL) {
|
||||
return $this->parameters;
|
||||
}
|
||||
|
||||
$value = $this->parameters[$key] ?? [];
|
||||
if (!is_array($value)) {
|
||||
throw new \UnexpectedValueException(sprintf('Unexpected value for parameter "%s": expecting "array", got "%s".', $key, get_debug_type($value)));
|
||||
}
|
||||
|
||||
return $value;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\Tests\Core\Http;
|
||||
|
||||
use Drupal\Core\Http\InputBag;
|
||||
use Drupal\Tests\UnitTestCase;
|
||||
|
||||
/**
|
||||
* @coversDefaultClass \Drupal\Core\Http\InputBag
|
||||
*
|
||||
* @group Http
|
||||
*/
|
||||
class InputBagTest extends UnitTestCase {
|
||||
|
||||
/**
|
||||
* @covers ::all
|
||||
*/
|
||||
public function testAll() {
|
||||
$input = [
|
||||
'bad' => 'bad',
|
||||
'good' => ['good'],
|
||||
];
|
||||
$input_bag = new InputBag();
|
||||
$input_bag->replace($input);
|
||||
$this->assertSame($input_bag->all(), $input);
|
||||
$this->assertSame($input_bag->all('good'), ['good']);
|
||||
$this->expectException(\UnexpectedValueException::class);
|
||||
$input_bag->all('bad');
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue