ThinkPHP6.0安装多应用和常用的SDK

1.安装ThinkPHP6.0框架 

composer create-project topthink/think tp

2.安装多应用

composer require topthink/think-multi-app

3.配置多应用模式

3.1删除原来app目录下的controller文件夹

3.2修改配置文件开启多应用模式,在config/app.php文件下增加以下内容

// 设置默认应用名称 

'default_app' => 'home',
 // 开启自动多模式
'auto_multi_app' => true,
 // 开启应用快速访问
'app_express' => false,

4.创建demo应用目录

php think build 项目名

4.1因为我使用的前后端分离所以这里新增中间件文件夹和路由文件夹

 项目名/middleware/Codelogin.php 根据业务需求改里面的内容

<?php
// 这是全局中间件

namespace app\admin\middleware;

use think\facade\Db; // 数据库的链接
class Codelogin
{
    public function handle($request, \Closure $next)
    {
        if (empty(@$_SERVER['HTTP_AUTHORIZATION'])) {
            return json(array('code' => 401, 'msg' => '请先登录!'));
        }
        $token = checkToken(str_replace("Bearer ", "", @$_SERVER['HTTP_AUTHORIZATION']));
        if ($token['code'] != 200) {
            return json(array('code' => 401, 'msg' => $token['msg']));
        }
        $admin = Db::name('store_info')->where('id', $token['data']['UserID'])->find();

        // 判断是否被禁用
        if ($admin ['status'] == 2 || $admin ['status'] == 3) {
            return json(array('code' => 401, 'msg' => '账号异常,不能操作!'));
        }

        // 判断密码
        if (@$admin ['pass'] != @$token['data']['pass']) {
            return json(array('code' => 401, 'msg' => '密码错误!'));
        }

        $request->AdminId = $token['data']['UserID'];

        return $next($request);
    }
}

4.2 路由 项目名/route/route.php

<?php
// +----------------------------------------------------------------------
namespace app\admin\route;

use think\facade\Route;

Route::rule('userInfo', 'Login/userInfo', 'get');

Route::rule('login', 'Login/index', 'post');

5.安装jwt(加密和解密token)

composer require firebase/php-jwt

6.安装ThinkPHP6.0的图形验证码

composer require topthink/think-captcha

6.1前后端分离注意(使用redis 做缓存把验证码缓存到redis里面),改vendor/topthink/think-captcha/src/Captcha.php文件

// 引入
use think\facade\Cache;
// 在到 generate方法的 128行左右
$this->session->set('captcha', [
    'key' => $hash,
]);
// 改成
$this->session->set('captcha', [
     'key' => $hash,
]);
Cache::store('redis')->set('captcha'.request()->ip(),$hash,80);

// 在check方法里面的 (可以删掉)
if (!$this->session->has('captcha')) {
    return false;
}
$key = $this->session->get('captcha.key');
// 改成 
$key = Cache::store('redis')->get('captcha'.request()->ip());

7.安装微信第三方SDK(要求>=php7.0版本) SDK的文档地址

composer require overtrue/wechat:~4.0 -vvv

8.安装阿里云的oss对象存储

composer require aliyuncs/oss-sdk-php

9.安装短信SDK

// 阿里云
composer require alibabacloud/dysmsapi-20170525
// 腾讯云
composer require tencentcloud/tencentcloud-sdk-php

10.ThinkPHP6.0队列 

composer require topthink/think-queue

10.1使用在文件里面引入  use think\facade\Queue;

// 发送发布:任务名, 参数, 队列名 发消息
Queue::push('app\api\job\Test@fire', $data, $job_queue_name);
Queue::push('app\api\job\Test@doTask', $data, $job_queue_name);

10.2创建文件夹,在应用目录或在app下创建 job/test.php,test.php代码如下

<?php
namespace app\api\job;
use think\queue\Job;

class Test{

    /**
     * 创建任务类
     *推荐使用 app\job 作为任务类的命名空间 也可以放在任意可以自动加载到的地方
     *任务类不需继承任何类,如果这个类只有一个任务,那么就只需要提供一个fire方法就可以了,如果有多个小任务,就写多个方法,下面发布任务的时候会有区别
     *还有个可选的任务失败执行的方法 failed 传入的参数为$data(发布任务时自定义的数据)
     * @param Job $job  当前的任务对象
     * @param $data 发布任务时自定义的数据
     */
    public function fire(Job $job, $data){

        // ....这里执行具体的任务
        try{
            // ....这里执行具体的任务
            echo "1执行逻辑\n";
            if (1 == 1) {
                // 成功删除任务
                $job->delete();
            }else{
                // 此任务超过3次则三次
                if ($job->attempts() > 3) {
                    //通过这个方法可以检查这个任务已经重试了几次了
                    // todo .... 删除前逻辑
                    $job->delete();
                }
                // 不成功延迟2发再次发布
                $job->release(2);
            }
        }catch(\Exception $e){
            // 通过这个方法可以检查这个任务已经重试了几次了
            if ($job->attempts() > 3) {
                // todo .... 删除前逻辑
                $job->delete();
            }
        }
    }

    /**
     * 执行逻辑
     * @param $data 数据
     * @return bool 返回结果
     */
    public function doTask(Job $job, $data){
        echo "2执行逻辑\n";
        $job->delete();
    }
    
    /**
     * 发布失败
     * @param $data
     */
    public function failed($data){
        // todo ...任务达到最大重试次数后,失败了
    }

}

11.高并发数据处理 - 锁 对应文档(英文)

composer require "malkusch/lock"

11.1锁的使用 (redis 举例)引入use malkusch\lock\mutex\PHPRedisMutex;

$mutex = new PHPRedisMutex([$redis], "balance_".$id,10);
            $mutex->synchronized(function () use ($id){
            sleep(5);
            echo $id."Hello, World!\n";
        });

12.二维码生成

composer require endroid/qr-code

  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值