# 一、安装thinkphp及配置项目
我们以thinkphp6为例给大家进行讲解。
# 1、配置php的环境变量
①、可以在
UPUPWANK快捷图标->右键属性->快捷方式->打开文件所在的位置;
②Modules->PHPX->PHP72->复制整个路径:D:\UPUPW_ANK_W64\Modules\PHPX\PHP72;
③我的电脑->属性->高级系统设置(更改设置)->高级->环境变量->系统变量;
④ 在系统变量中,找到Path->编辑(双击也可以)->新建->粘贴路径:D:\UPUPW_ANK_W64\Modules\PHPX\PHP72->确定;测试环境变量是否正常:
①win + R(开始->运行) ->cmd->php -v->回车->查看php版本号(若有打印结果即配置成功);
# 2、安装composer
具体安装参考:https://www.runoob.com/w3cnote/composer-install-and-usage.html (opens new window)
- 下载
Composer-Setup.exe然后一步一步安装即可。
# 3、创建项目
# ThinkPHP6.0(tp框架)文档说明
https://www.kancloud.cn/manual/thinkphp6_0/1037481 (opens new window)
- 国外的网站连接速度很慢,因此安装的时间可能会比较长,我们建议使用国内镜像,类似于我们node环境的npm切换到淘宝镜像一个意思:
打开命令行窗口(windows用户)或控制台(Linux、Mac 用户)并执行如下命令:
//阿里云: composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ //华为云: composer config -g repo.packagist composer https://repo.huaweicloud.com/repository/php/# 2. 创建一个站点
打开本地环境
UPUPWANK->全局首页->+ 号-> 创建一个站点
网站名称:thinkphp.shop
网站路径: 默认
网站端口: 80
主要域名:thinkphp.shop
额外域名:
PHP:7.2X--提交保存
然后来到功能扩展->Hosts重定向-> 域名;thinkphp.shop点击+号添加->提交保存;# 3. 安装项目
来到我们的
UPUPWANK->全局首页->点击UPUPWANK上面的笔(编辑)-> 找到刚刚创建的站点 -> 打开站点目录(中间的文件夹图标) ->当前文件夹路径选中输入cmd打开命令行工具(命令行工具也会定位到当前的网站路径)如果你是第一次安装的话,在命令行下面,切换到你的WEB根目录下面并执行下面的命令:
composer create-project topthink/think tp# 4. 切换到tp目录下
cd tp //切换到tp目录下:D:\UPUPW_ANK_W64\WebRoot\Vhosts\thinkphp.shop\tp>运行命令进行更新:
composer update topthink/framework# 5. 修改项目根目录到 public 文件夹下
- 默认创建项目的根目录是:
D:\UPUPW_ANK_W64\WebRoot\Vhosts\thinkphp.shop,我们的项目代码放在了tp目录下,运行目录是tp/public目录,因此,先复制路径:D:\UPUPW_ANK_W64\WebRoot\Vhosts\thinkphp.shop\tp\public- 来到我们的
UPUPWANK->编辑(笔的图标)-> 找到项目(点击项目的笔图标)-> 修改网站路径为D:\UPUPW_ANK_W64\WebRoot\Vhosts\thinkphp.shop\tp\public->提交保存(运行信息里面显示重载成功,可以看一下网站是否正常访问)
# 4、运行及配置项目
将项目tp文件夹拖进我们的VScode编辑器
# 1. 修改
.example.env文件名为.env
- 来到路由
route/app.php(类似eggjs项目的app/router.js), 分析我们首页访问的内容是哪里的?学过我们前面eggjs课程的同学应该很容易想到,访问的内容是
app/controller/index.php这个里面的方法index, 你可以改一下这个方法返回的内容进行测试 (thinkphp和我们的eggjs框架有很多相似之处,只是他们编写的语言不同)
验证路径里面的hello方法:http://thinkphp.shop/hello/迪丽热巴但发现访问失败,因此这里又跟egg.js有些区别
正确访问路径是:http://thinkphp.shop/index.php/hello/迪丽热巴,需要加上index.php
也就是我们需要加上一个入口文件:index.php,它的位置在/public/index.php# 3. 简化入口文件:
index.php来到我们的
UPUPWANK->找到当前项目(编辑,笔的符号)->伪静态配置
说明:我们的UPUPWANK虽然是N模式,但是运行的是Apache的服务,因此,我们需要配置Apache的伪静态规则,来简化我们的入口文件,<IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L] </IfModule>
# 5、统一API接口返回格式
我们在eggjs项目统一了接口返回格式,因此,我们在thinkphp中也统一一下
示例:app/controller/index.php比如:希望接口返回以下数据:
{ "msg": "ok", "data": { "name": "迪丽热巴", "age": 18 } }可在vscode中安装扩展:
PHP Intelephense有语法提示,方便开发public function index() { // return '迪丽热巴'; //使用关联数组形式 return json([ 'msg' => 'ok', 'data' => [ 'name' => '迪丽热巴', 'age' => 18 ] ], 200); /* $data = (object) [ 'msg' => 'ok', 'data' => (object) [ 'name' => '迪丽热巴', 'age' => 18 ] ]; return json($data); */ }# 统一接口返回(类似eggjs中的
app/extend/context.js中的apiSuccess方法)在thinkphp中写在
app/common.php//api接口形式成功提示,命名随便showSuccess,apiSuccess都可以 function apiSuccess($data = '',$msg='ok',$code=200){ return json([ 'msg' => $msg, 'data' => $data, ],$code); } //api接口形式失败提示 ,命名随便showError,apiFail都可以 function apiFail($msg='fail',$code=400){ return json([ 'msg' => $msg, ],$code); }示例:
app/controller/index.phppublic function index() { // return '迪丽热巴'; /* return apiSuccess([ 'name' => '迪丽热巴', 'age' => 18 ]); */ /* return apiFail('数据不存在'); */ }
# 6、异常处理
# ① 如何抛出一个异常
在
app/controller/index.php中,我们抛出一个异常,如下:public function index() { // 比如用户被限制登录,此时后面的程序不能在执行可以抛出一个异常 // tp框架提供了一个助手函数 abort() abort(20000, '你已被限制登录'); // return '迪丽热巴'; return apiSuccess([ "name" => "迪丽热巴", "age" => 18 ]); // return apiFail("请求失败"); }
# ② 异常提示不友好,在app/ExceptionHandle.php中对 render函数进行扩展,来统一异常,如下:
public function render($request, Throwable $e): Response { // 调试模式 if (env('APP_DEBUG')) { // 其他错误交给系统处理 return parent::render($request, $e); } // 检查是否有 getHeaders 方法 $headers = method_exists($e, 'getHeaders') ? $e->getHeaders() : []; $statusCode = method_exists($e, 'getStatusCode') ? $e->getStatusCode() : 400; return json([ 'msg' => $e->getMessage(), 'errorCode' => $statusCode ], isset($headers['statusCode']) ? $headers['statusCode'] : $statusCode); }将
.env文件中的APP_DEBUG改为false,访问首页,发现异常提示友好了。
# ③ 也可以在 app/common.php 封装一个ApiException方法:
// 抛出异常 function ApiException($msg = '请求错误',$errorCode = 20000,$statusCode = 400) { abort($errorCode, $msg,[ 'statusCode' => $statusCode ]); }在
app/controller/index.php中 调用ApiException方法public function index() { // 比如用户被限制登录,此时后面的程序不能在执行可以抛出一个异常 // tp框架提供了一个助手函数 abort() // abort(20000, '你已被限制登录'); ApiException('你已被限制登录'); // return '迪丽热巴'; return apiSuccess([ "name" => "迪丽热巴", "age" => 18 ]); // return apiFail("请求失败"); }
# 二、创建及配置数据库
我们在前面的课程做项目准备的时候,已经告诉大家如何将数据库导入mysql了,大家打开
phpMyAdmin,数据库myegg就是我们项目的数据库。
使用thinkphp的同学,来配置一下数据库连接:
打开.env文件:[DATABASE] TYPE = mysql HOSTNAME = 127.0.0.1 DATABASE = myegg USERNAME = root PASSWORD = root HOSTPORT = 3306 CHARSET = utf8 DEBUG = true
# 三、管理员板块
# 1. 管理员表
其实数据库中有一个管理员表,这里为了方便两个技术栈同学学习,我们统一再创建一个管理员表
shop_manager
具体shop_manager表设计,点击查看
# 2. 创建管理员
具体查看,点击查看
# 3. 修改管理员
具体查看,点击查看
# 4. 删除管理员
具体查看,点击查看
# 5. 管理员角色表
正常来说,应该叫
角色表:role,这里为了方便大家更容易理解这个表,因此称它为管理员角色表。事实上,这张表不仅可以包含管理员的各种角色,还可以设定用户的角色。
说明:
正常来说,我们的管理员表:shop_manager有一个字段叫:role_id,它这个字段实际上是角色表:role的id值,而到目前为止,我们数据库还不存在角色表:role,因此我们还需要创建一张角色表:role。
重点说明:
正常来说,我们管理员表里面存在role_id这个字段,对应的是角色表role的id值,那么,首先应该创建角色表角色表:role,然后再创建管理员表shop_manager,但是由于本套课程涉及到两套框架thinkphp/egg.js,为了方便讲解及融合两天框架,因此我们先以管理员表为例,讲解了管理员表的新增、修改、删除,方便大家先了解thinkphp框架,接下来,由于需要讲到管理员列表,这里涉及到多表(角色表、管理员表)的模型关联、不管是thinkphp/egg.js都存在模型关联,因此再讲管理员列表功能之前,我们需要创建一下角色表:role。
具体角色表:role设计,点击查看
# 6. [新增]分类表category的角色表 rolecategory
重要说明:
本节课讲的分类表
category的角色表rolecategory,本不属于管理员板块的内容,主要是受我们上一节的影响,因此临时插入了这节课,因为我们分类表category的角色表rolecategory,它的字段跟我们上节课讲的管理员角色表role,字段是一样的,这样大家理解起来非常容易,只不过这张表rolecategory是充当的分类的角色。
本节课是一节综合课,两种技术栈thinkphp和我们egg.js同学都学习操作一下。
这张分类表category的角色表rolecategory,主要是将来用于区别后台系统里面,不同的分类系统用的,比如,我们可以有一个大的综合性后台,这个后台可以管理:普通企业网站的后台、商城后台、直播后台等等,而这些后台分类,就可以用我们这张表rolecategory,目前大家先把这张表创建起来,后面我们学到了在详细讲这张表。
具体分类表角色表:rolecategory设计,点击查看
# 7. 管理员列表
具体查看,点击查看
# 四、管理员登录和退出
具体查看,点击查看
# 五、管理员角色管理和状态设置
具体查看,点击查看
# 六、权限管理板块
# 七、管理员板块所有接口
具体查看,点击查看
# 八、图片管理板块
具体查看,图片管理板块
特别说明:
# 九、商品管理板块
具体查看,商品管理板块