使用的是tp6 版本
# 通过composer安装,目录名thinkphp
# 我在 /Users/xieruixiang/php 目录下执行
composer create-project topthink/think thinkphp
# 得到 /Users/xieruixiang/php/thinkphp
# 这里我使用nginx + php-fpm
# 省略index.php,配置nginx
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=/$1 last;
}
# 设置完后 localhost/index.php/home/look url就等价于
# localhost/home/look
# 不介绍单应用了,一般一个项目不会只有一个应用,其次多应用兼容单应用
# 通过 composer require topthink/think-multi-app 安装多应用组件
# 其原理通过增加一个中间件来使路由指向正确的位置
# 安装后的app下的每一个目录都可以作为应用
# 每个应用下可以有独立的 controller,model,view,route,config 等目录
composer require topthink/think-multi-app
# 默认路由
# 要带上应用模块
# /应用名/控制器名/方法名
# 以 app/admin/controller/Home.php 控制器为例 其中有look方法
# 如果要访该方法,通过
localhost/admin/home/look
# 如果控制器方法不是在controller目录下,而是在controller的目录下
# 则需要通过 /应用名/子目录.控制器名/方法名进行访问
# 以 app/admin/controller/base/Home.php 控制器为例 其中有look方法
http://localhost/admin/base.home/look
# 指定路由
# 写在route目录下
# 以admin应用为例 app/admin/route/web.php
# web.php 可以改成其他名称,反正tp会加载route下的所有php文件
# 使用 think\facade\Route 门面
# Route::"method"("url","controller/action")
# method 限制其访问方法
# url 路由名 访问时需要带上应用名 /应用名/url
# controller控制器在当前应用中的位置
# action 即controller的方法
use think\facade\Route;
Route::get('home', 'base.home/look');
# 可以用过 http://localhost/admin/home 访问
# 其等价于 http://localhost/admin/base.home/look
# 资源路由
# Route::resoure("url","controller")
# url 路由名 访问时需要带上应用名 /应用名/url
# controller控制器在当前应用中的位置
# 这条路由会创建7条符合RESTful api的路由
Route::get('home', 'base.home');
# 等价创建
Route::get('home', 'base.home/index');
Route::get('home/create', 'base.home/create');
Route::post('home', 'base.home/save');
Route::get('home/:id', 'base.home/read');
Route::get('home/:id/edit', 'base.home/edit');
Route::put('home/:id', 'base.home/update');
Route::delete('home/:id', 'base.home/delete');
# 使用think-captcha 扩展
composer require topthink/think-captcha
# 可以通过config/captcha.php配置验证码的参数
return [
//验证码位数
'length' => 5,
// 验证码字符集合
'codeSet' => '2345678abcdefhijkmnpqrstuvwxyzABCDEFGHJKLMNPQRTUVWXY',
// 验证码过期时间
'expire' => 1800,
// 是否使用中文验证码
'useZh' => false,
// 是否使用算术验证码
'math' => false,
// 是否使用背景图
'useImgBg' => false,
//验证码字符大小
'fontSize' => 25,
// 是否使用混淆曲线
'useCurve' => true,
//是否添加杂点
'useNoise' => true,
// 验证码字体 不设置则随机
'fontttf' => '',
//背景颜色
'bg' => [243, 251, 254],
// 验证码图片高度
'imageH' => 100,
// 验证码图片宽度
'imageW' => 500,
// 添加额外的验证码设置
'verify' => [
'length'=>4,
],
];
# 在模版中简单使用,其加载的是config/captcha.php 配置
<div>{:captcha_img()}</div>
# 要想灵活使用可以自己定义方法
# 方法中通过captcha("config")使用创建验证码方法
# config 为 null 时加载 config/captcha.php
# config 不为null 时加载 config/captcha.php 中的 “config” 属性
captcha(‘verify’)
# 加载的是 config/captcha.php 中的verify属性
# 故验证码只有四个组成
# 验证码的验证需要开启session
# seesion开启依赖于中间件
# 我只在admin应用中使用session
# app/admin/middleware.php 开启session
return [
\think\middleware\SessionInit::class
];
# 第一中验证验证码是否正确
# captcha_check($captcha)
# $captcha验证码的值
# 正确返回true,错误返回false
captcha_check("abc12")
第二种通过验证器验证
namespace app\admin\controller\base;
use app\BaseController;
use think\Validate;
class Home extends BaseController
{
public function index()
{
return captcha('verify');
}
public function check()
{
$captcha = input('captcha', "");
$validate = new Validate();
$validate->rule(['captcha' => 'require|captcha'])
->message(['captcha.captcha' => '验证码错误'])
->check(['captcha' => $captcha]);
if ($error = $validate->getError()) {
return $error;
}
return "验证码正确";
}
}