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基础的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序实现微信登陆(TP5后端)

tp框架基础

tp框架基础

TP5学习基础二:目录结构URL路由数据操作

[vscode]--HTML代码片段(基础版,reactvuejquery)

TP框架做网页静态化