开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第五天
1、下载tp6
通过composer安装tp6,thinkphp官网已经不再支持直接下载 或者直接通过地址下载
1、直接下载
composer create-project topthink/think tp6
打开命令行窗口(windows用户)或控制台(Linux、Mac 用户)并执行如下命令:
2、阿里云:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
3、华为云:
composer config -g repo.packagist composer https://repo.huaweicloud.com/repository/php/
在下载好的tp6目录通过cmd命令窗口输入(如果绑定了域名,直接用域名方面,不用走下面的命令)
php think run
在浏览器中输入127.0.0.1:8000,访问到如下页面就安装成功了
2、打开错误调试
'show_error_msg' => false,
找到下面根目录下的.example.env文件,重命名此文件,把.example删掉
这个是默认的一些设置 tp6里面自带了一些全局的参数用这个文件
查看里面的代码,会发现,它打开了app_debug调试
3、隐藏入口文件
如果什么都不填,默认访问的就是index控制器,在config/app.php文件中有这样的定义,你也可以修改默认的控制器
还有,不管访问任何控制器,如果没有填方法,它都会访问控制器中的index方法,如果index方法不存在,则提示错误信息-方法不存在。 tp6帮我们做了隐藏入口文件的操作, 我们在开发时,地址会带上 index.php 这就需要我们自己去隐藏入口文件index.php
隐藏入口文件主要是为了简化地址的长度,一般TP的域名都是指向在public 所以我们在这个文件夹下面添加伪静态文件就行
Apache伪静态
RewriteEngine on
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward it to index.php
RewriteRule . index.php
Nginx伪静态
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=/$1 last;
}
4、解决跨域问题
PHP 简单就是加一个头部跨域的处理
<?php
// 允许所有域名访问
header(“Access-Control-Allow-Origin:*”);
// 响应类型
header(‘Access-Control-Allow-Methods:POST’);
// 响应头设置
header(‘Access-Control-Allow-Headers:x-requested-with, content-type’);
//$callback = isset($_REQUEST[‘callback’]) ? trim($_REQUEST[‘callback’]) : ‘’; //jsonp回调参数,必需
function getKey($key,$default=””){
return trim(isset($_REQUEST[$key])?$_REQUEST[$key]:$default);
}
$id = getKey(“id”);
$conn = mysqli_connect(“localhost”,”root”,””,”test”) or die(“连接失败”);
$conn->query(“set names utf8”);
$sql = “select * from data where “.$id.” is not null”;
$result = $conn->query($sql);
$arr = [];
while($row=$result->fetch_assoc()){
array_push($arr,json_encode($row));
}
$json = json_encode($arr); //json 数据
print_r($json);
备注:一般我们只有在全局引用的地方加上 下面的代码就可以了
header(“Access-Control-Allow-Origin:*”);
5、token问题
以前token一般就是自己去组合用md5走一下,这种还得自己去组合不同的token值
1、jwt
JWT文档 https://github.com/QThans/jwt-auth
按照jwt插件 可以直接生成唯一token 避免出现还得自己去想不同组合的token,个人感觉方便了很多示例
use thans\jwt\facade\JWTAuth;
$token = JWTAuth::builder(['uid' => 1]);//参数为用户认证的信息,请自行添加
JWTAuth::auth();//token验证
JWTAuth::refresh();//刷新token,会将旧token加入黑名单
$tokenStr = JWTAuth::token()->get(); //可以获取请求中的完整token字符串
$payload = JWTAuth::auth(); //可验证token, 并获取token中的payload部分
$uid = $payload['uid']->getValue(); //可以继而获取payload里自定义的字段,比如uid
2、wenhainan
文档 上面的jwt如果算是外部的插件的外,那么这个就是tp内部生成token的插件也是很方便
设置
<?php
/**
* auther by wenhainan
* email whndeweilai@163.com
* QQ 610176732
* nickname 阿修罗
*/
// +----------------------------------------------------------------------
// | Token设置 这个不能删除
// +----------------------------------------------------------------------
return [
// 驱动方式 Mysql redis
'type' => 'redis',
// 缓存前缀 这个可以自定义
'key' => '5LiH5LqL5aaC5oSP',
// 加密方式 如果你不懂这个不要修改,保持默认即可
'hashalgo' => 'ripemd160',
//启用redis token必填 用于连接redis
'redis'=>[
'host' => '127.0.0.1',
'port' => 6379,
'password' => '',
'select' => 0,
'timeout' => 0,
'persistent' => false,
'userprefix' => 'up:',
'tokenprefix' => 'tp:',
],
// 启用mysql token必填 用于连接mysql
'mysql'=>[
//token存储表
'table' => 'user_token',
//如果是用系统的数据库,默认不用填,保持注释状态即可
//'connection' => [],
]
];
使用
use think\wenhainan\Token;
use think\wenhainan\tool\Random;
//例如 生成一个随机token字符串 这个是自带的一个工具
$token = Random::build('alpha',50);
//设置信息
$uid = 15; //用户uid
$expire_time = 60*30; //过期时间
Token::set($token,$uid,$expire_time);
//获取信息 过期了则为空,没过期可以获取到信息
$info = Token::get($token);
6、备注
用thinkphp写接口其实都差不多了多少 只是多了一个框架会更加便捷一点而已