Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. JsonResponse.php

function JsonResponse::setCallback

Sets the JSONP callback.

Parameters

string|null $callback The JSONP callback or null to use none:

Return value

$this

Throws

\InvalidArgumentException When the callback name is not valid

File

vendor/symfony/http-foundation/JsonResponse.php, line 78

Class

JsonResponse
Response represents an HTTP response in JSON format.

Namespace

Symfony\Component\HttpFoundation

Code

public function setCallback(?string $callback) : static {
    if (null !== $callback) {
        // partially taken from https://geekality.net/2011/08/03/valid-javascript-identifier/
        // partially taken from https://github.com/willdurand/JsonpCallbackValidator
        //      JsonpCallbackValidator is released under the MIT License. See https://github.com/willdurand/JsonpCallbackValidator/blob/v1.1.0/LICENSE for details.
        //      (c) William Durand <william.durand1@gmail.com>
        $pattern = '/^[$_\\p{L}][$_\\p{L}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\x{200C}\\x{200D}]*(?:\\[(?:"(?:\\\\.|[^"\\\\])*"|\'(?:\\\\.|[^\'\\\\])*\'|\\d+)\\])*?$/u';
        $reserved = [
            'break',
            'do',
            'instanceof',
            'typeof',
            'case',
            'else',
            'new',
            'var',
            'catch',
            'finally',
            'return',
            'void',
            'continue',
            'for',
            'switch',
            'while',
            'debugger',
            'function',
            'this',
            'with',
            'default',
            'if',
            'throw',
            'delete',
            'in',
            'try',
            'class',
            'enum',
            'extends',
            'super',
            'const',
            'export',
            'import',
            'implements',
            'let',
            'private',
            'public',
            'yield',
            'interface',
            'package',
            'protected',
            'static',
            'null',
            'true',
            'false',
        ];
        $parts = explode('.', $callback);
        foreach ($parts as $part) {
            if (!preg_match($pattern, $part) || \in_array($part, $reserved, true)) {
                throw new \InvalidArgumentException('The callback name is not valid.');
            }
        }
    }
    $this->callback = $callback;
    return $this->update();
}
RSS feed
Powered by Drupal