本章将会介绍一些在TP6中常见的知识点,包括调试,空控制器,助手函数等。
TP6中的调试
在TP6中,访问项目地址,有时候我们会因为各种各样的原因,返回错误页面。如下:
这里的错误信息,可以在config/app.php中配置,如图:
如果设置show_error_msg为true,可以看到具体的错误。例如,我输入控制器方法错误。如图:
如果需要更详细的报错信息,可以在项目根目录将默认生成的.example.env改成.env,这样就会显示详细的报错信息。如下图:
这种调试,会在开发时排查问题非常有用。
TP6中处理API请求时出现的错误
当ThinkPHP开发API时,难免会出现访问控制器或控制器中方法错误的情况。为了增强健壮性,需要对请求进行错误处理。
1、访问控制器错误
在app目录controller层下创建Error控制器,代码如下:
public function __call($name, $arguments)
{
//输出信息给API
r
e
s
u
l
t
=
[
"
s
t
a
t
u
s
"
=
>
"
0
"
,
"
m
e
s
s
a
g
e
"
=
>
"
控制器错误
"
,
"
r
e
s
u
l
t
"
=
>
"
f
a
i
l
"
]
;
r
e
t
u
r
n
j
s
o
n
(
result = [ "status" => "0", "message" => "控制器错误", "result" => "fail" ]; return json(
result=["status"=>"0","message"=>"控制器错误","result"=>"fail"];returnjson(result);
}
当访问控制器错误时,会返回如上的错误信息。
2、访问控制器下方法错误
同理,在app目录下文件BaseController中,使用魔术方法__call()。当请求方法错误时,会自动调用这个对象的__call()方法,返回错误信息给API。这样继承自BaseController的子类都会实现请求方法错误的处理。
TP6中常用的助手函数
json()方法
在PHP中,我们使用json_encode()函数来将数组或对象转换为json字符串。在TP6中提供了json()助手函数,改方法与原生方法不同点如下:
TP6中的json()方法与PHP中的json_encode()方法的作用类似,都是将PHP数组或对象转换为JSON格式的字符串。但是它们有以下几个区别:
- 参数传递方式不同
json()方法可以接收多个参数,其中第一个参数是需要转换为JSON格式的PHP数组或对象,而后面的参数是可选的,用于设置JSON编码的选项。而json_encode()方法只接收一个参数,即需要转换为JSON格式的PHP数组或对象。
$result = [
"status" => 0,
"message" => "success",
"result" => [
"sex" => 0
]
];
$code = 201;
return json($result, $code); //json()方法可以传递多个参数,这里传递一个返回的状态码。
说明:json()方法源码在json()方法实现vendor\topthink\framework\src\helper.php文件中。
3. 返回值不同
json()方法返回的是一个Response对象,其中包含了JSON格式的字符串。而json_encode()方法直接返回JSON格式的字符串。
- 错误处理不同
json()方法在转换过程中,如果出现了错误,会自动设置HTTP响应码和错误信息,并返回一个包含错误信息的Response对象。而json_encode()方法不会自动处理错误,需要手动处理并设置HTTP响应码和错误信息。
需要注意的是,TP6中的json()方法实际上是对json_encode()方法的一个封装,它们的主要区别在于使用方式和返回值类型。
halt()助手函数
在调试时很有用,这个函数等同于dump()和exit()结合起来的效果。就是先输出变量信息,然后终止程序的执行。