前言
使用的是tp6 版本
安装
# 通过composer安装,目录名thinkphp# 我在 /Users/xieruixiang/php 目录下执行composer create-project topthink/think thinkphp# 得到 /Users/xieruixiang/php/thinkphp
省略index.php
# 这里我使用nginx + php-fpm# 省略index.php,配置nginxif (!-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 开启sessionreturn [\think\middleware\SessionInit::class];# 第一中验证验证码是否正确# captcha_check($captcha) # $captcha验证码的值# 正确返回true,错误返回falsecaptcha_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 "验证码正确";}}