入口文件:index.php
目录结构:
1、application //应用程序目录
config //配置文件目录
controllers //控制器目录
admin //后台控制器目录
home //前台控制器目录
models //数据库模型目录
views //视图目录
admin
home
2、framework //框架目录
core //框架核心类
databases //数据库驱动类
helpers //辅助函数目录
libraries //类库目录
3、public //前台静态资源目录
css
images
js
uploads //文件上传目录
4、index.php //入口文件
控制器:
控制器类的命名方式是:控制器名(驼峰法,首字母大写)+Controller
控制器文件的命名方式是:类名+class.php(类文件后缀)
控制器方法:
C()用于设置,获取以及保存配置参数的方法
M()连接表名
U()用于URL的动态生成:只需要写模块文件名/控制器/方法
ajaxReturn($data,数据格式):返回AJAX格式的数据
success(‘提示内容’,‘页面地址’,‘跳转时间’):当页面出现错误的时候跳转到上一个页面;
I(‘变量类型.下标’,获取失败返回的数值/字符串,对变量进行过滤;获取系统输入变量
I(‘变量类型,变量名/修饰符’);s=>字符串;d=>整型,b=>布尔,a=>数组,f=>浮点
请求类型
IS_POST : 判断是否以POST方式提交
IS_GET : 判断是否以GET方式提交
IS_AJAX : 判断是否以AJAX方式提交
WHERE
$uer = M("数据表名“);/实例化对象
$data=$uer->where()->select()//带条件的查询语句
ALIAS
$data = $uer ->alias('a')//设置镖的别名
FIELD用于查询
field()//返回需要的字段
ORDER
order(‘字段 排序方法’)//对数据进行排列asc 正常排序desc倒叙
LIMIT 限制结果数量
limit()限制结果数量 也可以是数量区间
PAGE 分页
page(‘页码,数量条数’)
GROUP
group()分组
JOIN 多表连接
完整示例:
$table = M(‘表名’);
$data = $table->field('需要查询的字段')
->join(表1 on 表2 .字段=表1.字段)
->join(表3 on 表2.字段=表3.字段)
->select();
模板
默认的模板文件定义规则:视图目录/[模板主题/]控制器名/操作名+模板后缀
assign方法对模板变量赋值:$this->assign('name',$value);
assign方法必须在display和show方法
之前调用,并且系统只会输出设定的变量,其它变量不会输出(系统变量例外),一定程度上保证了变量的安全性。赋值 后,就可以在模板文件中输出变量了,如果使用的是内置模板的话,就可以这样输出:
渲染模板调用格式:display('[模板文件]'[,'字符编码'][,'输出类型'])
// 不带任何参数 自动定位当前操作的模板文件
$this->display();
// 指定模板输出 $this->display('edit');
//表示调用当前控制器下面的edit模板$this->display('Member:read');
输出变量
例如,在控制器中我们给模板变量赋值:
$name = 'ThinkPHP';
$this->assign('name',$name);
$this->display();
然后就可以在模板中使用:
Hello,{$name}!
模板编译后的结果就是:
Hello,<?php echo($name);?>!
//注意模板标签的{
和$
之间不能有任何的空格,否则标签无效。
普通标签默认开始标记是{
,结束标记是 }
。也可以通过设置TMPL_L_DELIM
和TMPL_R_DELIM
进行更改。
使用函数:
{$data.name|md5}
多个参数需要调用
{$create_time|date="y-m-d",###}
多个函数之间用“|”分割
函数会按照从左到右的顺序依次调用。
三元运算符
{$status?'正常':'错误'}
{$info['status']?$info['msg']:$info['error']}
注意:三元运算符中暂时不支持点语法。
内置标签
标签名 | 作用 | 包含属性 |
---|---|---|
include | 包含外部模板文件(闭合) | file |
import | 导入资源文件(闭合 包括js css load别名) | file,href,type,value,basepath |
volist | 循环数组数据输出 | name,id,offset,length,key,mod |
foreach | 数组或对象遍历输出 | name,item,key |
for | For循环数据输出 | name,from,to,before,step |
switch | 分支判断输出 | name |
case | 分支判断输出(必须和switch配套使用) | value,break |
default | 默认情况输出(闭合 必须和switch配套使用) | 无 |
compare | 比较输出(包括eq neq lt gt egt elt heq nheq等别名) | name,value,type |
range | 范围判断输出(包括in notin between notbetween别名) | name,value,type |
present | 判断是否赋值 | name |
notpresent | 判断是否尚未赋值 | name |
empty | 判断数据是否为空 | name |
notempty | 判断数据是否不为空 | name |
defined | 判断常量是否定义 | name |
notdefined | 判断常量是否未定义 | name |
define | 常量定义(闭合) | name,value |
assign | 变量赋值(闭合) | name,value |
if | 条件判断输出 | condition |
elseif | 条件判断输出(闭合 必须和if标签配套使用) | condition |
else | 条件不成立输出(闭合 可用于其他标签) | 无 |
php | 使用php代码 | 无 |
volist标签
volist标签通常用于查询数据集(select方法)的结果输出,通常模型的select方法返回的结果是一个二维数组,可以直接使用volist标签进行输出。
<volist name="list" id="vo"> {$vo.id}:{$vo.name}<br/> </volist>
if标签
<if condition="$id < 5 ">value1
<else /> value2
</if>
模板替换
__ROOT__: 会替换成当前网站的地址(不含域名)
__APP__: 会替换成当前应用的URL地址 (不含域名)
__MODULE__:会替换成当前模块的URL地址 (不含域名)
__CONTROLLER__(__或者__URL__ 兼容考虑): 会替换成当前控制器的URL地址(不含域名)
__ACTION__:会替换成当前操作的URL地址 (不含域名)
__SELF__: 会替换成当前的页面URL
__PUBLIC__:会被替换成当前网站的公共目录 通常是 /Public
调试模式
一般位于入口文件(tp3.2/index.php)中。
// 开启调试模式
// 关闭调试模式
define('APP_DEBUG', true);
define('APP_DEBUG', false);
优势:
- 开启日志记录,任何错误信息和调试信息都会详细记录,便于调试;
- 关闭模板缓存,模板修改可以即时生效;
- 记录SQL日志,方便分析SQL;
- 关闭字段缓存,数据表字段修改不受缓存影响;
- 严格检查文件大小写(即使是Windows平台),帮助你提前发现Linux部署可能导致的隐患问题;
- 通过页面Trace功能更好的调试和发现错误;
缓存
数据缓存
// 设置缓存
// 缓存数据300秒
// 读取缓存
// 删除缓存
S('name',$value);
S('name',$value,300);
$value = S('name');
S('name',null);
缓存路径: tp3.2/Application/Runtime/Temp
快速缓存
快速缓存Data数据 快速缓存Data数据,保存到指定的目录 获取缓存数据 删除缓存数据
F('data',$Data);
F('data',$Data,TEMP_PATH);
$Data = F('data');
F('data',NULL);
缓存路径: tp3.2/Application/Runtime/Data