You are here

protected function JsCallbackBase::convertParameters in JS Callback Handler 8.3

Convert callback parameters into fully loaded objects.

Return value

array An associative array of converted parameters.

1 call to JsCallbackBase::convertParameters()
JsCallbackBase::__construct in src/Plugin/Js/JsCallbackBase.php
Constructs a \Drupal\Component\Plugin\PluginBase object.

File

src/Plugin/Js/JsCallbackBase.php, line 111

Class

JsCallbackBase
Base JsCallback class.

Namespace

Drupal\js\Plugin\Js

Code

protected function convertParameters() {
  if (!$this->js
    ->isExecuting()) {
    return [];
  }

  // Create a standalone "Request" object.
  $request = $this->js
    ->getRequest();
  $parameters = $request->query
    ->all() + $request->request
    ->all();
  if ($this->pluginDefinition['parameters']) {
    $options = [
      'parameters' => $this->pluginDefinition['parameters'],
    ];
    $route = new Route('/{' . implode('}/{', array_keys($parameters)) . '}', $parameters, [], $options);
    $parameters = $this->paramConversion
      ->enhance([
      '_route_object' => $route,
    ] + $parameters, Request::create(''));
    unset($parameters['_route_object']);
    unset($parameters['_raw_variables']);

    // Handle JSON data.
    $boolean_values = [
      'true',
      'false',
      '1',
      '0',
      'yes',
      'no',
    ];
    foreach ($parameters as $key => $value) {

      // Convert possible JSON strings into arrays.
      if (is_string($value) && $value !== '' && ($value[0] === '[' || $value[0] === '{') && ($json = Json::decode($value))) {
        $parameters[$key] = $json;
      }
      elseif (is_string($value) && in_array($value, $boolean_values)) {
        $parameters[$key] = (bool) $value;
      }
    }
  }
  return $parameters;
}