1、常见PHP框架
Laravel:国外的,非常有名,功能齐全,学习难度大,可以写出间接优雅的代码
ThinkPHP:国内的PHP框架,具有简单,快速,兼容等优点,之前手工打造玩具框架(TP3.2)
Yaf:鸟哥开发的,是用C语言开发的,效率极高
Yii:最有效率的PHP框架之一,百度的很多业务模块都是使用这个框架
总结:没有最好的框架,只有最适合的框架
2、ThinkPHP(5.0)
官网:http://www.thinkphp.cn/
手册:快速入门,完全开发
下载:官网、Composer、Git
目录结构:
public:公共的静态文件目录
index.php    唯一的入口文件
application:应用程序目录
model、view、controller
运行环境:
1、PHP >= 5.4.0(完美支持PHP7)
2、扩展库:PDO、MBString、CURL
配置虚拟主机:
1、右键点击WAMP,选择Wamp Setting
2、勾选VirtualHost sub-menu
3、访问localhost,点击Add a virtual host,按照提示添加
4、重启WAMP服务
3、基本使用
1、访问指定模块指定控制器的指定方法
http://域名/index.php?s=模块/控制器/方法
2、不传参数,默认访问index模块,index控制器,index方法
3、因为有.htaccess文件的存在,可以省略[index.php?s=],简写为
http://域名/模块/控制器/方法
4、访问带参数的函数 test($a,$b)
http://域名//模块/控制器/方法/a/2/b/4
若配置:url_param_type = 1,则可简写(顺序解析)为
http://域名//模块/控制器/方法/2/4
5、添加一个控制器
在controller目录创建一个文件,访问时默认开启了自动转换
当控制器有多个单词组成时,需要通过'_'进行分割
如:UserType控制器,访问时:user_type
若不想让其自动转换,可以设置:url_convert = false
6、添加模块admin
同原有的index模块,需要在application目录创建一个文件夹
注意:命名空间要这样写 app\模块\controller
7、调试模式
app_debug = true 开启调试,在测试时
app_debug = false 关闭调试,在上线时
4、请求(Request)
创建方式:
1、Request::instance()    是单例对象
2、继承自think\Controller类,有一个成员变量request
3、public function req(Request $request)  依赖注入(推荐使用)
4、助手函数:request()
获取URL相关信息:
url/domain/pathinfo
获取模块/控制器/方法
module()
controller()
action()
获取请求相关参数
method()
获取所有请求参数
param()    获取所有
only(['name'])    获取指定名字name的参数
except(['name'])    获取除name之外的参数
参数检测
has('参数名','方法')
input('?get.id');    判断get请求是否有id参数
获取分配参数
get('name','默认值','过滤方法1,方法2')
说明:若想全局过滤,修改配置文件中的default_filter选项
请求伪装:
<form method='post'>
<input type='hidden' name='_method' value='PUT'>
</form>
说明:通过var_method可以指定名称
请求头信息
header() 获取所有头信息(一个数组)
header('user-agent')    获取指定头信息
伪静态:
设置:url_html_suffix = 'html|php|shtml'
作用:为了更好满足SEO
5、数据库(Db)
修改配置:application/database.php
使用Db类:think\Db
原生操作:
查询:Db::query()
执行:Db::execute()
参数绑定:类似于PDO
Db::query('select * from think_data where id=?',['1'])
Db::query('select * from think_data where id=:id',['id'=>'1'])
查询构造器:
table()    指定表名(要写全),要求带前缀
name()    指定表名,不带前缀,推荐使用
insert()
delete()
update()
select()
where()
链式操作:
你能够想到所有操作
事务处理
Db::transaction(function(){/*事务处理操作*/});
Db::startTrans();
try {
//事务处理
Db::commit();
} catch(Exception $e) {
Db::rollback();
}
6、查询语言
select:查询所有符合条件的记录
find:返回一条符合条件的记录
where(字段名,表达式,指)
闭包查询:Db::select(function($query){/*构造查询条件*/});
value('字段'):获取一条记录指定的字段值
column('字段'):获取所有记录指定的字段
chunk(每次处理条数,闭包处理)
1、数据量过大,没办法一次性读取并处理
2、闭包处理中返回false即可结束查询
insertGetId:插入数据并返回自增的ID
getLastInsId:可以单独获取一次最后插入数据的ID
insertAll:插入多条数据
setField:更新某个字段
setInc:增加指定字段
setDec:减少指定字段
delete:可以根据指定的主键删除记录(可以删除多条)
聚合查询:count/max/min/sum/avg
whereTime:专门用于时间查询
子查询:只构造SQL语句,但是不执行,也可以用于SQL调试
1、select(false)
2、fetchSql(true)
3、buildSql()
注意:1和2的方式没有小括号
7、模型和关联
1、创建一个Model类
use think\Model
class User extends Model {}
初始化操作重写:initialize()
2、指定表名
protected $table = '带前缀的表名';
protected $name = '不带前缀的表名';
3、常见操作相关函数
新增:
save
saveAll
create
isUpdate(false)->save()
查询:
get(主键号),获取记录,得到的是对象,可以通过成员变量的访问方式获取字段值
toArray:将对象转换为数组
all:获取所有
getByXxx:xxx为指定的属性
修改:
先get()
再save()
update($data)
删除:
delete
destory(主键)
4、获取器和修改器
getXxxAttr
setXxxAttr
说明:
1、Xxx表示将表中的字段转换大驼峰的书写形式
2、getData('属性')获取原始数据
3、类的内部获取属性使用:getAttr('属性')
5、自动写入时间戳
1、全局配置
auto_timestamp = true
默认的create_time和update_time字段的类型为int
2、Model类内指定字段名
protected $createTime = 'xx';
protected $updateTime = 'xx';
3、内部开启关闭字段写入
整体操作:protected $autoWriteTimestamp = false;
单个控制:protected $createTime和protected $updateTime
6、软删除
1、删除只会修改指定的字段(delete_time)
2、查询是不会显示,需要使用withTrashed()
3、只查看已经软删除的数据onlyTrashed()
7、自动完成
insert和update属性可以指定在插入和更新操作时将默认的指写入或更新
8、模型关联(听不懂没关系,大不了多查几次)
一对一关联:(一个用户拥有一组详细信息)
主表模型
public function 关联表名
{
return $this->hasOne('关联表名','关联外键');
}
附表模型
public function 关联表名
{
return $this->belongsTo('关联表名','关联外键');
}
一对多关联:(一个用户发表多篇文章)
主表模型
public function 关联表名
{
return $this->hasMany('关联表名','关联外键');
}
附表模型
public function 关联表名
{
return $this->belongsTo('关联表名','关联外键');
}
多对多关联
public function 关联表名
{
return $this->belongsToMany('关联表名','中间表');
}
9、模型分层
数据层:负责数据的存取
逻辑层:处理相关的业务逻辑
服务层:负责多个业务逻辑才能完成的功能
\think\Loader::model('User');
\think\Loader::model('User','logic');
\think\Loader::model('User','service');
8、视图
fetch:渲染模板文件
1、默认定位规则:模块/view/控制器(小写+下划线)/方法(小写).html
2、'abc',渲染:模块/view/控制器(小写+下划线)/abc.html
3、admin@hello/world  admin/view/hello/world.html
4、传递一个模板文件的全路径(带后缀.hmtl),路径相对于index.php
5、参数介绍
参数1:模板文件位置
参数2:以数组形式分配变量
参数3:模板文件中的字符串替换
6、全局字符串替换,修改view_replace_str
assign:分配变量
1、可以传递两个参数,分别作为名称和指
2、可以传递一个参数(数组),以键值对形式
9、模板
变量输出:
标量:{$var}
数组:{$data.name}或者{$data['name']}
对象:{$obj->name}或者{$data:name}
系统:已$Think开头的方式访问,无需分配
常量:{$Think.const.APP_PATH}或{$Think.APP_PATH}
配置:{$Think.config.xxx}
请求:{$Request.get.name}
使用函数:
1、使用'|'表示
2、###表示占位,作为函数的第一个参数可以不用写
3、=后跟函数的参数,多个需要用逗号隔开
使用默认值:
格式:{$var|default="默认值"}
说明:分配变量使用分配的,没有分配使用默认值
原样输出:
{literal}
Hello,{$name}!
{/literal}
模板布局:
使用场景:适合于一个网站的页面头尾相同,只有中间内容不同的时候
使用方式:
1、全局配置
'layout_on'    => true,            全局开关
'layout_name'  => 'layout',        模板文件
'layout_item'  => '{__REP__}',    替换内容
若某个文件不要模板布局:{__NOLAYOUT__}
2、单个指定
1、无需开启全局配置
2、需要的模板文件开头添加{layout name="layout" /}
3、动态控制模板布局
开启:$this->view->engine->layout(true);
关闭:$this->view->engine->layout(false);
指定:$this->view->engine->layout(layout/xxx);
模板继承:
基础模板(base.html)中使用{block name="xxx"}{/block}
子模板中:
{extend name="base"}
可以重写基础模板中的block,具体删除、修改
循环输出:{volist}
name:指定分配过来的数据变量名
id:指定遍历操作中的每一个value
key:指定遍历的序号,默认为$i
$key:表示遍历中的键
原生PHP
{php}写php代码{/php}
10、跳转
成功:
函数:$this->success(); 
文件:dispatch_success_tmpl指定
失败:
函数:$this->error();
文件:dispatch_error_tmpl指定
重定向:
函数:$this->redirect()
11、日志记录
\think\Log::record()    手动写入自定义信息,不会立即写入文件,等请求结束自动写入
\think\Log::write()        手动写入自定义信息,立即写入文件
\think\Log::save()        手动写入内存信息,立即写入文件
12、错误及调试
全局开关:app_debug
trace开关:app_trace,会在右下角出现小图标
设置显示模式为console后更加隐蔽,非常适合热修改
404页面定制:
'http_exception_template' => [
// 定义404错误的重定向页面地址
404 => '404.html',
// 还可以定义其它的HTTP status
401 => '401.html',
]
说明:
1、错误页面的位置是相对于入口文件的
2、生效必须在部署模式下
13、验证
独立验证:
使用 \think\Validate类完成,需要制定验证规则及数据
验证器:(自定义一个验证类)
1、有自己的命名空间:app\index\validate
2、需要继承自 think\Validate类
自定义验证规则:
protected function checkNum($value, $rule, $data)
参数说明:1:验证的字段值,2:规则明,3:所有验证数据的数组
助手函数:validate()
14、杂项
session:
设置:Session::set(key, value)
获取:Session::get(key)
删除:Session::delete(key)
取值后删除:Session::pull(key)
清空:Session::clear()
助手函数:
设置:session(key,value)
获取:session(key)
检测:session(?key)
删除:session(key,null)
清空:session(null)
cookie:
用法同session基本一致
分页:think\Paginate
文件上传:
获取上传信息:file()
移动上传文件:move()
获取文件扩展名:getExtension
获取路径名:getSaveName
获取文件名:getFileName
获取错误信息:getError
验证:validate()
指定规则:rule()
验证码:
生成:
<div>{:captcha_img()}</div>
<div><img src="{:captcha_src()}" alt="captcha" /></div>
验证:
$this->validate([])
captcha_check(验证码)
图像处理:
根据功能查找函数
15、路由(通过特定的格式确定访问的资源文件)
路由模式:
普通模式:
url_route_on = false
默认采用pathinfo的方式
混合模式:(默认)
url_route_on = true
url_route_must = false
强制模式:
url_route_on = true
url_route_must = true
路由定义:
Route::rule('xxx', 'index/index/luyou','get');
资源路由:
restful风格:使用同一URL,能够根据请求方法类型完成不同方法的调用
域名路由:
开关:url_domain_deploy = true
添加域名解析:admin.tp5.com同样解析到public目录
Route::domain('admin','admin');
www.tp5.com/admin/index/index => admin.tp5.com/index/index
URL生成:
/模块/控制器/方法 + 参数
Url::build(路由信息,参数);
url(路由信息,参数);
<a href="{:url(路由信息,参数)}">

ThinkPHP简介相关推荐

  1. thinkphp简介与优势。

    简介 ThinkPHP是一个快速.简单的基于MVC和面向对象的轻量级PHP开发框架,遵循Apache2开源协议发布,从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,尤其注重开 ...

  2. ThinkPHP历史漏洞

    文章目录 ThinkPHP简介 Thinkphp历史漏洞 Thinkphp 2.x 任意代码执行漏洞 漏洞描述 影响版本 漏洞复现 Thinkphp5.0.23远程代码执行漏洞(CVE-2018-20 ...

  3. ThinkPHP框架漏洞总结

    Thinkphp简介 ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的,是一个快速.兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为 ...

  4. 渗透测试-ThinkPHP框架漏洞总结

    ThinkPHP框架漏洞总结 文章目录 ThinkPHP框架漏洞总结 前言 Thinkphp简介 Thinkphp本地安装 Thinkphp本地复现 验证poc 写入一句话 Vulhub-Thinkp ...

  5. php框架审计,关于ThinkPHP框架的审计

    关于ThinkPHP框架的审计,漏洞,框架,参数,数据库,方法 关于ThinkPHP框架的审计 易采站长站,站长之家为您整理了关于ThinkPHP框架的审计的相关内容. 下面由thinkphp框架教程 ...

  6. thinkphp 微信服务器验证代码_【表哥有话说 第27期】ThinkPHP框架漏洞梳理

    0x00. 前言 ThinkPHP被认为是PHP入门级框架.作为菜鸡的我,据破神经验,寒假打算系统学习一下ThinkPHP框架开发及梳理其安全问题.恰逢契机,写篇文章梳理一下ThinkPHP. 因为是 ...

  7. Thinkphp历史漏洞复现

    Thinkphp简介 Thinkphp 是一种开源框架.是一个由国人开发的支持 windows/Unix/Linux 等服务器环境的轻量级PHP开发框架. 很多cms(内容管理系统)就是基于 thin ...

  8. php实战开发管理系统,深入浅出PHP框架Thinkphp实战开发(权限管理、CMS内容管理系统)...

    Thinkphp课程大纲: ThinkPHP 是一个免费开源的,快速.简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议公布,是为了敏捷WEB应用开发跟简化企业应 ...

  9. think php5 离线手册,thinkphp5.0离线手册下载

    thinkphp5.0离线手册是一款针对thinkphp5.0进行快速入门学习使用此框架的手册,让朋友们便捷的学习相关的知识,快速掌握thinkphp的使用.有需要的朋友就来IT猫扑下载吧! Thin ...

最新文章

  1. 《计算机科学导论》一2.3 非位置化数字系统
  2. 知方可补不足~SQL中的count命令的一些优化措施(百万以上数据明显)
  3. 商业实战第三场 电视直销好记星
  4. java怎么导入一个项目到eclipse
  5. 【深度学习】高效使用Pytorch的6个技巧:为你的训练Pipeline提供强大动力
  6. 干货|SRC漏洞挖掘经验
  7. Chrome开发者工具Network标签页中观察到的set-cookie jsessionid是什么东西
  8. linux的搜索和时间
  9. C++:MAC安装Boost库文件并且使用CLion开发
  10. [转载] JVM(一):JVM体系结构详解
  11. 机器学习(3):信息论
  12. 【毕业答辩】如何制作优秀的毕业论文答辩PPT?
  13. vs2019安装python库_vs2019安装和使用详细图文教程
  14. Xshell5:Xshell下载和安装教程
  15. Python合并两个有序链表
  16. ubuntu ibus拼音异常
  17. C语言------冲突声明(conflicting declaration)
  18. 51单片机实现用一个定时器输出可调PWM
  19. 火线精英手游服务器维护,4399火线精英7月4日23:00全区停机维护公告
  20. NetLogo基础代码

热门文章

  1. Linux库函数之opendir/closedir/readdir
  2. 黑马全套Java教程(八):集合进阶
  3. Lifecycle, LifecycleOwner, LifecycleObserver类讲解
  4. 【斐波那契数列】10题-斐波那契数列
  5. Java 基础常见面试题(持续更新)
  6. 文化部查处第九批违法游戏及经营活动的通知
  7. python练习-模拟评委评分歌手,Python,一练,对,打分
  8. 低代码平台--基于surging开发微服务编排流程引擎构思
  9. “工赋”三问:从青岛到德阳,卡奥斯如何实现跨区域复制?
  10. 如何利用GPT来发论文!!