如果你对该文章中的内容有疑问/不解,可以点击此处链接提问
要注明问题和此文章链接地址 点击此处跳转
控制器
控制器定义
多层控制器
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 '控制器非法操作';
}
}