thinkphp之URL,跳转和重定向

时间:2022-09-24 15:59:48

以下是项目所接触到的知识,根据ThinkPHP3.1.2完全开发手册总结。

一.URL(注意:模块首字母必须大写,分组名如果是大写文件夹名也要大写,在linux上对大小写特别敏感,而wamp不会,之前上传到服务器搞死我)

1.URL模式,在config.php配置

thinkphp之URL,跳转和重定向

URL_MODEL 为0:
采用传统的URL参数模式:

http://serverName/appName/?m=module&a=action&id=1

URL_MODEL 为1:

使用PATHINFO模式,默认就是这种模式:

http://serverName/appName/module/action/id/1/

在不考虑路由的情况下,第一个参数会被解析成模块名称(如果启用了分组的话,则依次往后递推),第二个参数会被解析成操作,后面的参数是显式传递的,而且必须成对出现,例如:

http://serverName/appName/module/action/year/2008/month/09/day/21/
其中参数之间的分割符号由URL_PATHINFO_DEPR参数设置,默认为”/”,例如我们设置URL_PATHINFO_DEPR为“-”的话,就可以使用下面的URL访问:

http://serverName/appName/module-action-id-1/


URL_MODEL 为2

该URL模式和PATHINFO模式功能一样,除了可以不需要在URL里面写入口文件,和可以定义.htaccess 文件外。在开启了Apache的URL_REWRITE模块后,就可以启用REWRITE模式了,具体参考下面的URL重写部分。


URL_MODEL 为3

兼容模式是普通模式和PATHINFO模式的结合,并且可以让应用在需要的时候直接切换到PATHINFO模式而不需要更改模板和程序,还可以和URL_WRITE模式整合。兼容模式URL可以支持任何的运行环境。
兼容模式的效果是可以解析以下url:

http://serverName/appName/?s=/module/action/id/1/

二.URL生成

为了配合所使用的URL模式,我们需要能够动态的根据当前的URL设置生成对应的URL地址,为此,ThinkPHP内置提供了U方法,用于URL的动态生成,可以确保项目在移植过程中不受环境的影响。
U方法的定义规则如下(方括号内参数根据实际应用决定):

U('[分组/模块/操作]?参数' [,'参数','伪静态后缀','是否跳转','显示域名'])

下面是一些简单的例子:

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方法的第二个参数支持数组和字符串两种定义方式,如果只是字符串方式的参数可以在第一个参数中定义,例如:

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')

三.页面跳转:

1. $this->success('新增成功''User/list');

2.$this->error('新增失败');

Success和error方法都有对应的模板,并且是可以设置的,默认的设置是两个方法对应的模板都是:

//默认错误跳转对应的模板文件
'TMPL_ACTION_ERROR' => THINK_PATH . 'Tpl/dispatch_jump.tpl';
//默认成功跳转对应的模板文件
'TMPL_ACTION_SUCCESS' => THINK_PATH . 'Tpl/dispatch_jump.tpl';
也可以使用项目内部的模板文件

//默认错误跳转对应的模板文件
'TMPL_ACTION_ERROR' => 'Public:error';
//默认成功跳转对应的模板文件
'TMPL_ACTION_SUCCESS' => 'Public:success';
success和error方法会自动判断当前请求是否属于Ajax请求,如果属于Ajax请求则会调用ajaxReturn方法返回信息,具体可以参考后面的AJAX返回部分。3.1版本开始,error和success方法支持传值,无论是跳转模板方式还是ajax方式 都可以使用assign方式传参。例如:

$this->assign('var1','value1');
$this->assign('var2','value2');
$this->error('错误的参数','要跳转的URL地址');
当正常方式提交的时候,var1和var2变量会赋值到错误模板的模板变量。
当采用AJAX方式提交的时候,会自动调用ajaxReturn方法传值过去(包括跳转的URL地址url和状态值status)


四.重定向

Action类的redirect方法可以实现页面的重定向功能。
redirect方法的参数用法和U函数的用法一致(参考上面的URL生成部分),例如:

//重定向到New模块的Category操作
$this->redirect('New/category', array('cate_id' => 2), 5, '页面跳转中...');
上面的用法是停留5秒后跳转到News模块的category操作,并且显示页面跳转中字样,重定向后会改变当前的URL地址,Redirect方法的第一个参数是一个URL地址。