您现在的位置:首页 >> 前端 >> 内容

ThinkPHP框架总结

时间:2017/7/4 17:11:40 点击:

  核心提示:ThinkPHP框架总结一.控制器的定义一般来说,ThinkPHP的控制器是一个类文件,而操作则是控制器的一个公共方法,一般按照大驼峰的风格来命名控制器(类文件)声明首先要写一个命名空间(命名空间一般...

ThinkPHP框架总结

一.控制器的定义

一般来说,ThinkPHP的控制器是一个类文件,而操作则是控制器的一个公共方法,一般按照大驼峰的风格来命名

控制器(类文件)声明

首先要写一个命名空间(命名空间一般以模块名\所在的文件夹名组成)

namespace Home\Controller

然后要带导入类文件继承的父类(命名空间名\类文件名)

use Think\Controller

最后声明所使用的类继承导入进来的父类,然后在类中写相对应的方法

class IndexController extends Controller {

public function hello(){

echo 'hello,thinkphp!';

}

}

注意:定义控制器方法的时候,尽量避免和系统的方法名向冲突,(除非你非常明确自己在做什么),

这些保留方法名包括但不限于:

display get show fetch theme assign error success

因为操作方法就是控制器中的方法,所以遇到有和系统的关键字冲突的方法可能就不能定义了

可以设置操作方法的后缀来解决:

操作方法后缀

'ACTION_SUFFIX' => 'Action',

设置操作方法的后缀为Action,这样,控制器的操作方法定义调整为:每个控制器名后面加上一个Action后缀

如果你在空间中命名了这些系统方法,你在调用系统中的方法,他会先找自己空间下有没有这个空间,如果有

他会执行当前空间下的方法,而不会执行系统中的方法,所以为了不让系统中的方法失效,我们命名方法的时候尽量

避免这些关键字

二.多层控制器

意思就是对控制器进行分类:一般情况下分为两类,一类是执行展示的控制器,一类是事件控制器,事件控制器用户不能

之间访问,而要通过别的控制器调取他的方法访问 控制器的名称是通过DEFAULT_C_LAYER设置的,默认是Controller。

三.多级控制器

多级把控制器分为多级,我们需要哪个级里的文件夹,直接访问那个级里的类文件,这样分层,看起来结构更加清晰

更容易管理

例:多级控制器是指控制器可以通过子目录把某个控制器层分组存放,首先需要设置控制器的分级层次,

我们设置2级目录的控制器层:'CONTROLLER_LEVEL' => 2,把这个写到配置文件用

如果你把控制器文件分为两级,一级下如果有类文件就不能进行访问了,所以要根据自己的需求来分配,一般建议

分为一级就好

四.前置操作

当你要执行一个方法的是时候,需要在这个方法前面或者后面自动执行写方法的时候,可以使用before(前置)或者

after(后置)关键字来进行操作

例:

//前置操作

public function _before_test(){

echo '我是前置操作';

}

public function test(){

$this->show('这是一个新增页面'.$_GET['id']);

}

//后置操作

public function _after_test(){

echo '我是后置操作';

}

这两个关键字只针对你写那个方法会自动执行,如果你想在所有方法执行前都想执行一段代码的时候

可以使用_initialize()这个方法,他会在所以方法之前都执行一下这个方法里的代码

比如每个页面都需要头部和尾部就可以使用这个方法

五.参数绑定

Action参数绑定是通过直接绑定URL地址中的变量作为操作方法的参数,可以简化方法的定义甚至路由的解析。

Action参数绑定功能默认是开启的,其原理是把URL中的参数(不包括模块、控制器和操作名)和操作方法中的参数进行绑定。

要启用参数绑定功能,首先确保你开启了 URL_PARAMS_BIND 设置: 'URL_PARAMS_BIND' => true,

参数绑定有两种方式:按照变量名绑定和按照变量顺序绑定。

按变量顺序绑定:

第二种方式是按照变量的顺序绑定,这种情况下URL地址中的参数顺序非常重要,不能随意调整。要按照变量顺序进行绑定,

必须先设置 URL_PARAMS_BIND_TYPE 为1:'URL_PARAMS_BIND_TYPE' => 1

六.Url生成

定义规则

U('地址表达式',['参数'],['伪静态后缀'],['显示域名'])

大U方法能自动生成你想要的各种路径名,地址表达式从模块开始写后面跟控制器和方法名

参数你想传的值,伪静态后缀名,写上可以保护你的url路径,显示域名如果不写就是你当前的域名

传参方式有两种方式:一种是直接传参,也可以写成数组的方式来进行传参,写成数组的方式比较安全

可以防止别人的恶意攻击

使用大U方法来进行页面跳转,如果想在模块中使用大U方法就在U前面加上:就好了,然后就可以实现页面跳转

而且可以进行传值

七.伪静态

伪静态为了保护自己的url路径不被别人知道网站的目录结构,和自己的网页什么语言开发的,可以使用这个伪静态

来对网站进行处理

设置网站后缀名:'URL_HTML_SUFFIX'=>'shtml'

也可以设置没有后缀名:'URL_HTML_SUFFIX'=>''

常量__PUBLIC__可以自动找到public文件夹中的东西

八.TP之AJAX技术

TP框架提供了很好的AJAX技术,使用TP框架,不用写数据类型,只用执行代码就行了,不用考虑别的问题,TP框架

提供了一个方法来返回给前端数据:$this->ajaxReturn()

九.跳转与重定向

系统的\Think\Controller类内置了两个跳转方法success和error,用于页面跳转提示,而且可以支持ajax提交.

而且支持数组传输

success和error方法的第一个参数表示提示信息,第二个参数表示跳转地址,第三个参数是跳转时间(单位为秒)

例:// 操作完成3秒后跳转到 /Article/index

$this->success('操作完成','/Article/index',3);

// 操作失败5秒后跳转到 /Article/error

$this->error('操作失败','/Article/error',5);

可以再应用配置文件中对跳转的模板进行修改

//默认错误跳转对应的模板文件

'TMPL_ACTION_ERROR' => 'Public:error',

//默认成功跳转对应的模板文件

'TMPL_ACTION_SUCCESS' => 'Public:success',

然后在相对应的两个位置建相对应的模板

模板文件可以使用模板标签,并且可以使用下面的模板变量:

$message 页面提示信息

$error 页面错误提示信息

$waitSecond 跳转等待时间 单位为秒

$jumpUrl 跳转页面地址

重定向

Controller类的redirect方法可以实现页面的重定向功能

redirect方法的参数用法和U函数的用法一致(参考URL生成部分)

这个方法可以生成进行跳转

例:$this->redirect('New/category', array('cate_id' => 2), 5, '页面跳转中...');

十.输出变量

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参数 拿?号下的值

data 获取 其他类型的参数,需要配合额外数据源参数

变量过滤:

如果你没有在调用I函数的时候指定过滤方法的话:

系统默认的变量过滤机制

'DEFAULT_FILTER' => 'htmlspecialchars'

同样,该参数也可以设置支持多个过滤,例如:

'DEFAULT_FILTER' => 'trim,htmlspecialchars'

一般可以加上trim,把空格去掉

Web开发最常见的就是HTTP(超文本传输协议)通信协议,该协议(HTTP)设计的目的是确保

服务器与客户端之间的正确通信,其中最主要的4种方法:get,post,put,delete

1.Http get 方法: 主要用于向指定的URL(URI)请求资源(资源文件或是数据均可)

2.Http post方法:主要是向指定的URL(URI)提交数据, 通常用于表单发送,

post所传递的数据或参数不是已明文形式存在的,而是封装后的,因此相对安全系数高

3.Http put方法: 功能跟post相似,用来将信息放到请求的URL(URI)上,put方法是幂等方法,

post非幂等方法,put在请求时容易造成数据冗余,而post则不然

4.Http delete方法: 用于删除请求URL上的某个资源, 该请求返回状态有3.

200:表示删除请求被成功执行,返回被删除的资源

202:表示删除请求被接受,但还没有被执行

204:表示删除请求被执行,但没有返回被删除的资源

例:

echo I('get.id'); // 相当于 $_GET['id']

echo I('get.name'); // 相当于 $_GET['name']

如果拿值想把所有的值都拿到只需要在拿值方法后面加一个点

支持默认值:

echo I('get.id',0); // 如果不存在$_GET['id'] 则返回0

变量修饰符:

I('变量类型.变量名/修饰符')

s 强制转换为字符串类型

d 强制转换为整型类型

b 强制转换为布尔类型

a 强制转换为数组类型

f 强制转换为浮点类

例:

I('get.id/d'); // 强制变量转换为整型

I('post.name/s'); // 强制转换变量为字符串类型

I('post.ids/a'); // 强制变量转换为数组类型

十一.请求类型

我们需要判断当前操作的请求类型是GET 、POST 、PUT或 DELETE,

一方面可以针对请求类型作出不同的逻辑处理,另外一方面有些情况下面需要验证安全性,过滤不安全的请求

IS_GET 判断是否是GET方式提交

IS_POST 判断是否是POST方式提交

IS_PUT 判断是否是PUT方式提交

IS_DELETE 判断是否是DELETE方式提交

IS_AJAX 判断是否是AJAX提交

REQUEST_METHOD 当前提交类型

可以利用请求类型,做来判断POST让提交数据,GET的话就让他展示数据

十二.空方法操作

空操作是指系统在找不到请求的操作方法的时候,会定位到空操作( _empty )方法来执行,

利用这个机制,我们可以实现错误页面和一些URL的优化。

例:

public function _empty($name){

$this->show("你访问的{$name}不存在");

$this->test3();

}

十三.空控制器操作

空控制器的概念是指当系统找不到请求的控制器名称的时候,系统会尝试定位空控制器(EmptyController)

此常量CONTROLLER_NAME可以拿控制器的名称

例:

class EmptyController extends Controller{

public function _empty($name){

$this->show("访问的{$name}不存在");

}

}

十四.实例化控制器

你需要跨控制器调用的话,则可以单独实例化:

假设当前模块是Home模块

$User = A('User');

$Blog = A('Admin/Blog');

// 假设当前模块是Home模块

// 实例化Event控制器

$User = A('User','Event');

$Blog = A('Admin/Blog','Event');

跨模块调用控制器:

public function test3(){

$homeIndexObj=A("Home/index");

$homeIndexObj->index();

}

Tags:TH HI IN NK 
作者:网络 来源:Drug_的博客