鍍金池/ 問答/PHP/ 剛剛看laravel 手冊 withCallback() 方法是什么意思?有

剛剛看laravel 手冊 withCallback() 方法是什么意思?有什么作用~

clipboard.png
這里 的 withCallback 方法有什么作用?

回答
編輯回答
拮據

平常如果是自己寫的話,一般javascript會攜帶一個callback參數傳給服務器端php,而php響應jsonp的話一般是如下格式:

echo $callback.'('.$data.');';

在laravel中,withCallback方法它里面只有一行,參數也就是客戶端callback名,是一個字符串而已,也就是你看到的$request->input('callback')

return $this->setCallback($callback);

setCallback方法如下:

public function setCallback($callback = null)
    {
        if (null !== $callback) {
            // partially taken from http://www.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 = array(
                '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();
    }

顯然,他幫我們做了callback參數的合法性過濾, 最后的update會做相關的響應頭設置,其實和平常一樣的,并不神秘。如果不明白我在說什么,可以去了解下jsonp,以及php該如何響應jsonp請求,相信會有不錯的收獲。

2017年2月12日 19:41