Thinkphp框架学习
Json()方法的使用
return json();
是可以直接返回json数据,而且输出中文也不会乱码,也可以直接更改接口的状态码,还可以直接写入haeder参数
具体详情可以去看看框架的json()底层封装方法
目录:thinkphp6.1\thinkphp6\vendor\topthink\framework\src\helper.php
$data = [
'code' => 200,
'msg' => '成功',
'data' => [
'id' => 1,
'name' => '薛凯凯'
]
];
$header = [
'Token' => 'ealdfjkaslfjdsf'
];
return json($data,205,$header);
控制器request属性
可以直接通过这个方法直接获取url属性,param(),get(),post()
直接在方法里面用就可以了。
第一个参数url里的参数值,第二个参数可以给url赋值,第三个参数强制转换整形
$this->request->param('abc',1,'intval');
$this->request->get();
$this->request->post();
魔术方法__call()
如果我们的方法不存在或控制器不存在的话,可以用这个方法进行编写自己的报错方式给前端呈现。
这个是在BaseController控制器里写的
/**
* __call魔术引擎方法 xkk
*
* @param [type] $name
* @param [type] $arguments
* @return void
*/
public function __call($name, $arguments)
{
// 逻辑:
// 如果我们的模块是API模块,需要输出Api的数据格式
// 如果我们是模板引擎的方式,就要用另一种方法了,可以让前端写页面报错
$request = [
'status' => 0,
'message' => '找不到该方法',
'result' => null
];
return json($request,400);
}
这个方法是我自己创建了一个Error控制器 多应用模式下也可以用
public function __call($name, $arguments)
{
$requset = [
'status' => 0,
'message' => '找不到该控制器',
'result' => null
];
return json($requset,400);
}
}
总结健壮服务---杜绝所有无效请求。 skr~ skr~
通用化Api返回json数据格式输出
这个方法我写在了app/common.php里
/**
* 通用化Api返回数据格式输出
*
* @param int $status 状态码
* @param string $messsage 错误提示
* @param array $data 返回数据
* @param int $httpStatus http状态码
* @return json
*/
function show($status, $messsage = 'error', $data = [], $httpStatus = 200)
{
$result = [
'status' => $status,
'msg' => $messsage,
'result' => $data
];
return json($result,$httpStatus);
}
在controller调用方法
return json($data,205,$header);
数据库操作-sql问题排查方案
第一种
$result = Db::table('xkk')->fetchSql()->select();
第二种
Db::getLastSql();exit;
打印出sql去数据库终端里查询一下.
多应用模式
多应用模式生成命令
如果你要使用多应用模式的话那么你App下面的controller和Model就不能用了
你要重新创建一个目录比如app/admin/Controller在这个目录下创建控制器
composer require topthink/think-multi-app
多应用模式下路由设置
多应用模式下如果需要设置路由的话
要在某个应用模式下新建一个route文件夹-下面再创建一个路由文件
user think\facade\Route;
Route::rule('xkk','login/xkk','GET');
例:如果是在api应用模式下的controller下的login下的xkk方法
访问路径:127.0.0.1/api/xkk
自定义异常处理,不可预知的内部异常
多应用模式下自定义异常处理,这里不想解释逻辑了直接贴代码吧。
结合thinkphp6的文档是可以看明白的。
这是api下自定义异常处理文件。其他应用模式其实都是一样的。仿照就行了。
<?php
namespace app\api\exception;
use think\exception\Handle;
use think\Response;
use Throwable;
class Http extends Handle
{
public $httpStatus = 500;
/**
* Render an exception into an HTTP response.
*
* @access public
* @param \think\Request $request
* @param Throwable $e
* @return Response
*/
public function render($request, Throwable $e): Response
{
// 异常报错处理
if ($e instanceof \think\Exception) {
return show($e->getCode(), $e->getMessage());
}
// 判断这个类是否存在
if (method_exists($e,"getStatusCode")) {
$httpStatus = $e->getStatusCode();
}else {
$httpStatus = $this->httpStatus;
}
// 添加自定义异常处理机制
return show(0, $e->getMessage(), [], $httpStatus);
}
}
这是配置文件
<?php
// 容器Provider定义文件
return [
'think\exception\Handle' => 'app\\api\\exception\\Http',
];
token登录
这里我把token存到了redis
/**
* 生成登录所需的token
*
* @param string $string
* @return string
*/
public static function getLoginToken($string)
{
// 生成一个不会重复的随机字符
$str = md5(uniqid(md5(microtime(true)), true));
// 加密
$token = sha1($str . $string);
return $token;
}
这是登录注册的代码基本上每个项目都是这样的,开始搬砖吧,猿友。
<?php
namespace app\common\Business;
use app\common\lib\sms\Num;
use app\common\Mysql\User;
class