thinkPHP跳转方法及重定向
在thinkPHP中,跳转页面的实现由success和error方法实现,操作成功时用success方法,失败则使用error方法。且他们两者均支持ajax提交。
使用方法举例:
$User = M("User");//实例化User对象
$result = $User->add($data);
if($result){
//条件成立时跳转
$this->success("操作成功","/User/index");
}else{
//条件不成立时的跳转
$this->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);
跳转时间也是可选的,默认success方法是1s,error方法是3s。
Controller类的redirect方法可以实现页面的重定向功能。
redirect方法的参数用法和U函数的用法一直,例:
//重定向到New模块的Category操作
$this->redirect("New/category",array("cate_id"=>2),5,"页面跳转中...");
说明:上面的用法表示5秒后跳转到New模块的category操作,并且显示‘页面跳转中…’字样,重定向后会改变当前的额URL地址。
如果仅仅是想重定向到一个指定的URL地址而不是到某个模块的操作方法,可以直接时用下面的额redirect函数重定向:
//重定向到指定的URL地址
redirect("/New/category/cate_id/2",5,"页面跳转中...");
redirect函数的第一个参数是URL地址。
注:redirect方法和redirct函数的区别在于前者是用URL规则定义跳转,后者是一个纯粹的URL地址。
thinkPHP可以很好的支持AJAX请求,在系统的ThinkController提供了ajaxReturn方法泳衣AJAX调用后返回数据给客户端。并且支持JSON、JSONP、XML和EVAL四种方式给客户端接收数据,并且支持配置其他方式的数据格式返回。
ajaxReturn方法调用示例(返回单个数据):
$data = "ok";
$this->ajaxReturn($data);
ajaxReturn返回数组:
$data["status"]=1;
$data["content"]="content";
$this->ajaxReturn($data);
ajaxReturn默认配置采用JSON格式返回数据(通过配置DEFAULT_AJAX_RETURN进行设置),我们可以指定格式返回,例:
//指定XML格式返回数据
$data["status"]=1;
$data["content"]="content";
$this->ajaxReturn($data,"xml");
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 | 获取其他类型的参数,需要配合额外数据源参数 |
注意:变量类型不区分大小写,变量名则严格区分大小写。默认值和过滤方法均属于可选参数。
举例说明:
echo I("get.id"); //相当于$_GET["id"]
echo I("get.id", 0); //I方法支持的默认值,即当get.id不存在的时候,返回默认值0
echo I("get.name", "", "htmlspecialchars"); //采用htmlspecialchars对$_GET["name"]进行过滤,如果不存在则返回空字符串
echo I("get."); //直接获取整个变量类型
I("post.name", "", "htmlspecialchars"); //采用htmlspecialchars方法对$_POST["name"]进行过滤,如果不存在则返回空字符串
I("session.user_id",0); //获取$_SESSION["user_id"],不存在时返回默认值0
I("cookie."); //获取整个$_COOKIE数组
I("server.REQUET_METHOD"); //获取$_SERVER["REQUEST_METHOD"]
变量修饰符:
最新版本的I函数支持对变量使用修饰符功能,可以更方便的通过类型过滤变量,例子:
I("get.id/d"); //强制变量为整形
I("get.ids/a"); //强制变量为数组类型
可以使用的修饰符包括:
修饰符 | 作用 |
---|---|
s | 强制转换为字符串类型 |
d | 强制转换为整型类型 |
b | 强制转换为布尔类型 |
a | 强制转换为数组类型 |
f | 强制转换为浮点类型 |
过滤方法或正则:
如果没有在调用函数的时候指定过滤算法的话,系统会采用默认的过滤机制(由DEFAULT_FILTER配置),事实上,该参数的默认设置是:
//系统默认的变量过滤机制
"DEFAULT_FILTER" =>"htmlspecialchars
也就是说,I方法的所有获取变量如果没有设置变量过滤方法的话都会进行htmlspecialchars进行过滤,那么:
I("get.name"); //等同于htmlspecialchars($_GET["name"]);
默认过滤机制也可以有多个值:
"DEFAULT_FILTER" =>"strip_tags,htmlspecialcars"
注:如果在使用I方法的时候指定过滤方法,那么就会忽略DEFAULT_FILTER的设置。
例:
//对$_POST["email"]进行格式验证,不符合要求时返回空字符串
I("post.email", "", filter_validate_email);
过滤方法名称必须是filter_list方法中的有效值(不同服务器环境可能有所不同),可能支持的值如下:
- filter_int
- filter_boolean
- filter_validate_regexp
- filter_validate_email
- filter_validate_ip
- filter_string
- filter_stripped
- filter_encoded
- filter_special_chars
- filter_unsafe_raw
- filter_email
- filter_url
- filter_number_int
- filter_number_float
- filter_magic_quotes
- filter_callback
注:在一些特殊情况下,我们不希望进行任何过滤,可以将过滤方法值为空或false,此时系统就不会再进行任何形式的过滤了。
- 上一篇: thinkPHP实现用户登录
- 下一篇: thinkPHP5-性能调试