一旦设置变量顺序绑定,这种情况下URL地址中的参数顺序非常重要,不能随意调整。这种情况下操作方法的定义不需要改变,只是访问的URL变了而已,现在用上面的方式访问就可以正确访问了。
如果在变量顺序绑定的情况下,我们访问:
:8999/index.php/Home/index/archive/2012/12
:8999/index.php/Home/index/archive/12/2012
这两个结果显然是不一样,后者并不是我们想要的。所以这种情况需要严格遵守顺序来传值。
伪静态
URL伪静态通常是为了满足更好的SEO效果,ThinkPHP支持伪静态URL设置,可以通过设置URL_HTML_SUFFIX参数随意在URL的最后增加你想要的静态后缀,而不会影响当前操作的正常执行,默认情况下,伪静态的设置为html。但我们可以自己设置,例如
'URL_HTML_SUFFIX'=>'shtml'
如果希望支持多个伪静态后缀,可以直接设置如下:
'URL_HTML_SUFFIX' => 'html|shtml|xml'
如果此项设置留空则表示可以支持所有的静态后缀。
也可以设置禁止访问的URL后缀通过URL_DENY_SUFFIX来设置,例如:
'URL_DENY_SUFFIX' => 'pdf|ico|png|gif|jpg',
注: URL_DENY_SUFFIX的优先级比URL_HTML_SUFFIX要高。
URL生成
为了配合所使用的URL模式,我们需要能够动态的根据当前的URL设置生成对应的URL地址,为此,ThinkPHP内置提供了U方法,用于URL的动态生成,可以确保项目在移植过程中不受环境的影响。
定义规则
U方法的定义规则如下(方括号内参数根据实际应用决定):
U('地址表达式',['参数'],['伪静态后缀'],['显示域名'])
地址表达式
地址表达式的格式定义如下:
[模块/控制器/操作#锚点@域名]?参数1=值1&参数2=值2...
如果不定义模块的话 就表示当前模块名称,下面是一些简单的例子:
U('User/add') // 生成User控制器的add操作的URL地址
U('Article/read?id=1') // 生成Article控制器的read操作 并且id为1的URL地址
U('Admin/User/select') // 生成Admin模块的User控制器的select操作的URL地址
参数
U方法的第二个参数支持数组和字符串两种定义方式,如果只是字符串方式的参数可以在第一个参数中定义,例如:
U('Article/cate',array('cate_id'=>1,'status'=>1)) U('Article/cate','cate_id=1&status=1') U('Article/cate?cate_id=1&status=1')
三种方式是等效的,都是生成Article控制器的cate()操作 并且cate_id为1 status为1的URL地址
但是不允许使用下面的定义方式来传参数:
U('Article/cate/cate_id/1/status/1');
生成路由地址
U方法还可以支持路由,如果我们定义了一个路由规则为:
'blogs/:id\d'=>'Index/read'
那么可以使用
U('/blogs/1');
最终生成的URL地址是:
跳转和重定向
这应该是在开发中最常用的功能之一。在应用开发中,经常会遇到一些带有提示信息的跳转页面,例如操作成功或者操作错误页面,并且自动跳转到另外一个目标页面。系统的\Think\Controller类内置了两个跳转方法success()和error(),用于页面跳转提示。
跳转
使用方法很简单,比如我们在Index控制器下新建一个方法user(),写上下面的内容:
public function user() { $User = M('User'); $data['username'] = 'Think'; $data['email'] = 'Think@gmail.com'; $result = $User->add($data); if($result){ $this->success('success', '/Home/User/addUser'); } else { $this->error('failed'); } }
M('User')表示实例化一个User对象,add()方法是向数据库添加一条纪录。然后我们需要新建一个UserController,在里面写上addUser()方法
<?php namespace Home\Controller; use Think\Controller; class UserController extends Controller { public function addUser() { echo 'add user done!'; } }
然后在浏览器中访问:8999/Home/Index/user,就可以看到add user done!了,下面详细来说说这两个重定向方法。
success()和error()方法的第一个参数表示提示信息,第二个参数表示跳转地址,第三个参数是跳转时间(单位为秒),例如: