精华内容
下载资源
问答
  • 本课程以开发一个真实企业网站项目为基线,以TP6官网手册为标准,把TP6框架理论知识详细贯穿到整个项目实战开发中,让学员通过这个项目实战开发课程,既可以系统掌握TP6框架知识,又可以学会如何使用TP6框架快速开发...
  • 主要讲了rbac数据表的设计 以及tp6对角色权限管理用户的管理 实现对菜单栏以及页面按钮权限的动态显示隐藏
  • tp6作为后端提供api  开发的移动端仿京东商城应用。 学会使用tp6框架  对api接口进行jwt  token认证 使用阿里短信接口发送短信,用户注册登录 学会配置使用微信 支付宝h5支付 学会调用快递接口 ...
  • Tp6使用 1、下载tp6 composer create-project topthink/think tp 2、设置多应用模式 tp6默认是单应用访问默认进入app/controller里的方法,如果需要做多应用开发(例:http://***.com/admin、http://***.co

    在码云或者git下载案例发现没有vendor无法运行

    composer install --ignore-platform-reqs

    或者

    composer update --ignore-platform-reqs

    Tp6使用

    1、下载tp6
    composer create-project topthink/think tp

    2、设置多应用模式
    tp6默认是单应用访问默认进入app/controller里的方法,如果需要做多应用开发(例:http://***.com/admin、http://***.com/index)需要开启多应用模式

    composer requiretopthink/think-multi-app

    php think build 应用名称(例:index或者admin)

    3、模板渲染

    tp3: $this->display();
    
    tp5: return $this->fetch();
    
    tp6: return View::fetch('index');
    

    tp6默认缺少很多依赖包的,需要下载

    composer require topthink/think-view

    控制器引入

    use think\facade\View;

    4、模板跳转重定向
    在这里插入图片描述

    composer require liliuwei/thinkphp-jump

    控制器引入

    头部引入:use \liliuwei\think\Jump;

    类内引入:use Jump;

    如果报错:

    查看app/config/jump.php是否有设置:

    'dispatch_success_tmpl' => app()->getRootPath().'/vendor/qeq66/think-jump/template/jump.html',
    
    'dispatch_error_tmpl' => app()->getRootPath().'/vendor/qeq66/think-jump/template/jump.html'
    

    5、获取表单数据
    控制器引入

    use think\facade\Request;
    
    $code = Request::param('code');
    

    或者

    $code = input("code");
    

    6、数字验证码
    composer require topthink/think-captcha

    在应用app目录下找到全局中间件middleware.php文件,把下面注释的代码\think\middleware\SessionInit::class开启

    7、上传图片处理图片
    composer require topthink/think-image

    8、mysql select查询
    在这里插入图片描述

    从tp5过渡过来的,默认select查询是返回二维数组,tp6返回数据集,虽然官方说和数组操作基本无区别

    但是有些时候还是数组好用 例如 a r r [ arr[ arr[k][0] = "test"这种间接修改,在默认返回的数据集中,是报错的,但是数组是可以这样操作的

    修改tp6目录下的/vendor/topthink/think-orm/src/db的BaseQuery.php

    在这里插入图片描述

    修改示例如图所示,将图中画红框的位置删除,并且在

    $resultSet = $this->connection->select($this);
    

    下面增加一行

    return $resultSet;
    

    9、分页

    $list = db::name('admin_menu')->where($where)->paginate([
    
    'list_rows'=> 10,
    
    'query' => request()->param(),
    
    ]);
    

    使用paginate方法获取分页数据,查询集合无法新增的下标值

    查询条件需要增加 ‘query’ => request()->param(),

    解决写法:

    php端:

    // An highlighted block
    $list = db::name('admin_menu')->where($where)->paginate([
    
    'list_rows'=> 10,
    
    'query' => request()->param(),
    
    ]);
    
    $new_arr = array();
    
    foreach($list as $k=>$v){
    
    $v[$k]['erji_menu'] = “案例”;
    
    $new_arr[] = $v;
    
    }
    
    // 获取分页显示
    
    $page = $list->render();
    
    // 模板变量赋值
    
    View::assign('list', $new_arr);
    
    View::assign('page', $page);
    

    html端

    {$page|raw}

    分页引用class修改

    tp6\vendor\topthink\think-orm\src\paginator\driver\Bootstrap.php

    10、新增数据差异
    对比tp5 save方法用于更新 add方法用于添加
    tp6 save既是更新也是添加 add方法被删除

    db::name('ceshi')->where(array('tz_id'=>$post['tz_id']))->save($users);
    db::name('ceshi')->save($users);
    

    加主键where是更新不加主键是添加,但是会出现问题执行成功只会返回 0,1
    不会像tp5 add方法返回添加数据的主键id

    /**
     * 插入记录
     * @access public
     * @param array   $data         数据
     * @param boolean $getLastInsID 返回自增主键
     * @return integer|string
     */
    public function insert(array $data = [], bool $getLastInsID = false)
    {
        if (!empty($data)) {
            $this->options['data'] = $data;
        }
    
        return $this->connection->insert($this, $getLastInsID);
    }
    

    add方法改成了insert方法,虽然注释上面写着返回自增主键,但是我这边测试还是没有拿到自增主键,不清楚是版本问题还是什么这里不深究如果你没遇到就当我没说

    /**
     * 插入记录并获取自增ID
     * @access public
     * @param array $data 数据
     * @return integer|string
     */
    public function insertGetId(array $data)
    {
        return $this->insert($data, true);
    }
    

    然后拿不到只能继续找发现有一个insertGetId可以拿到。也就是说为了快速开发,平时还是用save解决,遇到要拿自增主键就换成insertGetId

    11、tp6 高级查询and和or同时使用
    在这里插入图片描述
    tp6针对and查询和or查询有快捷方法
    在这里插入图片描述
    但是这些快捷方法会有很多局限性,当我们对数据进行一系列的复杂查询时这些快捷方法就会出现很多问题例如:

    $where1[] = ["order_khname","like",'%'.$keywords.'%'];
    $where2[] = ["order_khqq","like",'%'.$keywords.'%'];
    $where3[] = ["order_khmobile","like",'%'.$keywords.'%'];
    $where[] = ["order_type","=",$ddzt];
    $list = db::name('ceshi')
        ->where($where)
        ->whereOr([$where1,$where2,$where3])
        ->paginate([
            'list_rows'=> 10,
            'query' => request()->param(),
        ]);
    

    这里我们想要的sql格式为:

    SELECT * FROM `dc_ceshi` WHERE  `order_type` = 0 and ( ( `order_khname` LIKE '%1%' )  OR ( `order_khqq` LIKE '%1%' )  OR ( `order_khmobile` LIKE '%1%' )) LIMIT 0,10
    

    实际生成的格式为:

    SELECT * FROM `dc_ceshi` WHERE  `order_type` = 0 OR ( `order_khname` LIKE '%1%' )  OR ( `order_khqq` LIKE '%1%' )  OR ( `order_khmobile` LIKE '%1%' ) LIMIT 0,10
    

    这里就可以用到闭包查询(注:这只是我学习tp6的时候遇到的问题然后在tp6文档里面找到的解决方式,直接用原生sql也是可以解决,把where条件直接改成一个自定义的字符串也可以解决,用tp5的连接方式也应该可以但是我没试)

    $list = db::name('ceshi')
        ->where(function ($query) use ($keywords){
                $query->where("order_khname","like",'%'.$keywords.'%')
                    ->whereOr("order_khqq","like",'%'.$keywords.'%')
                    ->whereOr("order_khmobile","like",'%'.$keywords.'%');
            })
        ->where($where)
        ->paginate([
        'list_rows'=> 10,
        'query' => request()->param(),
    ]);
    

    这时候得到sql格式为:

    SELECT * FROM `dc_ceshi` WHERE  (  `order_khname` LIKE '%1%' OR `order_khqq` LIKE '%1%'  OR `order_khmobile` LIKE '%1%' )  AND `order_type` = 0 LIMIT 0,10
    

    已经满足了我的需求,但是还是有一个问题就是如果keywords这个变量没有值的时候他查询的语句格式为:

    SELECT * FROM `dc_ceshi` WHERE  (  `order_khname` LIKE '%%' OR `order_khqq` LIKE '%%'  OR `order_khmobile` LIKE '%%' )  AND `order_type` = 0 LIMIT 0,10
    

    这种情况只需要在加个if判断:

    $list = db::name('ceshi')
        ->where(function ($query) use ($keywords){
            if($keywords){
                $query->where("order_khname","like",'%'.$keywords.'%')
                    ->whereOr("order_khqq","like",'%'.$keywords.'%')
                    ->whereOr("order_khmobile","like",'%'.$keywords.'%');
            }
            })
        ->where($where)
        ->paginate([
        'list_rows'=> 10,
        'query' => request()->param(),
    ]);
    

    12、tp6 find查询变动
    tp5、tp3我们查询一个表是否存在数据可以直接查询一条

    $datafind = db::name('ceshi')->find();
    

    tp6 find查询必须增加where条件或者order排序,为什么不知道。有大神知道指点下O(∩_∩)O哈哈~

    $datafind = db::name('ceshi')->order('ID DESC')->find();
    
    展开全文
  • TP6 宝塔部署tp6笔记

    千次阅读 2019-11-30 15:15:21
    修改一下运行目录,tp的访问目录为根目录下的public(/public) 再开一下数据库的访问权限 这个是后就可访问我们的域名了 注意:前提端口一定要都开好,比如 80端口 , ftp上传可能用到的21,22端口,MySQL的3306...

    登录宝塔界面 ,添加站点,(如果已添加忽略此步骤)。
    在这里插入图片描述
    上传项目,我用的是FTP上传,(上传之前记得修改数据库配置信息,修改为你的线上数据库信息)
    在这里插入图片描述
    修改一下运行目录,tp的访问目录为根目录下的public(/public)
    在这里插入图片描述
    再开一下数据库的访问权限
    在这里插入图片描述
    这个是后就可访问我们的域名了
    在这里插入图片描述

    注意:前提端口一定要都开好,比如 80端口 , ftp上传可能用到的21,22端口,MySQL的3306端口等。。。

    展开全文
  • tp6配置redis

    千次阅读 2020-06-05 15:23:00
    2、将redis配置代码加进去即可 <?... // +---------------------------------------------------------------------- // | 缓存设置 // +---------------------------------------------------------------------...

    一、redis的基础配置:

    1、找到config配置文件下的cache.php

    2、将redis配置代码加进去即可

    <?php
    
    // +----------------------------------------------------------------------
    // | 缓存设置
    // +----------------------------------------------------------------------
    
    return [
        // 默认缓存驱动
        'default' => env('cache.driver', 'file'),
    
        // 缓存连接方式配置
        'stores'  => [
            'file' => [
                // 驱动方式
                'type'       => 'File',
                // 缓存保存目录
                'path'       => '',
                // 缓存前缀
                'prefix'     => '',
                // 缓存有效期 0表示永久缓存
                'expire'     => 0,
                // 缓存标签前缀
                'tag_prefix' => 'tag:',
                // 序列化机制 例如 ['serialize', 'unserialize']
                'serialize'  => [],
            ],
            // redis缓存
            'redis'   =>  [
                // 驱动方式
                'type'   => 'redis',
                // 服务器地址
                'host'       => '127.0.0.1',
            ],
        ],
    ];
    

    3、调用:

    <?php
    namespace app\pyp\controller;
    
    
    use think\facade\Cache;
    
    
    class Ceshi
    {
        public function index()
        {
            return '欢迎来到pyp世界';
        }
    
        public function redisCeshi()
        {
            Cache::store('redis')->set('name','value',3600);
            return '操作成功';
        }
    }
    

    二、redis库的切换

    1、在公共文件夹下 app/common (自建的,放哪儿按个人习惯)  新建Redis.php文件

    2、键入代码

    <?php
    namespace app\common;
    
    
    use think\facade\Cache;
    
    class Redis
    {
        /**
         * redis 切库
         * @param int $num 库号(0~15)
         */
        public static function select($num=0)
        {
            Cache::store('redis')->handler()->select($num);
        }
    
    }
    

    3、执行调用

    <?php
    namespace app\pyp\controller;
    
    use app\common\Redis;
    use think\facade\Cache;
    
    class Ceshi
    {
        public function index()
        {
            return '欢迎来到pyp世界';
        }
    
        public function redisCeshi()
        {
            Redis::select(7);
            Cache::store('redis')->set('name8','chenxi',3600);
            $name8 = Cache::store('redis')->get('name8');
            return $name8;
        }
    }
    

    4、访问可返回值  chenxi

    展开全文
  • TP6消息队列使用

    千次阅读 2020-08-24 19:00:34
    tp6中提供了很多种消息队列的链接方式,这里使用Redis数据库链接方式 免费小程序+公众好源码获取,gitee搜索CRMEB即可获取 小程序+公众号美观后台可扫描二维码体验 1.配置消息队列链接方式 首先配置/config/queue....

    tp6中提供了很多种消息队列的链接方式,这里使用Redis数据库链接方式

    免费小程序+公众号源码获取:点击获取

    1.配置消息队列链接方式
    首先配置/config/queue.php中的redis配置,这个配置可从.env当中读取如下图
    在这里插入图片描述
    2.下发消息队列
    把tp原来的方法稍作调整,把延迟消息队列和正常的放在一起方便调用
    整理出多任务和单任务的快捷使用方式

    <?php
    namespace crmeb\utils;
    
    use crmeb\traits\ErrorTrait;
    use think\facade\Config;
    use think\facade\Queue as QueueThink;
    
    /**
     * Class Queue
     * @package crmeb\utils
     * @method $this do(string $do) 设置任务执行方法
     * @method $this job(string $job) 设置任务执行类名
     * @method $this errorCount(int $errorCount) 执行失败次数
     * @method $this data(...$data) 执行数据
     * @method $this secs(int $secs) 延迟执行秒数
     * @method $this log($log) 记录日志
     */
    class Queue
    {
    
        use ErrorTrait;
    
        /**
         * 任务执行
         * @var string
         */
        protected $do = 'doJob';
    
        /**
         * 默认任务执行方法名
         * @var string
         */
        protected $defaultDo;
    
        /**
         * 任务类名
         * @var string
         */
        protected $job;
    
        /**
         * 错误次数
         * @var int
         */
        protected $errorCount = 3;
    
        /**
         * 数据
         * @var array|string
         */
        protected $data;
    
        /**
         * 任务名
         * @var null
         */
        protected $queueName = null;
    
        /**
         * 延迟执行秒数
         * @var int
         */
        protected $secs = 0;
    
        /**
         * 记录日志
         * @var string|callable|array
         */
        protected $log;
    
        /**
         * @var array
         */
        protected $rules = ['do', 'data', 'errorCount', 'job', 'secs', 'log'];
    
        /**
         * @var static
         */
        protected static $instance;
    
        /**
         * Queue constructor.
         */
        protected function __construct()
        {
            $this->defaultDo = $this->do;
        }
    
        /**
         * @return static
         */
        public static function instance()
        {
            if (is_null(self::$instance)) {
                self::$instance = new static();
            }
            return self::$instance;
        }
    
        /**
         * 放入消息队列
         * @param array|null $data
         * @return mixed
         */
        public function push(?array $data = null)
        {
            if (!$this->job) {
                return $this->setError('需要执行的队列类必须存在');
            }
            $res = QueueThink::{$this->action()}(...$this->getValues($data));
            $this->clean();
            return $res;
        }
    
        /**
         * 清除数据
         */
        public function clean()
        {
            $this->secs = 0;
            $this->data = [];
            $this->log = null;
            $this->queueName = null;
            $this->errorCount = 3;
            $this->do = $this->defaultDo;
        }
    
        /**
         * 获取任务方式
         * @return string
         */
        protected function action()
        {
            return $this->secs ? 'later' : 'push';
        }
    
        /**
         * 获取参数
         * @param $data
         * @return array
         */
        protected function getValues($data)
        {
            $jobData['data'] = $data ?: $this->data;
            $jobData['do'] = $this->do;
            $jobData['errorCount'] = $this->errorCount;
            $jobData['log'] = $this->log;
            if ($this->do != $this->defaultDo) {
                $this->job .= '@' . Config::get('queue.prefix', 'eb_') . $this->do;
            }
            if ($this->secs) {
                return [$this->secs, $this->job, $jobData, $this->queueName];
            } else {
                return [$this->job, $jobData, $this->queueName];
            }
        }
    
        /**
         * @param $name
         * @param $arguments
         * @return $this
         */
        public function __call($name, $arguments)
        {
            if (in_array($name, $this->rules)) {
                if ($name === 'data') {
                    $this->{$name} = $arguments;
                } else {
                    $this->{$name} = $arguments[0] ?? null;
                }
                return $this;
            } else {
                throw new \RuntimeException('Method does not exist' . __CLASS__ . '->' . $name . '()');
            }
        }
    }
    
    
    

    3.放入任务

    <?php
    namespace app\adminapi\controller;
    
    use crmeb\utils\Queue;
    
    class Test{
    	public function index()
    	{
    		//单例调用
    		Queue::instance()
    		->job(WechatTemplateJob::class)//执行任务类名
    		->data()//执行任务需要的参数,可无限制传数
    		//->secs(1) 延迟1秒后执行任务
    		->push();//放入任务
    	}
    }
    
    

    4.写消费任务逻辑

    <?php
    /**
     * @author: liaofei<136327134@qq.com>
     * @day: 2020/5/21
     */
    
    namespace crmeb\jobs;
    
    
    use crmeb\basic\BaseJob;
    use crmeb\services\template\Template;
    use think\facade\Route;
    
    /**
     * Class WechatTemplateJob
     * @package crmeb\jobs
     */
    class WechatTemplateJob
    {
    	/**
         * @param $name
         * @param $arguments
         */
        public function __call($name, $arguments)
        {
            $this->fire(...$arguments);
        }
    
        /**
         * @param Job $job
         * @param $data
         */
        public function fire(Job $job, $data): void
        {
            try {
                $action = $data['do'] ?? 'doJob';//任务名
                $infoData = $data['data'] ?? [];//执行数据
                $errorCount = $data['errorCount'] ?? 0;//最大错误次数
                $log = $data['log'] ?? null;
                if (method_exists($this, $action)) {
                    if ($this->{$action}(...$infoData)) {
                        //删除任务
                        $job->delete();
                        //记录日志
                        $this->info($log);
                    } else {
                        if ($job->attempts() >= $errorCount && $errorCount) {
                            //删除任务
                            $job->delete();
                            //记录日志
                            $this->info($log);
                        } else {
                            //从新放入队列
                            $job->release();
                        }
                    }
                } else {
                    $job->delete();
                }
            } catch (\Throwable $e) {
                $job->delete();
                Log::error('执行消息队列发成错误,错误原因:' . $e->getMessage());
            }
        }
    
        /**
         * 打印出成功提示
         * @param $log
         * @return bool
         */
        protected function info($log)
        {
            try {
                if (is_callable($log)) {
                    print_r($log() . "\r\n");
                } else if (is_string($log) || is_array($log)) {
                    print_r($log . "\r\n");
                }
            } catch (\Throwable $e) {
                print_r($e->getMessage());
            }
        }
    
        /**
         * 任务失败执行方法
         * @param $data
         * @param $e
         */
        public function failed($data, $e)
        {
    
        }
        //可把面的几个方法写成另外一个类里面继承给当前类
    	
    	//doJob的参数由放入任务方法中的data决定
    	public function doJob()
    	{
    		//执行逻辑
    		//成功返回true,失败返回fasle,会再次加入队列。执行到最大错误后自动删除
    		return true;
    	}
    }
    

    5.启动消息队列
    windows用户可在项目根目录开启命令行输入命令

    php think queue:listen --queue CRMEB
    

    进行启动消息队列
    Linux需要守护进程才可以,推荐使用Supervisor命令都是一样的

    启动报错,按照提示解禁对应函数就行了

    启动后就行看到队列加入和消费的日志

    展开全文
  • TP6如何配置多应用?

    万次阅读 2021-05-31 17:46:14
    composer create-project topthink/think tp 二、进入到TP的app目录下将所有文件删除 三、切换到tp目录下 命令行新建admin应用和api应用 php think make:controller admin@index 四、访问去掉index.php 五、开启调试...
  • tp6渲染模板

    千次阅读 2020-04-01 15:09:49
    查看手册: 新版框架默认只能支持PHP原生模板,如果需要使用thinkTemplate模板引擎,需要安装think-view扩展(该扩展会自动安装think-... composer require topthink/think-view 安装成功之后可以正常访问 ...
  • 安装tp6 并使用多应用模式

    千次阅读 2020-04-01 14:46:45
    配置多应用模式 TP6默认的是单应用模式,需要自己开启多应用模式 一、当前目录结构: 二、安装多应用模式扩展 think-multi-app 注意此处获取位置不能再获取tp6目录的位置执行,应进入项目目录,我前面项目目录在tp...
  • composer 进行tp6的安装

    千次阅读 2020-06-05 15:02:38
    2、tp6下载安装 1)cd到WWW根目录下 2)修改镜像源:(这个我用的时候比较好用,其它的经常出现报错或者很慢) composer config -g repo.packagist composer https://packagist.phpcomposer.com 3...
  • tp6 中的save()使用说明

    千次阅读 2020-09-23 14:43:16
    记录:tp6 中的save()的使用方法 新增数据: 1,tp6.0 中的save()方法自动过滤掉非数据表所需字段,示例1: $ruler = new RulerModel(); $result = $ruler->save($_POST); if(false === $result) { return ...
  • tp5,tp6的异同之处

    千次阅读 2020-09-27 11:15:30
    tp5,tp6的异同之处 对比 Tp5 Tp6 目录结构 框架在根目录/thinkphp /vendor/topthink 安装方式 都可以 只能通过composer安装 类自动加载方式 composer+自己的 composer 严格模式 ...
  • tp6 使用workerman

    千次阅读 2020-12-14 11:52:32
    第一步,安装workerman composer require topthink/think-worker 安装之后查看config文件夹内有没有worker_server.php,如果没有自行创建。 Title
  • 一、找到在tp6根目录找到config/log.php 文件 二、修改成如下配置 // +---------------------------------------------------------------------- // | 日志设置 // +---------------------------------------------...
  • TP6 消息队列

    千次阅读 2020-10-31 12:06:41
    一. composer安装 think-queue composer require topthink/think-queue 二. 配置 config/queue.php <?php return [ 'default' => 'sync', 'connections' => [ 'sync' =>... 'databa.
  • tp6配置多应用模式

    千次阅读 2020-06-05 15:12:51
    1、使用composer ,cd到需要配置的项目文件夹下 2、切换数据源 ... 3、执行下载命令 composer require topthink/think-multi-app ...4、删除掉app下的全部文件 ...5、新建index和admin文件夹...6、修改config配置文件app..
  • TP6手册理解之架构·服务

    万次阅读 2021-08-22 22:33:39
    官方定义:系统服务的概念是指在执行框架的某些组件或者功能的时候需要依赖的一些基础服务,服务类通常可以继承系统的think\... } } 5、浏览器输出结果 参考资料 TP6手册之服务 appleคิดถึง的博客’TP6 服务
  • TP6中GatewayWorker的用法

    千次阅读 2020-08-14 17:23:25
    tp开发手册:https://www.kancloud.cn/manual/thinkphp6_0/1147857 workman与tp框架结合参考:http://doc2.workerman.net/work-with-other-frameworks.html 开发手册只介绍了Workman的使用方法,没有介绍Gateway...
  • TP6 开启 Trace debug模式

    千次阅读 2020-01-09 18:09:23
    复制粘贴到原位置 并将文件名改成 .env 即可
  • TP6框架上传图片

    千次阅读 2020-04-01 09:27:22
    TP6框架上传图片仅作为Shane个人笔记 仅作为Shane个人笔记 以下代码中出现的show方法 均为Shane写的用来返回 统一数据的接口方法 接收文件 /** * 接收文件 */ $file = request() -> file('file'); 接收到...
  • tp6 自定义验证器

    千次阅读 2020-04-26 16:27:13
    tp5.1 tp6自定义unique验证 ###新增一个继承与Think/Validate 的方法: // A code block <?php declare (strict_types=1); namespace validate; use think\facade\Db; use think\helper\Str; use think\...
  • laravel与tp5、tp6之间的差异

    千次阅读 2020-06-08 16:37:51
    首先tp5是由tp3.2升级而来,但是tp5相对于tp3.2有较大的改变,几乎是颠覆性的,这里不讲tp3.2,主要说一下tp5和tp6。 目录结构的异同 tp5核心框架是项目根目录thinkphp下 , tp6是vendor的topthink 安装方式不同,tp6...
  • tp6引入静态资源

    千次阅读 2020-12-21 22:46:46
    tp6引入css,js等静态资源 将css,js等静态资源添加到public/static目录下, 在config/view.php文件中添加代码 //静态资源 ‘tpl_replace_string’ => [ ‘CSS’ => ‘static/index/css’, ‘JS’ => ...
  • tp6 事务的使用

    万次阅读 2020-10-15 15:01:36
    事务使用的场合,如单连表,确保数据的真实性,要么...tp6使用语法: function test_aaabb() { $id = input('id'); $te = input('te'); $test = input('test'); Db::startTrans();//开启事务 if ($id == 0) {
  • TP6使用redis

    千次阅读 2020-05-22 13:52:10
    今天开发项目,使用redis 发现报错: 不支持:redis 执行php -m发现是redis扩展没安装 1.安装redis sudo git clone ...重启php-fpm echo phpinfo()查看 8.tp6里使用redis
  • tp6封装api接口

    千次阅读 2020-10-22 18:49:03
    tp6封装api接口
  • tp6验证规则

    千次阅读 2020-06-05 12:02:17
    require为tp6内置验证规则, in:同样为tp6内置验证规则, 可看tp内置验证规则说明。 require,验证传输过来的type字段值是否为空,为空则执行'type.require' => '类型不能为空'语句,输出给前端。 .
  • TP6多应用路由配置

    千次阅读 2020-07-03 13:25:50
    说到tp6最近自己新写了一个博客,然后用到的就是tp6框架,然后发现与之上一版本tp5 有很多不同,比如路由注册,tp6默认单应用不会有什么问题,但是多应用的时候很多人就懵逼了。下面我直接贴给大家tp6多应用路由怎么...
  • TP6处理跨域

    千次阅读 2020-05-21 17:38:25
    前后端分离开发,域名不一样,涉及到跨域问题 开启中间件即可解决跨域问题 找到app\middleware.php,添加一行下面的代码 \think\middleware\AllowCrossDomain::class,

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 238,970
精华内容 95,588
关键字:

tp6