Thinkphp6框架学习--学习途径慕课网的singwa老师

本文介绍了ThinkPHP6框架的学习路径,重点讲解了Json()方法的使用、控制器中request属性的访问、魔术方法__call()的实现、通用Api的json返回格式以及数据库操作中的SQL问题排查。此外,还探讨了多应用模式的配置和路由设定,自定义异常处理、Token登录结合Redis、中间件的使用,以及如何通过阿里云发送短信。同时,分享了使用Redis的Hash数据类型处理购物车功能和生成订单号的代码片段。
摘要由CSDN通过智能技术生成

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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值