TP基础
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TP基础相关的知识,希望对你有一定的参考价值。
一、目录结构
解压缩到web目录下面,可以看到初始的目录结构如下:
www WEB部署目录(或者子目录)
├─index.php 入口文件
├─README.md README文件
├─Application 应用目录
├─Public 资源文件目录
└─ThinkPHP 框架目录
其中框架目录ThinkPHP的结构如下:
├─ThinkPHP 框架系统目录(可以部署在非web目录下面)
│ ├─Common 核心公共函数目录
│ ├─Conf 核心配置目录
│ ├─Lang 核心语言包目录
│ ├─Library 框架类库目录
│ │ ├─Think 核心Think类库包目录
│ │ ├─Behavior 行为类库目录
│ │ ├─Org Org类库包目录
│ │ ├─Vendor 第三方类库目录
│ │ ├─ ... 更多类库目录
│ ├─Mode 框架应用模式目录
│ ├─Tpl 系统模板目录
│ ├─LICENSE.txt 框架授权协议文件
│ ├─logo.png 框架LOGO文件
│ ├─README.txt 框架README文件
│ └─ThinkPHP.php 框架入口文件
二、CONTROLER获取变量值
1、AJAX返回
ThinkPHP可以很好的支持AJAX请求,系统的\\Think\\Controller类提供了ajaxReturn方法用于AJAX调用后返回数据给客户端。并且支持JSON、JSONP、XML和EVAL四种方式给客户端接受数据,并且支持配置其他方式的数据格式返回。
ajaxReturn方法调用示例:
$data[\'status\'] = 1; $data[\'content\'] = \'content\'; $this->ajaxReturn($data);
2、跳转和重定向
页面跳转
在应用开发中,经常会遇到一些带有提示信息的跳转页面,例如操作成功或者操作错误页面,并且自动跳转到另外一个目标页面。系统的\\Think\\Controller类内置了两个跳转方法success和error,用于页面跳转提示,而且可以支持ajax提交。
success和error方法的第一个参数表示提示信息,第二个参数表示跳转地址,第三个参数是跳转时间(单位为秒),例如:
// 操作完成3秒后跳转到 /Article/index $this->success(\'操作完成\',\'/Article/index\',3); // 操作失败5秒后跳转到 /Article/error $this->error(\'操作失败\',\'/Article/error\',5);
跳转地址是可选的,success方法的默认跳转地址是$_SERVER["HTTP_REFERER"]
,error方法的默认跳转地址是javascript:history.back(-1);
。
重定向
Controller类的redirect方法可以实现页面的重定向功能。
redirect方法的参数用法和U函数的用法一致(参考URL生成部分),例如:
//重定向到New模块的Category操作 $this->redirect(\'New/category\', array(\'cate_id\' => 2), 5, \'页面跳转中...\');
3、输入变量
I方法是ThinkPHP用于更加方便和安全的获取系统输入变量,可以用于任何地方,用法格式如下:
I(\'变量类型.变量名/修饰符\',[\'默认值\'],[\'过滤方法\'],[\'额外数据源\'])
变量类型是指请求方式或者输入类型,包括:
变量类型 含义
get 获取GET参数
post 获取POST参数
param 自动判断请求类型获取GET、POST或者PUT参数
request 获取REQUEST 参数
put 获取PUT 参数
session 获取 $_SESSION 参数
cookie 获取 $_COOKIE 参数
server 获取 $_SERVER 参数
globals 获取 $GLOBALS参数
path 获取 PATHINFO模式的URL参数(3.2.2新增)
data 获取 其他类型的参数,需要配合额外数据源参数(3.2.2新增)
4、请求类型
在很多情况下面,我们需要判断当前操作的请求类型是GET 、POST 、PUT或 DELETE,一方面可以针对请求类型作出不同的逻辑处理,另外一方面有些情况下面需要验证安全性,过滤不安全的请求。 系统内置了一些常量用于判断请求类型,包括:
常量 说明
IS_GET 判断是否是GET方式提交
IS_POST 判断是否是POST方式提交
IS_PUT 判断是否是PUT方式提交
IS_DELETE 判断是否是DELETE方式提交
IS_AJAX 判断是否是AJAX提交
REQUEST_METHOD 当前提交类型
class UserController extends Controller{ public function update(){ if (IS_POST){ $User = M(\'User\'); $User->create(); $User->save(); $this->success(\'保存完成\'); }else{ $this->error(\'非法请求\'); } } }
三、VIEW基本标签
if、volist、in、empty标签
IF标签
用法示例:
<if condition="($name eq 1) OR ($name gt 100) "> value1 <elseif condition="$name eq 2"/>value2 <else /> value3 </if>
Volist标签
volist标签通常用于查询数据集(select方法)的结果输出,通常模型的select方法返回的结果是一个二维数组,可以直接使用volist标签进行输出。 在控制器中首先对模版赋值:
$User = M(\'User\'); $list = $User->limit(10)->select(); $this->assign(\'list\',$list);
在模版定义如下,循环输出用户的编号和姓名:
<volist name="list" id="vo"> {$vo.id}:{$vo.name}<br/> </volist>
Empty标签
empty标签用于判断某个变量是否为空,用法:
<empty name="name"> name为空值 </empty>
范围判断标签
用法: 假设我们中控制器中给id赋值为1:
$id = 1; $this->assign(\'id\',$id);
我们可以使用in标签来判断模板变量是否在某个范围内,例如:
<in name="id" value="1,2,3"> id在范围内 <else/> id不在范围内 </in>
四、MODEL插入、批量插入、修改、删除
插入
$User = M("User"); // 实例化User对象 $data[\'name\'] = \'ThinkPHP\'; $data[\'email\'] = \'ThinkPHP@gmail.com\'; $User->add($data);
批量插入
// 批量添加数据 $dataList[] = array(\'name\'=>\'thinkphp\',\'email\'=>\'thinkphp@gamil.com\'); $dataList[] = array(\'name\'=>\'onethink\',\'email\'=>\'onethink@gamil.com\'); $User->addAll($dataList);
修改
$User = M("User"); // 实例化User对象 // 要修改的数据对象属性赋值 $data[\'name\'] = \'ThinkPHP\'; $data[\'email\'] = \'ThinkPHP@gmail.com\'; $User->where(\'id=5\')->save($data); // 根据条件更新记录
ps:save方法必须放到语句最后
删除
$User = M("User"); // 实例化User对象 $User->where(\'id=5\')->delete(); // 删除id为5的用户数据 $User->delete(\'1,2,5\'); // 删除主键为1,2和5的用户数据 $User->where(\'status=0\')->delete(); // 删除所有状态为0的用户数据
五、事务处理
$model = new Model(); $model->startTrans(); $flag=false; $hid = $model->table(C(‘DB_PREFIX\').\'hotel\')->add($arr_hotel); if(!$flag){ $model->rollback(); }else{ $model->commit(); }
六、查询getfield、find、select
读取数据是指读取数据表中的一行数据(或者关联数据),主要通过find方法完成,例如:
$User = M("User"); // 实例化User对象 // 查找status值为1name值为think的用户数据 $data = $User->where(\'status=1 AND name="thinkphp"\')->find(); dump($data);
读取数据集其实就是获取数据表中的多行记录(以及关联数据),使用select
方法,使用示例:
$User = M("User"); // 实例化User对象 // 查找status值为1的用户数据 以创建时间排序 返回10条数据 $list = $User->where(\'status=1\')->order(\'create_time\')->limit(10)->select();
读取字段值其实就是获取数据表中的某个列的多个或者单个数据,最常用的方法是 getField
方法。
默认情况下,当只有一个字段的时候,返回满足条件的数据表中的该字段的第一行的值。
如果需要返回整个列的数据,可以用:
$User->getField(\'id\',true); // 获取id数组
如果传入多个字段的话,默认返回一个关联数组:
$User = M("User"); // 实例化User对象 // 获取所有用户的ID和昵称列表 $list = $User->getField(\'id,nickname\');
如果传入多个字段的名称,例如:
$list = $User->getField(\'id,nickname,email\');
返回的是一个二维数组,类似select方法的返回结果,区别的是这个二维数组的键名是用户的id(准确的说是getField方法的第一个字段名)。
ps:getField方法必须放到查询最后,并且不能连表查询
七、TP find_in_set的使用
$where[\'_string\']=\'FIND_IN_SET("5", area)’;
八、TP加载第三方插件方式
vendor(“PHPExcel.PHPExcel"); $objPHPExcel = new \\PHPExcel();
以上是关于TP基础的主要内容,如果未能解决你的问题,请参考以下文章