laravel的response()函数中,输入array却响应json的原因

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 协议》,转载必须注明作者和本文链接
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!