You are here

public function HttpConfigRequestForm::validateJson in HTTP Client Manager 8.2

Validate JSON.

Parameters

array $element: The Form element.

\Drupal\Core\Form\FormStateInterface $form_state: The Form State instance.

File

src/Form/HttpConfigRequestForm.php, line 262

Class

HttpConfigRequestForm
Class HttpConfigRequestForm.

Namespace

Drupal\http_client_manager\Form

Code

public function validateJson(array &$element, FormStateInterface $form_state) {
  $value = $element['#value'];
  if (empty($value)) {
    return;
  }
  if (is_string($value)) {
    $form_state
      ->setError($element);
    return;
  }

  /** @var \GuzzleHttp\Command\Guzzle\Parameter $param */
  $param = $element['#command_param'];
  $type = $param
    ->getType();
  switch ($type) {
    case 'array':
      $is_valid = is_array($value);
      break;
    case 'object':
      $is_valid = is_object($value) || array_values($value) !== $value;
      break;
    default:
      $is_valid = FALSE;
  }
  if (!$is_valid) {
    $message = $this
      ->t('Field @title has to be an @type. @var_type provided.', [
      '@title' => $element['#title'],
      '@type' => $type,
      '@var_type' => ucfirst(gettype($value)),
    ]);
    $form_state
      ->setError($element, $message);
    if (!is_string($value)) {
      $element['#value'] = json_encode($value, JSON_PRETTY_PRINT);
    }
  }
}