一.基础
官网下载
composer安装和更新
安装
更新
git下载和更新
下载安装
先克隆应用项目仓库
克隆核心框架仓库
更新框架.进入thinkphp目录执行
目录结构
application目录
index目录
config.php
common.php
controller目录
Index.php
model模型目录
view视图目录
创建index目录对应index控制器类
在index下编辑html模版文件
command.php
common.php
config.php
tags.php
database.php
route.php
extend目录
public目录
runtime目录
vendor目录
thinkphp目录
lang目录
library目录
think目录
traits目录
tpl目录
base.php
convention.php
helper.php
start.php
build.php
其他
读取数据
use think\Db;类
Db::name('data')->find();
二.URL和路由
url访问
隐藏index.php入口文件
定义路由(在application/route.php)配置
'hello/[:name]$'=>'index/index/hello'
'hello'=>function($name){return $name}
先定义好路由.然后可以用Url类
Url::build('blog/read'.'name=mabt')
使用助手函数url更简单
模版中生成url
三.请求和响应
请求对象
传统方式调用
在控制器中先use think\Request;
继承官方Controller的话可以直接用
自动注入请求对象
先use think\request;
再定义注入
在函数a内$request->url()可以获取当前url
更简单使用助手函数request()
请求信息
获取请求的参数
助手函数input('name')
$request->get('name')等价input('get.name')
request对象获取模块控制器/操作方法
获取当前模块
获取当前控制器
获取当前操作方法
响应对象
根据配置文件自动输出
手动输出
页面跳转
如果引入官方的Controller的话就不用引入jump类了
$this->success('欢迎使用'.'helo')
$this->error('错误提示'.'guest')
页面重定向
助手函数redirect('baidu.com')
四.数据库
数据库配置
数据库查询
数据库原生查询sql
Db::query('select * from data')
Db::execute('insert into data XXX')
参数绑定使之安全
数据库链式查询
Db::name('data')->where('id'.12)->select()
Db::name('data')->where('id'.12)->update(['name']=>'mabt')
Db::name('data')->where('id'.12)->delete()
Db::name('data')->insert(['id'=>10.'name'=>'mabt'])
还有find/order/field/limit/count等链式方法
Db::transaction(闭包函数)
模型的对象化查询
数据库注意事项
Db::name()
Db::name('data')
Db::table('think_data')
助手函数db()
use \think\Db类
五.查询语言
查询表达式
db('data')->where('id'.'>='.1)
exp表达式可以写更复杂的
where('id&并|或userid' '>' 0)
db('data')->where(id 1)->value('name')
db('data')->where(status 1)->column('name')
还有count/max/min/avg/sum等查询方法
字符串查询where('id=10')
时间查询wheretime('time' '>' '2016-02-01')
chunk()分块查询
六.模型和关联
模型和Db类的区别
创建模型并在控制器引用
创建模型class User extends Model
在index控制器引入user模型
在操作方法里面实例化user模型
保存数据
先$user->name='mabt'
再添加数据库(添加新数据)
更新数据一定要链式isUpdate()
第二种方法添加数据
先定义数组$user['name']='mabt'
$re=UserModel::create($user)
批量新增数据
查询数据(只找一条数据)
静态方法getBy字段名()获取一条结果
$a=UserModel::get(['name'=>'mabt'])
查找多条数据
UserModel::all(['status'=>1])
UserModel::where('id'.'<'.3)->select()
更新数据
$user->name='mateng'一般实例化之后的save都是默认update操作
删除数据
删除操作
第二种方法更简单
读取器
存在的字段值进行转换
不存在的字段名进行转换调用
修改器
字段值类型转换
将字段的时间戳转换成YMD时间
自动时间戳
auto_timestamp=>true
自动完成$insert
protected $insert=['status'=>1]
除了$insert还有$auto/$update自动完成
查询范围
page92
全局查询范围
定义base全局查询范围的函数
输入和验证
先实例化模型
$user->allowField(true)->save(input('post.'))
$this->fetch()渲染模版输出
表单验证
定义验证器类模型链式验证
定义验证器类在控制器验证
Validate::is($b.'date')
关联模型
一对一关联
在模型user中定义一对一关联
一对一关联的写入
一对一关联查询
一对一关联更新
先实例化对象user
添加关联的数据
关联进行更新保存
一对一关联删除
先实例化对象user
先删除user对象
关联进行删除操作
一对多关联
在模型user中定义一对多关联
一对多关联的新增
一对多关联的查询
一对多根据字段查询
查询写过三本书以上的用户
一对多关联的更新
$book->title="道德经"
$book->save()
一对多关联的删除
多对多关联
多对多关联一定会有一个中间表
模型输出
输出数组(像Db类操作)
隐藏属性
只显示指定的属性
追加读取器的属性()
输出json格式的数据
七.视图和模版
模版输出
先变量赋值
再输出渲染模板(view/控制器/方法.html)
模版中二维数组循环volist
分页输出
先实例化获取三条一页
然后赋值变量输出模版
在模版总初始化分页数据
公共模版文件
在其他模版文件中导入模版文件
导入的文件也可以定义变量[title]
$this->fetch("list")
模版布局
{include file='index' /}{__CONTENT__}
定义其他文件模版
上面是手动设置.也可以全局自动设置
全局自动设置某个页面可以临时关闭布局
或者再模版文件开头加上{__NOLAYOUT__}
输出替换
$this->display($content)
助手函数view()
八.调试和日志
页面trace
sql栏目查看性能方便优化
调试栏目可以自定义输出变量或者其他
配置到console中显示
异常页面
执行跳转错误页面的话看提示信息
红色行就是错误位置
断点调试
dump()
halt()
tarce($a)
日志分析
日志分类级别
log
error
notice
info
debug
sql
远程调试
九.API开发
api版本
return json(['daoxia'].404)
abort(404)
异常处理page158
RESTFul
添加路由的资源请求
看着是注册了blogs其实内部注册了7个路由规则
RESTFul请求测试
postman是chrome插件
RESTFul请求伪装
API远程调试
十.命令行工具
首先确保php有环境变量可以cmd
在think目录执行php think
生成模块
现在application目录下新建build.php
执行php think build
生成控制器文件
生成模型文件
默认生成资源控制器自带方法
生成类库映射文件
生成类库映射文件
生成路由缓存文件
生成数据表字段缓存文件
指定扩展page177
命令行调试
十一.扩展
函数扩展
某个模块的公共函数
类库扩展
直接将文件放入extend目录下面
驱动扩展
Composer扩展
十二.杂项
Session会话
Session初始化
服务端赋值
读取某个值
读取Session
Session操作
助手函数
模版输出
Session驱动
Session示例
Cookie
自动初始化cookie
读取cookie
模版输出
cookie操作
设定cookie
判断是否存在cookie
获取cookie
删除cookie
助手函数
验证码
安装类库(在app目录下执行)
验证码显示
index方法默认显示模版页
验证码检测
在captcha类下创建自己的check检测
实例化Captcha类调用官方check进行检测
先实例化验证码类
检测验证码返回布尔值
助手函数captcha_check()函数检测
使用控制器的validate方法进行验证
注意check函数要注入check(Request $request)
然后用$request提取参数对code进行必填和验证码验证
验证码配置
改变字体大小长度
中文验证码
添加背景图
添加验证码资源(背景图字体等)
同时使用多个验证码
显示就是在模版中定义不通id的验证码
验证在控制器传入第二参数id
文件上传
控制器定义
index方法默认html上传页面
up方法进行上传文件提交处理
先定义up方法进行up(Request $request)
检测是否是空没有上传成功
上传文件验证
移动到框架/public/upload目录下
另外一种方法可以用$this->validate(好多参数啊)
上传文件验证
文件保存规则page222
多文件上传
在模版中name="img[]"设定为一个数组
后端控制器中foreach($files as $file)进行遍历
后续文件操作page224
图像处理
安装扩展
示例
单元测试page239