欢迎光临
感谢一路有你

ThinkPHP-控制器

如果你对该文章中的内容有疑问/不解,可以点击此处链接提问
要注明问题和此文章链接地址 点击此处跳转
 

控制器

控制器定义

多层控制器

Controller控制器层(访问控制器)
Event控制器(事件控制器)

StuController.class.php

<?php
namespace Home\Controller;
use Think\Controller;
use Home\Event\StuEvent;

class StuController extends Controller
{
  public function index(){
    $a = A('Stu','Event');
    $a->index();

    echo "我是StuController";
  }
}
 ?>

StuEvent.class.php

<?php
namespace Home\Event;
use Think\Controller;

class StuEvent extends Controller
{
  public function index(){
    echo "我是event";
  }

}
 ?>

多级控制器

实例化控制器

Event控制器
$a = A('Stu','Event');

Home模块直接使用
$a = A('Stu');

前置和后置自动调用

public function add(){
    echo "我是add方法,";
  }

  //前置调用
  public function _before_add(){
    echo "add方法前自动调用,";
  }
  //后置调用
  public function _after_add(){
    echo "add方法后自动调用";
  }

Action参数绑定

伪静态

'URL_HTML_SUFFIX'=>'shtml'

-----------
http://serverName/Home/Blog/read/id/1 
变成 
http://serverName/Home/Blog/read/id/1.shtml

伪静态后缀


// 多个伪静态后缀设置 用|分割 'URL_HTML_SUFFIX' => 'html|shtml|xml'

禁止访问后缀

//URL禁止访问的后缀设置
'URL_DENY_SUFFIX' = > 'pdf|ico|png|gif|jpg', 

优先级

//优先级
URL_DENY_SUFFIX的优先级比URL_HTML_SUFFIX要高。


URL大小写

//true不区分大小写 false区分大小写
'URL_CASE_INSENSITIVE' =>true

URL不区分大小写并不会改变系统的命名规范,并且只有按照系统的命名规范后才能正确的实现URL不区分大小写

URL生成

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

[模块/控制器/操作#锚点@域名]?参数1=值1&参数2=值2...
U('User/add') // 生成User控制器的add操作的URL地址
U('Blog/read?id=1') // 生成Blog控制器的read操作 并且id为1的URL地址
U('Admin/User/select') // 生成Admin模块的User控制器的select操作的URL地址

参数

U('Blog/cate',array('cate_id'=>1,'status'=>1))
U('Blog/cate','cate_id=1&status=1')
U('Blog/cate?cate_id=1&status=1')

伪静态后缀


U('Blog/cate','cate_id=1&status=1','xml');

例子

U('Blog/read?id=1');

普通模式:
http://serverName/index.php?m=Blog&a=read&id=1
PATHINFO模式:
http://serverName/index.php/Home/Blog/read/id/1
REWRITE模式:
http://serverName/Home/Blog/read/id/1
兼容模式:
http://serverName/Home/Blog/read/id/1.html

域名支持

锚点支持

U('Blog/read#comment?id=1');

生成的URL地址可能是:

http://serverName/index.php/Home/Blog/read/id/1#comment

AjAX返回

跳转和重定向

3跳转

redirect('User/index',3, '添加成功');
$this->redirect('User/index',array(), 3, '添加成功');
$this->success('添加成功',U('Admin/User/index'));

例子

if($result){
    //设置成功后跳转页面的地址,默认的返回页面是$_SERVER['HTTP_REFERER']
    $this->success('新增成功', 'User/list');
} else {
    //错误页面的默认跳转页面是返回前一页,通常不需要设置
    $this->error('新增失败');
}

设置跳转模板

//默认错误跳转对应的模板文件
'TMPL_ACTION_ERROR' => THINK_PATH . 'Tpl/dispatch_jump.tpl',
//默认成功跳转对应的模板文件
'TMPL_ACTION_SUCCESS' => THINK_PATH . 'Tpl/dispatch_jump.tpl',

输入变量

获取变量

$id    =  $_GET['id']; // 获取get变量
$name  =  $_POST['name'];  // 获取post变量
$value =  $_SESSION['var']; // 获取session变量
$name  =  $_COOKIE['name']; // 获取cookie变量
$file  =  $_SERVER['PHP_SELF']; // 获取server变量

I方法

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新增)

获取

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

支持默认值
echo I('get.id',0); // 如果不存在$_GET['id'] 则返回0
echo I('get.name',''); // 如果不存在$_GET['name'] 则返回空字符串

整个数组
// 获取整个$_GET 数组
I('get.'); 

方法过滤


// 采用htmlspecialchars方法对$_GET['name'] 进行过滤,如果不存在则返回空字符串 echo I('get.name','','htmlspecialchars');

过滤 三元运算

I('post.email','','email');

支持类型:

int
boolean
float
validate_regexp
validate_url
validate_email
validate_ip
string
stripped
encoded
special_chars
unsafe_raw
email
url
number_int
number_float
magic_quotes
callback

正则过滤

I('get.name','','/^[A-Za-z]+$/');
I('get.id',0,'/^\d+$/');

变量修饰符

I('get.id/d');
I('post.name/s');
I('post.ids/a');
修饰符 作用
s 强制转换为字符串类型
d 强制转换为整形类型
b 强制转换为布尔类型
a 强制转换为数组类型
f 强制转换为浮点类型

请求类型

常量 说明
IS_GET 判断是否是GET方式提交
IS_POST 判断是否是POST方式提交
IS_PUT 判断是否是PUT方式提交
IS_DELETE 判断是否是DELETE方式提交
IS_AJAX 判断是否是AJAX提交
REQUEST_METHOD 当前提交类型

空操作(空方法)

系统找不到请求的方法时,会调用此方法
_empty()

public function _empty(){
      echo "没有此方法";
    }

空控制器

系统请求不到控制器时,自动调用EmptyController

新建控制器
EmptyController.class.php

<?php
namespace Home\Controller;
use Think\Controller;
class EmptyController extends Controller {
  public function _empty(){
    echo '控制器非法操作';
  }
}

插件控制器

操作绑定到类

赞(0) 打赏
未经允许不得转载:王明昌博客 » ThinkPHP-控制器
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏