laravel的response()函式中,輸入array卻響應json的原因

long0發表於2020-12-20

php中不能直接寫{"key":"value"}的形式,必須將string|arrayjson_encode()等函式進行轉換,才能變為json物件。
但是我發現response函式的$content引數主要輸入的是array型別,用postman得到的輸出結果卻是標準的json格式。
laravel jwt 在response函式中,輸入array卻響應json的原因

laravel的response()函式中,輸入array卻響應json的原因
這不用想,肯定是自動解析成json後才響應給客戶端的啊,但作為程式設計師一定要有分析原始碼的本事,哪怕顯而易見response()函式肯定得去檢視Response類,但這也太沒有挑戰性了,於是我立意要換一種方法去探索並找出把$content值轉換為json物件的方法。

線路一:

第一步當然是對著response單詞,按住ctrl+滑鼠左鍵,於是進入到了下面的函式體:
laravel的response()函式中,輸入array卻響應json的原因
$content被傳遞到了make()中,但點選make死活也無法跳轉。
那怎麼辦才能找到make()函式屬於哪個類例項的?$factory例項中應該有這個方法?
嘗試跳轉至app
laravel的response()函式中,輸入array卻響應json的原因
它返回的是Application類,繼續跳轉至該類:
laravel的response()函式中,輸入array卻響應json的原因
發現他是個靜態方法,此路不通!

線路二:

能注意到,返回的是Container::getInstance()例項的一個方法:
laravel的response()函式中,輸入array卻響應json的原因
我探索了一段時間,啥都沒撈著,這條路算了吧。

線路三:

$content引數的型別能知道,
laravel的response()函式中,輸入array卻響應json的原因
於是我嘗試在根目錄下進行了一系列全域性搜尋:
laravel的response()函式中,輸入array卻響應json的原因
laravel的response()函式中,輸入array卻響應json的原因
laravel的response()函式中,輸入array卻響應json的原因
$context有點多,但肯定是請求或響應相關的,於是我對這些結果進行了一番尋找,找到了如下:
laravel的response()函式中,輸入array卻響應json的原因
laravel的response()函式中,輸入array卻響應json的原因
這裡的引數是不是和response()函式的引數一樣?我猜應該就是它了!
於是跳轉至setContext()
laravel的response()函式中,輸入array卻響應json的原因
顯而易見,將array解析成json的函式在這裡。

線路四:

laravel的response()函式中,輸入array卻響應json的原因
make()函式的返回值是一個Response型別例項,但是Response類並沒有make()函式,
laravel的response()函式中,輸入array卻響應json的原因
我們再來看一下,make()函式是被$factory呼叫的,我們再跳轉至ResponseFactory看一下,
laravel的response()函式中,輸入array卻響應json的原因
於是發現了:
laravel的response()函式中,輸入array卻響應json的原因
$factorymake()方法即建立一個Response類例項,建立例項就的需要建構函式,
於是:
laravel的response()函式中,輸入array卻響應json的原因
對上號了!

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章