入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

thinkPHP跳转方法及重定向

创建时间:2017-02-18 投稿人: 浏览次数:2206

在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,此时系统就不会再进行任何形式的过滤了。

声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。