一.控制器定义
1.实例化控制器:A方法
访问控制器的实例化通常是自动完成的,系统会根据URL地址解析出访问的控制器名称自动实例化,并且调用相关的操作方法。
如果你需要跨控制器调用的话,则可以单独实例化:
$User = new \Home\Controller\UserController()
$Blog = new \Admin\Controller\BlogController()
系统为上面的控制器实例化提供了一个快捷调用方法A,上面的代码可以简化为:
// 假设当前模块是Home模块
$User = A('User');
$Blog = A('Admin/Blog');
默认情况下,A方法实例化的是默认控制器层(Controller),如果你要实例化其他的分层控制器的话,可以使用:
// 假设当前模块是Home模块
// 实例化Event控制器
$User = A('User','Event');
$Blog = A('Admin/Blog','Event');
上面的代码等效于:
$User = new \Home\Event\UserEvent()
二.伪静态
URL伪静态通常是为了满足更好的SEO效果,ThinkPHP支持伪静态URL设置,可以通过设置URL_HTML_SUFFIX
参数随意在URL的最后增加你想要的静态后缀,而不会影响当前操作的正常执行。例如,我们设置
'URL_HTML_SUFFIX'=>'shtml'
的话,我们可以把下面的URL http://serverName/Home/Blog/read/id/1
变成 http://serverName/Home/Blog/read/id/1.shtml
后者更具有静态页面的URL特征,但是具有和前面的URL相同的执行效果,并且不会影响原来参数的使用。
默认情况下,伪静态的设置为html
,如果我们设置伪静态后缀为空,
'URL_HTML_SUFFIX'=>''
则可以支持所有的静态后缀,并且会记录当前的伪静态后缀到常量 __EXT__
,但不会影响正常的页面访问。
例如:
http:
http:
http:
http:
都可以正常访问,如果要获取当前的伪静态后缀,通过常量 __EXT__
获取即可。
如果希望支持多个伪静态后缀,可以直接设置如下:
// 多个伪静态后缀设置 用|分割
'URL_HTML_SUFFIX' => 'html|shtml|xml'
那么,当访问 http://serverName/Home/blog/3.pdf
的时候会报系统错误。
可以设置禁止访问的URL后缀,例如:
'URL_DENY_SUFFIX' => 'pdf|ico|png|gif|jpg', // URL禁止访问的后缀设置
如果访问 http://serverName/Home/blog/3.pdf
就会直接返回404错误。
注意:
URL_DENY_SUFFIX
的优先级比URL_HTML_SUFFIX
要高。
三.URL大小写
如果是Windows环境,无论大小写如何都能定位到文件,如果在Linux环境下面,一旦大小写不一致,就会发生URL里面使用小写模块名不能找到模块类的情况。
但是只要在项目配置中,增加:
'URL_CASE_INSENSITIVE' =>true
配置好后,即使是在Linux环境下面,也可以实现URL访问不再区分大小写了。
这里需要注意一个地方,一旦开启了不区分URL大小写后,如果我们要访问类似UserTypeController的控制器,那么正确的URL访问应该是:
// 正确的访问地址
http://serverName/index.php/home/user_type/index
// 错误的访问地址(linux环境下)
http://serverName/index.php/home/usertype/index
四.URL生成
1.U方法:U('地址表达式',['参数'],['伪静态后缀'],['显示域名'])
地址表达式
U('User/add')
U('Blog/read?id=1')
U('Admin/User/select')
['参数']
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')
2.自动识别
根据项目的不同URL设置,同样的U方法调用可以智能地对应产生不同的URL地址效果,例如针对:
U('Blog/read?id=1');
这个定义为例。
如果当前URL设置为普通模式的话,最后生成的URL地址是:
http:
如果当前URL设置为PATHINFO模式的话,同样的方法最后生成的URL地址是:
http://serverName/index.php/Home/Blog/read/id/1
如果当前URL设置为REWRITE模式的话,同样的方法最后生成的URL地址是:
http:
如果当前URL设置为REWRITE模式,并且设置了伪静态后缀为.html的话,同样的方法最后生成的URL地址是:
http:
五.输出变量
1.I方法:
I('变量类型.变量名/修饰符',['默认值'],['过滤方法或正则'],['额外数据源'])
I('get.name' , ' ' , '/^[A-Za-z]+$/'); //用正则判断传入的值 中间空白应该为默认值