function AjaxPageState::handle

Same name and namespace in other branches
  1. 10 core/lib/Drupal/Core/StackMiddleware/AjaxPageState.php \Drupal\Core\StackMiddleware\AjaxPageState::handle()

File

core/lib/Drupal/Core/StackMiddleware/AjaxPageState.php, line 27

Class

AjaxPageState
Expands the compressed ajax_page_state query parameter into an array.

Namespace

Drupal\Core\StackMiddleware

Code

public function handle(Request $request, $type = self::MAIN_REQUEST, $catch = TRUE) : Response {
  if ($type === static::MAIN_REQUEST) {
    $request_ajax_page_state = [];
    if ($request->request
      ->has('ajax_page_state')) {
      $request_ajax_page_state = $this->parseAjaxPageState($request->request
        ->all('ajax_page_state'));
      $request->request
        ->set('ajax_page_state', $request_ajax_page_state);
    }
    $query_ajax_page_state = [];
    if ($request->query
      ->has('ajax_page_state')) {
      $query_ajax_page_state = $this->parseAjaxPageState($request->query
        ->all('ajax_page_state'));
      $request->query
        ->set('ajax_page_state', $query_ajax_page_state);
    }
    // If libraries are present in both the request and the query, ensure they
    // match by merging them together.
    if (!empty($request_ajax_page_state['libraries']) && !empty($query_ajax_page_state['libraries'])) {
      $request_libraries = explode(',', $request_ajax_page_state['libraries']);
      $query_libraries = explode(',', $query_ajax_page_state['libraries']);
      $libraries = implode(',', array_unique(array_merge($request_libraries, $query_libraries)));
      $request_ajax_page_state['libraries'] = $libraries;
      $query_ajax_page_state['libraries'] = $libraries;
      $request->request
        ->set('ajax_page_state', $request_ajax_page_state);
      $request->query
        ->set('ajax_page_state', $query_ajax_page_state);
    }
  }
  return $this->httpKernel
    ->handle($request, $type, $catch);
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.