diff --git a/core/lib/Drupal/Core/Ajax/AjaxResponseAttachmentsProcessor.php b/core/lib/Drupal/Core/Ajax/AjaxResponseAttachmentsProcessor.php index 875c9d3ef9619dde2ae8fdddc62c4b2b8e270c1b..b5cc94d6689a58345ce28608cf7ff904ab2418e4 100644 --- a/core/lib/Drupal/Core/Ajax/AjaxResponseAttachmentsProcessor.php +++ b/core/lib/Drupal/Core/Ajax/AjaxResponseAttachmentsProcessor.php @@ -128,7 +128,7 @@ public function processAttachments(AttachmentsInterface $response) { * An array of commands ready to be returned as JSON. */ protected function buildAttachmentsCommands(AjaxResponse $response, Request $request) { - $ajax_page_state = $request->request->get('ajax_page_state'); + $ajax_page_state = $request->request->all('ajax_page_state'); // Aggregate CSS/JS if necessary, but only during normal site operation. $optimize_css = !defined('MAINTENANCE_MODE') && $this->config->get('css.preprocess'); diff --git a/core/lib/Drupal/Core/Cache/Context/QueryArgsCacheContext.php b/core/lib/Drupal/Core/Cache/Context/QueryArgsCacheContext.php index a48664468db9be8fb2a6ffd6ce72b441a01fd4a1..d9e5d67983d75ef575254e488e42fd3c6b6fc038 100644 --- a/core/lib/Drupal/Core/Cache/Context/QueryArgsCacheContext.php +++ b/core/lib/Drupal/Core/Cache/Context/QueryArgsCacheContext.php @@ -31,7 +31,7 @@ public function getContext($query_arg = NULL) { return ($value !== NULL) ? $value : ''; } elseif ($this->requestStack->getCurrentRequest()->query->has($query_arg)) { - $value = $this->requestStack->getCurrentRequest()->query->get($query_arg); + $value = $this->requestStack->getCurrentRequest()->query->all()[$query_arg]; if (is_array($value)) { return http_build_query($value); } diff --git a/core/lib/Drupal/Core/Render/MainContent/DialogRenderer.php b/core/lib/Drupal/Core/Render/MainContent/DialogRenderer.php index c445d8507c6bde47193551f58718c9484a39c517..77fc33557dafe7d71eeabf8f55a4935448ae9a52 100644 --- a/core/lib/Drupal/Core/Render/MainContent/DialogRenderer.php +++ b/core/lib/Drupal/Core/Render/MainContent/DialogRenderer.php @@ -61,7 +61,7 @@ public function renderResponse(array $main_content, Request $request, RouteMatch $title = isset($main_content['#title']) ? $main_content['#title'] : $this->titleResolver->getTitle($request, $route_match->getRouteObject()); // Determine the dialog options and the target for the OpenDialogCommand. - $options = $request->request->get('dialogOptions', []); + $options = $request->request->all('dialogOptions'); $target = $this->determineTargetSelector($options, $route_match); $response->addCommand(new OpenDialogCommand($target, $title, $content, $options)); diff --git a/core/lib/Drupal/Core/Render/MainContent/ModalRenderer.php b/core/lib/Drupal/Core/Render/MainContent/ModalRenderer.php index d250d57329b0776dbf828c70d3cf5712295bbd10..6f6d117332154c79c1d34edf36f1b011cd36fddb 100644 --- a/core/lib/Drupal/Core/Render/MainContent/ModalRenderer.php +++ b/core/lib/Drupal/Core/Render/MainContent/ModalRenderer.php @@ -31,7 +31,7 @@ public function renderResponse(array $main_content, Request $request, RouteMatch // Determine the title: use the title provided by the main content if any, // otherwise get it from the routing information. - $options = $request->request->get('dialogOptions', []); + $options = $request->request->all('dialogOptions'); $response->addCommand(new OpenModalDialogCommand($title, $content, $options)); return $response; diff --git a/core/lib/Drupal/Core/Render/MainContent/OffCanvasRenderer.php b/core/lib/Drupal/Core/Render/MainContent/OffCanvasRenderer.php index 086e84f929de33fa7fc8a9c130113cf04dd808a0..dc575a5fc2d4eaae0d51fc17f31cd92656404d4e 100644 --- a/core/lib/Drupal/Core/Render/MainContent/OffCanvasRenderer.php +++ b/core/lib/Drupal/Core/Render/MainContent/OffCanvasRenderer.php @@ -64,7 +64,7 @@ public function renderResponse(array $main_content, Request $request, RouteMatch // Determine the title: use the title provided by the main content if any, // otherwise get it from the routing information. - $options = $request->request->get('dialogOptions', []); + $options = $request->request->all('dialogOptions'); $response->addCommand(new OpenOffCanvasDialogCommand($title, $content, $options, NULL, $this->position)); return $response; } diff --git a/core/lib/Drupal/Core/Theme/AjaxBasePageNegotiator.php b/core/lib/Drupal/Core/Theme/AjaxBasePageNegotiator.php index 5cd2ee305797c48727a8309ccc24fc97746d20a4..1c19472df868a68b67811d19060e1cab8ee13f6c 100644 --- a/core/lib/Drupal/Core/Theme/AjaxBasePageNegotiator.php +++ b/core/lib/Drupal/Core/Theme/AjaxBasePageNegotiator.php @@ -65,7 +65,7 @@ public function __construct(CsrfTokenGenerator $token_generator, ConfigFactoryIn * {@inheritdoc} */ public function applies(RouteMatchInterface $route_match) { - $ajax_page_state = $this->requestStack->getCurrentRequest()->request->get('ajax_page_state'); + $ajax_page_state = $this->requestStack->getCurrentRequest()->request->all('ajax_page_state'); return !empty($ajax_page_state['theme']) && isset($ajax_page_state['theme_token']); } @@ -73,7 +73,7 @@ public function applies(RouteMatchInterface $route_match) { * {@inheritdoc} */ public function determineActiveTheme(RouteMatchInterface $route_match) { - $ajax_page_state = $this->requestStack->getCurrentRequest()->request->get('ajax_page_state'); + $ajax_page_state = $this->requestStack->getCurrentRequest()->request->all('ajax_page_state'); $theme = $ajax_page_state['theme']; $token = $ajax_page_state['theme_token']; diff --git a/core/modules/comment/src/Controller/CommentController.php b/core/modules/comment/src/Controller/CommentController.php index 2cba4ac918df84b83351010d536b203a8f1586c8..ee4368b0d4c460b178b225cbaa4c33b1b35b93c0 100644 --- a/core/modules/comment/src/Controller/CommentController.php +++ b/core/modules/comment/src/Controller/CommentController.php @@ -337,11 +337,11 @@ public function renderNewCommentsNodeLinks(Request $request) { throw new AccessDeniedHttpException(); } - $nids = $request->request->get('node_ids'); - $field_name = $request->request->get('field_name'); - if (!isset($nids)) { + if (!$request->request->has('node_ids') || !$request->request->has('field_name')) { throw new NotFoundHttpException(); } + $nids = $request->request->all('node_ids'); + $field_name = $request->request->get('field_name'); // Only handle up to 100 nodes. $nids = array_slice($nids, 0, 100); diff --git a/core/modules/contextual/src/ContextualController.php b/core/modules/contextual/src/ContextualController.php index cd6ddb40a85830148a75f7d46320d1a1228f0d19..378b5236c4b5eafda1bc9596de12cc91eec53053 100644 --- a/core/modules/contextual/src/ContextualController.php +++ b/core/modules/contextual/src/ContextualController.php @@ -60,15 +60,15 @@ public static function create(ContainerInterface $container) { * @see contextual_preprocess() */ public function render(Request $request) { - $ids = $request->request->get('ids'); - if (!isset($ids)) { + if (!$request->request->has('ids')) { throw new BadRequestHttpException('No contextual ids specified.'); } + $ids = $request->request->all('ids'); - $tokens = $request->request->get('tokens'); - if (!isset($tokens)) { + if (!$request->request->has('tokens')) { throw new BadRequestHttpException('No contextual ID tokens specified.'); } + $tokens = $request->request->all('tokens'); $rendered = []; foreach ($ids as $key => $id) { diff --git a/core/modules/field_ui/src/Form/FieldConfigEditForm.php b/core/modules/field_ui/src/Form/FieldConfigEditForm.php index db8122c4d93100cd5d0d1c0957c30599ea70763c..7503568129c0a19be65f225401c9c0ede68886fa 100644 --- a/core/modules/field_ui/src/Form/FieldConfigEditForm.php +++ b/core/modules/field_ui/src/Form/FieldConfigEditForm.php @@ -206,7 +206,7 @@ public function save(array $form, FormStateInterface $form_state) { $this->messenger()->addStatus($this->t('Saved %label configuration.', ['%label' => $this->entity->getLabel()])); $request = $this->getRequest(); - if (($destinations = $request->query->get('destinations')) && $next_destination = FieldUI::getNextDestination($destinations)) { + if (($destinations = $request->query->all('destinations')) && $next_destination = FieldUI::getNextDestination($destinations)) { $request->query->remove('destinations'); $form_state->setRedirectUrl($next_destination); } diff --git a/core/modules/field_ui/src/Form/FieldStorageConfigEditForm.php b/core/modules/field_ui/src/Form/FieldStorageConfigEditForm.php index bf1994c1f93cd1f2f6ac84e8668152702d57c41f..a8ea75d598ae5bcb2efff169314381c1aa8ec8fc 100644 --- a/core/modules/field_ui/src/Form/FieldStorageConfigEditForm.php +++ b/core/modules/field_ui/src/Form/FieldStorageConfigEditForm.php @@ -229,7 +229,7 @@ public function save(array $form, FormStateInterface $form_state) { $this->entity->save(); $this->messenger()->addStatus($this->t('Updated field %label field settings.', ['%label' => $field_label])); $request = $this->getRequest(); - if (($destinations = $request->query->get('destinations')) && $next_destination = FieldUI::getNextDestination($destinations)) { + if (($destinations = $request->query->all('destinations')) && $next_destination = FieldUI::getNextDestination($destinations)) { $request->query->remove('destinations'); $form_state->setRedirectUrl($next_destination); } diff --git a/core/modules/history/src/Controller/HistoryController.php b/core/modules/history/src/Controller/HistoryController.php index c6a48349038767cd46e675e9752490b52c5b67aa..ca3498ead8a72424b749a690a155ed0ae2986489 100644 --- a/core/modules/history/src/Controller/HistoryController.php +++ b/core/modules/history/src/Controller/HistoryController.php @@ -28,10 +28,10 @@ public function getNodeReadTimestamps(Request $request) { throw new AccessDeniedHttpException(); } - $nids = $request->request->get('node_ids'); - if (!isset($nids)) { + if (!$request->request->has('node_ids')) { throw new NotFoundHttpException(); } + $nids = $request->request->all('node_ids'); return new JsonResponse(history_read_multiple($nids)); } diff --git a/core/modules/jsonapi/src/Controller/EntityResource.php b/core/modules/jsonapi/src/Controller/EntityResource.php index 47bc9c056dedd941c3efba054de0750c39506c71..b4124dd4d7431f9f25659a35fe8ebfd66e572cda 100644 --- a/core/modules/jsonapi/src/Controller/EntityResource.php +++ b/core/modules/jsonapi/src/Controller/EntityResource.php @@ -1217,13 +1217,13 @@ protected function entityExists(EntityInterface $entity) { */ protected function getJsonApiParams(Request $request, ResourceType $resource_type) { if ($request->query->has('filter')) { - $params[Filter::KEY_NAME] = Filter::createFromQueryParameter($request->query->get('filter'), $resource_type, $this->fieldResolver); + $params[Filter::KEY_NAME] = Filter::createFromQueryParameter($request->query->all('filter'), $resource_type, $this->fieldResolver); } if ($request->query->has('sort')) { - $params[Sort::KEY_NAME] = Sort::createFromQueryParameter($request->query->get('sort')); + $params[Sort::KEY_NAME] = Sort::createFromQueryParameter($request->query->all()['sort'] ?? NULL); } if ($request->query->has('page')) { - $params[OffsetPage::KEY_NAME] = OffsetPage::createFromQueryParameter($request->query->get('page')); + $params[OffsetPage::KEY_NAME] = OffsetPage::createFromQueryParameter($request->query->all('page')); } else { $params[OffsetPage::KEY_NAME] = OffsetPage::createFromQueryParameter(['page' => ['offset' => OffsetPage::DEFAULT_OFFSET, 'limit' => OffsetPage::SIZE_MAX]]); diff --git a/core/modules/jsonapi/src/EventSubscriber/ResourceResponseSubscriber.php b/core/modules/jsonapi/src/EventSubscriber/ResourceResponseSubscriber.php index edf81cb677eca4b53f992f74a975519436473f49..7a065bfd832e7d316c5ff58a7ee3d4995f2a2b85 100644 --- a/core/modules/jsonapi/src/EventSubscriber/ResourceResponseSubscriber.php +++ b/core/modules/jsonapi/src/EventSubscriber/ResourceResponseSubscriber.php @@ -146,10 +146,10 @@ protected static function generateContext(Request $request) { 'account' => NULL, 'sparse_fieldset' => NULL, ]; - if ($request->query->get('fields')) { + if ($request->query->has('fields')) { $context['sparse_fieldset'] = array_map(function ($item) { return explode(',', $item); - }, $request->query->get('fields')); + }, $request->query->all('fields')); } return $context; } diff --git a/core/modules/jsonapi/tests/src/Kernel/Controller/EntityResourceTest.php b/core/modules/jsonapi/tests/src/Kernel/Controller/EntityResourceTest.php index 5f0246f2cbc0092804fd0914fe9f2c2d5c28c9d8..0cae3b71de73398493aff789625d418d82baab09 100644 --- a/core/modules/jsonapi/tests/src/Kernel/Controller/EntityResourceTest.php +++ b/core/modules/jsonapi/tests/src/Kernel/Controller/EntityResourceTest.php @@ -3,6 +3,7 @@ namespace Drupal\Tests\jsonapi\Kernel\Controller; use Drupal\Core\Field\FieldStorageDefinitionInterface; +use Drupal\Core\Http\InputBag; use Drupal\jsonapi\CacheableResourceResponse; use Drupal\jsonapi\ResourceType\ResourceType; use Drupal\jsonapi\JsonApiResource\Data; @@ -13,7 +14,6 @@ use Drupal\user\Entity\Role; use Drupal\user\Entity\User; use Drupal\user\RoleInterface; -use Symfony\Component\HttpFoundation\ParameterBag; use Symfony\Component\HttpFoundation\Request; /** @@ -186,7 +186,7 @@ protected function createEntityResource() { */ public function testGetPagedCollection() { $request = Request::create('/jsonapi/node/article'); - $request->query = new ParameterBag([ + $request->query = new InputBag([ 'sort' => 'nid', 'page' => [ 'offset' => 1, @@ -215,7 +215,7 @@ public function testGetPagedCollection() { */ public function testGetEmptyCollection() { $request = Request::create('/jsonapi/node/article'); - $request->query = new ParameterBag(['filter' => ['id' => 'invalid']]); + $request->query = new InputBag(['filter' => ['id' => 'invalid']]); // Get the response. $resource_type = new ResourceType('node', 'article', NULL); diff --git a/core/modules/media_library/src/MediaLibraryState.php b/core/modules/media_library/src/MediaLibraryState.php index e1fd6e2e8b9c8ef4a03add70974669ac6563d2d0..63e29e09acbb4bcda12e6c02b3a3e6549003ac07 100644 --- a/core/modules/media_library/src/MediaLibraryState.php +++ b/core/modules/media_library/src/MediaLibraryState.php @@ -3,7 +3,9 @@ namespace Drupal\media_library; use Drupal\Component\Utility\Crypt; +use Drupal\Core\Http\InputBag; use Drupal\Core\Site\Settings; +use Symfony\Component\HttpFoundation\InputBag as SymfonyInputBag; use Symfony\Component\HttpFoundation\ParameterBag; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; @@ -94,15 +96,20 @@ public static function create($opener_id, array $allowed_media_type_ids, $select */ public static function fromRequest(Request $request) { $query = $request->query; + // Replace ParameterBag with InputBag for compatibility with Symfony 5. + // @todo Remove this when Symfony 4 is no longer supported. + if (!($query instanceof InputBag || $query instanceof SymfonyInputBag)) { + $query = new InputBag($query->all()); + } // Create a MediaLibraryState object through the create method to make sure // 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 @@ -222,7 +229,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'); } /** @@ -266,7 +273,29 @@ 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. + */ + 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/menu_ui/src/Controller/MenuController.php b/core/modules/menu_ui/src/Controller/MenuController.php index 7958c101ace4cdb212876becccc8a3b327b0fb71..e76ff6c5605e676b8faa79345a5f7de791866c50 100644 --- a/core/modules/menu_ui/src/Controller/MenuController.php +++ b/core/modules/menu_ui/src/Controller/MenuController.php @@ -50,7 +50,7 @@ public static function create(ContainerInterface $container) { */ public function getParentOptions(Request $request) { $available_menus = []; - if ($menus = $request->request->get('menus')) { + if ($menus = $request->request->all('menus')) { foreach ($menus as $menu) { $available_menus[$menu] = $menu; } diff --git a/core/modules/quickedit/src/QuickEditController.php b/core/modules/quickedit/src/QuickEditController.php index bc81769cdbfecbc23f98fb569cb92e0f7c11d4eb..d5967090b0bdd7b18f3ca5e49aa25b60e0843af5 100644 --- a/core/modules/quickedit/src/QuickEditController.php +++ b/core/modules/quickedit/src/QuickEditController.php @@ -116,11 +116,11 @@ public static function create(ContainerInterface $container) { * The JSON response. */ public function metadata(Request $request) { - $fields = $request->request->get('fields'); - if (!isset($fields)) { + if (!$request->request->has('fields')) { throw new NotFoundHttpException(); } - $entities = $request->request->get('entities'); + $fields = $request->request->all('fields'); + $entities = $request->request->all('entities'); $metadata = []; foreach ($fields as $field) { @@ -147,7 +147,7 @@ public function metadata(Request $request) { // If the entity information for this field is requested, include it. $entity_id = $entity->getEntityTypeId() . '/' . $entity_id; - if (is_array($entities) && in_array($entity_id, $entities) && !isset($metadata[$entity_id])) { + if (in_array($entity_id, $entities, TRUE) && !isset($metadata[$entity_id])) { $metadata[$entity_id] = $this->metadataGenerator->generateEntityMetadata($entity); } @@ -168,10 +168,10 @@ public function metadata(Request $request) { */ public function attachments(Request $request) { $response = new AjaxResponse(); - $editors = $request->request->get('editors'); - if (!isset($editors)) { + if (!$request->request->has('editors')) { throw new NotFoundHttpException(); } + $editors = $request->request->all('editors'); $response->setAttachments($this->editorSelector->getEditorAttachments($editors)); @@ -229,7 +229,7 @@ public function fieldForm(EntityInterface $entity, $field_name, $langcode, $view // Re-render the updated field for other view modes (i.e. for other // instances of the same logical field on the user's page). - $other_view_mode_ids = $request->request->get('other_view_modes') ?: []; + $other_view_mode_ids = $request->request->all('other_view_modes'); $other_view_modes = array_map($render_field_in_view_mode, array_combine($other_view_mode_ids, $other_view_mode_ids)); $response->addCommand(new FieldFormSavedCommand($output, $other_view_modes)); diff --git a/core/modules/system/tests/modules/dialog_renderer_test/src/Render/MainContent/WideModalRenderer.php b/core/modules/system/tests/modules/dialog_renderer_test/src/Render/MainContent/WideModalRenderer.php index aecb4dd0de9330c52b2193d184bbb8bbbb64031c..feb5ca7ead2ad54424f7d163ab8d53223860b849 100644 --- a/core/modules/system/tests/modules/dialog_renderer_test/src/Render/MainContent/WideModalRenderer.php +++ b/core/modules/system/tests/modules/dialog_renderer_test/src/Render/MainContent/WideModalRenderer.php @@ -60,7 +60,7 @@ public function renderResponse(array $main_content, Request $request, RouteMatch // Determine the title: use the title provided by the main content if any, // otherwise get it from the routing information. - $options = $request->request->get('dialogOptions', []); + $options = $request->request->all('dialogOptions'); // Override width option. switch ($this->mode) { case 'wide': diff --git a/core/modules/views/src/Plugin/views/argument_default/QueryParameter.php b/core/modules/views/src/Plugin/views/argument_default/QueryParameter.php index 1b45615fd83fab31d7ff734ba8a69c6d1f89b1fa..bb21c6baa4e173434164d1812d47f2649390c869 100644 --- a/core/modules/views/src/Plugin/views/argument_default/QueryParameter.php +++ b/core/modules/views/src/Plugin/views/argument_default/QueryParameter.php @@ -66,7 +66,7 @@ public function getArgument() { $current_request = $this->view->getRequest(); if ($current_request->query->has($this->options['query_param'])) { - $param = $current_request->query->get($this->options['query_param']); + $param = $current_request->query->all()[$this->options['query_param']] ?? NULL; if (is_array($param)) { $conjunction = ($this->options['multiple'] == 'and') ? ',' : '+'; $param = implode($conjunction, $param); diff --git a/core/tests/Drupal/Tests/Core/Theme/AjaxBasePageNegotiatorTest.php b/core/tests/Drupal/Tests/Core/Theme/AjaxBasePageNegotiatorTest.php index cb653532010282f826ad6f96e7bfdc7ed64478a0..62fbcd5a719a252203741e9d94c5e6fc9e3ce984 100644 --- a/core/tests/Drupal/Tests/Core/Theme/AjaxBasePageNegotiatorTest.php +++ b/core/tests/Drupal/Tests/Core/Theme/AjaxBasePageNegotiatorTest.php @@ -3,6 +3,7 @@ namespace Drupal\Tests\Core\Theme; use Drupal\Core\Access\CsrfTokenGenerator; +use Drupal\Core\Http\InputBag; use Drupal\Core\Routing\RouteMatch; use Drupal\Core\Theme\AjaxBasePageNegotiator; use Drupal\Tests\UnitTestCase; @@ -55,6 +56,7 @@ public function setUp(): void { */ public function testApplies($request_data, $expected) { $request = new Request([], $request_data); + $request->request = new InputBag($request->request->all()); $route_match = RouteMatch::createFromRequest($request); $this->requestStack->push($request); @@ -79,6 +81,7 @@ public function testDetermineActiveThemeValidToken() { $theme_token = 'valid_theme_token'; $request = new Request([], ['ajax_page_state' => ['theme' => $theme, 'theme_token' => $theme_token]]); + $request->request = new InputBag($request->request->all()); $this->requestStack->push($request); $route_match = RouteMatch::createFromRequest($request); @@ -96,6 +99,7 @@ public function testDetermineActiveThemeInvalidToken() { $theme_token = 'invalid_theme_token'; $request = new Request([], ['ajax_page_state' => ['theme' => $theme, 'theme_token' => $theme_token]]); + $request->request = new InputBag($request->request->all()); $this->requestStack->push($request); $route_match = RouteMatch::createFromRequest($request); @@ -115,6 +119,7 @@ public function testDetermineActiveThemeDefaultTheme() { $theme_token = ''; $request = new Request([], ['ajax_page_state' => ['theme' => $theme, 'theme_token' => $theme_token]]); + $request->request = new InputBag($request->request->all()); $this->requestStack->push($request); $route_match = RouteMatch::createFromRequest($request);