diff --git a/core/modules/media_library/src/MediaLibraryState.php b/core/modules/media_library/src/MediaLibraryState.php index e1f0b4632dcd7206ce9dae7ebe974975bfda55fe..6e1773073ca8a50e6869076cce1638d3739246bf 100644 --- a/core/modules/media_library/src/MediaLibraryState.php +++ b/core/modules/media_library/src/MediaLibraryState.php @@ -101,10 +101,10 @@ public static function fromRequest(Request $request) { // all validation runs. $state = static::create( $query->get('media_library_opener_id'), - $query->get('media_library_allowed_types', []), + $query->all('media_library_allowed_types'), $query->get('media_library_selected_type'), $query->get('media_library_remaining'), - $query->get('media_library_opener_parameters', []) + $query->all('media_library_opener_parameters') ); // The request parameters need to contain a valid hash to prevent a @@ -224,7 +224,7 @@ public function getOpenerId() { * The media type IDs. */ public function getAllowedTypeIds() { - return $this->get('media_library_allowed_types'); + return $this->all('media_library_allowed_types'); } /** @@ -268,7 +268,32 @@ public function getAvailableSlots() { * An associative array of all opener-specific parameter values. */ public function getOpenerParameters() { - return $this->get('media_library_opener_parameters', []); + return $this->all('media_library_opener_parameters'); + } + + /** + * 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. + * + * @todo Remove this when Symfony 4 is no longer supported. + * See https://www.drupal.org/node/3162981 + */ + 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; } /** diff --git a/core/modules/media_library/tests/src/Kernel/MediaLibraryStateTest.php b/core/modules/media_library/tests/src/Kernel/MediaLibraryStateTest.php index ffc5dd27ee4825b509f215d17876e6e85a206b33..bc4419a3b5a20c6ab14c19c5f32dc9138c398a65 100644 --- a/core/modules/media_library/tests/src/Kernel/MediaLibraryStateTest.php +++ b/core/modules/media_library/tests/src/Kernel/MediaLibraryStateTest.php @@ -4,6 +4,7 @@ use Drupal\Core\Cache\Cache; use Drupal\Core\Cache\CacheableDependencyInterface; +use Drupal\Core\Http\InputBag; use Drupal\KernelTests\KernelTestBase; use Drupal\media_library\MediaLibraryState; use Drupal\Tests\media\Traits\MediaTypeCreationTrait; @@ -286,7 +287,13 @@ public function testFromRequest(array $query_overrides, $exception_expected) { $this->expectException(BadRequestHttpException::class); $this->expectExceptionMessage("Invalid media library parameters specified."); } - $state = MediaLibraryState::fromRequest(new Request($query)); + + // @todo Remove this when Symfony 4 is no longer supported. + // See https://www.drupal.org/node/3162981 + $request = new Request(); + $request->query = new InputBag($query); + + $state = MediaLibraryState::fromRequest($request); $this->assertInstanceOf(MediaLibraryState::class, $state); }