序言
由于本人在学习的过程中很容易忘记框架,为了快速拾取和纠错,特列举基础内容。之后不断更新。
一、ThinkPhp3.2文件目录介绍
其中要注意www/Common/Conf/config.php是www项目的配置文件
而www/Home/Conf/config/config.php是当前项目Home分组的配置文件
convention.php和这两个config.php如果存在同名配置文件,后者覆盖前者。
例如设置:
其中模版引擎的默认方案是左右开始结束标识符为{},如上图。
二、如何调用框架
1、引入框架创建目录
在www项目根目录的index.php下引入ThinkPhP.php即可。
引入之后可在www根目录下生成以下文件目录
2、四种路由形式
路由:系统从URL参数中分析出当前请求的分组、控制器和操作的过程就是“路由”。
tp框架路由共有4种形式:
1. 基本get形式:http://网址/index.php?m=分组&c=控制器&a=操作方法
2. pathinfo路径形式[默认方式]http://网址/index.php/分组/控制器/操作方法
3. rewrite重写形式(伪静态技术)省略index.php入口文件http://网址/Home/Index/index
4. 兼容形式http://网址/index.php?s=/分组/控制器/操作方法
注意一般增加get参数时如下使用:
http://网址/index.php/分组/控制器/操作方法/名称/值/名称/值
###创建控制器和视图模版
名字对其即可
注意控制器调用视图模板方式
this−>display()
t
h
i
s
−
>
d
i
s
p
l
a
y
(
)
this->display(模板名称)
$this->display(控制器/模板名称)
3、使用系统变量
__CONTROLLER__路由地址控制器信息
__MODULE__路由地址分组信息
__ACTION__路由地址操作方法信息
__SELF__路由地址全部信息
MODULE_NAME
CONTROLLER_NAME
ACTION_NAME
4、开发和生成模式说明
入口文件index.php
//框架两种模式:[默认]生产(线上)、开发(调试)
define('APP_DEBUG',true);//开发(错误提示非常具体)
//define('APP_DEBUG',false);//生产(错误提示模糊)
开发调试模式:每次请求加载每个应用文件,会自动清除common~runtime.php文件
生产模式:该模式请求过程会把通用文件给“编译到一个文件里边”
三、MODULE和命名空间
这里注意许多不认识的函数如D()I(),去thinkPHP\Conf\convention.php查询
1、两种方式实例化model对象
实例化普通model对象
$model = new\Model\XXXModel();
除了可以实现简单操作(调用父类Model方法实现)
也可以实现一些复杂操作(调用具体普通model方法实现)
实例化基类Model对象
可以实现对数据库的基本操作
$model = D(); //实例化基类Model,没有关联任何表
$model = D('Goods'); //实例化父类Model对象,并操作xx_goods业务数据表
(该方式允许我们即使不创建具体的model模型类文件,也可以对数据表的数据进行操作)
如果一个数据表没有特殊方法要求,就可以通过D(XXX)进行操作。
如果数据表有特殊方法(例如用户名和密码判断需要一个特殊方法),就需要在普通model模型类里边定义好,通过new \Model\XXXModel()形式实例化对象,进而操作特殊方法。
2、Control与Viem直接Module的传递
在XXXcontrol写
this−>assign(′io′,
t
h
i
s
−
>
a
s
s
i
g
n
(
′
i
o
′
,
info),注意
传递到XXX.html,在XXX.html调用$io即可.
3、具体获得数据操作方法使用
$model->操作方法
where():限制操作(查询)条件
limit():
limit(长度):限制查询的条数
limit(偏移量,长度):偏移量=(页码-1)*长度
field():限制查询的字段
order():排序查询order by
group():分组查询group by
having():条件设置方法
4、数据的增删改操作方法
①增:Model->add()
两种方式
1)数组方式
数组=array(元素(下标=>元素值)元素(下标=>元素值)…) 数 组 = a r r a y ( 元 素 ( 下 标 => 元 素 值 ) 元 素 ( 下 标 => 元 素 值 ) … ) model(普通对象)->add(数组);
2)AR(Active Record 活跃记录)方式
model−>属性(字段)=值;//属性字段与数据表字段一致,否则不给写入数据 m o d e l − > 属 性 ( 字 段 ) = 值 ; / / 属 性 字 段 与 数 据 表 字 段 一 致 , 否 则 不 给 写 入 数 据 model->add();
②改:Model->save()
与add添加一致。
但要注意,如果只修改一个,需要加入主键id作为修改标识。
修改多个,就需要model->where(条件)->save();
③删:Model->delete()
model−>where()−>delete()或者 m o d e l − > w h e r e ( ) − > d e l e t e ( ) 或 者 model->delete(id);//其中id为主键
5、执行原生sql语句
$sql="insert select update delete ......";
①查询语句:$model 对象->query($sql);
②添加/修改/删除语句:$model 对象 ->execute($sql);
6、表单自动验证
①通过
model−>create();方法收集表单信息,该方法同时具备表单自动验证功能,其还具有非法字段过滤功能。②验证规则在model模型类中修改
m
o
d
e
l
−
>
c
r
e
a
t
e
(
)
;
方
法
收
集
表
单
信
息
,
该
方
法
同
时
具
备
表
单
自
动
验
证
功
能
,
其
还
具
有
非
法
字
段
过
滤
功
能
。
②
验
证
规
则
在
m
o
d
e
l
模
型
类
中
修
改
_validate值
protected $_validata=array(
array(字段,规则,错误提示[,条件,附加规则,时间])
)
7、非限定名称、限定名称、完全限定名称
命名空间中的三个名称的术语如下所示:
1.非限定名称,或不包含前缀的类名称,例如 $comment = new Comment();。如果当前命名空间是Blog\Article,Comment将被解析为Blog\Article\Comment。如果使用Comment的代码不包含在任何命名空间中的代码(全局空间中),则Comment会被解析为Comment。
2.限定名称,或包含前缀的名称,例如 $comment = new Article\Comment();。如果当前的命名空间是Blog,则Comment会被解析为Blog\Article\Comment。如果使用Comment的代码不包含在任何命名空间中的代码(全局空间中),则Comment会被解析为Comment。
3.完全限定名称,或包含了全局前缀操作符的名称,例如 $comment = new \Article\Comment();。在这种情况下,Comment总是被解析为代码中的文字名(literal name)Article\Comment。
其实可以把这三种名称类比为文件名(例如 comment.php)、相对路径名(例如 ./article/comment.php)、绝对路径名(例如 /blog/article/comment.php),这样可能会更容易理解。
在这里创建一个Blog 空间,使用非限定名称,表示当前Blog空间,实例化以后这个调用将被解析。使用限定名称,表示相对于Blog空间,实例化以后这个调用将被解析成 Blog\Article\Comment(),注意类前面没有反斜线。使用完全限定名称,表示绝对于Blog空间,实例化以后这个调用将被解析,注意类前面有反斜线和没有反斜线区别。
注:访问公共空间,文件里没有namespace关键字,则通过“\元素”访问公共空间元素
8、两种方式实例化功能类对象
①完全限定名称 $obj = new \Think\Verify();
②空间类元素引入 use Think\Verify; $obj = new Verify();