取缔使用系统保留函数:
display get show fetch theme assign error success
**如果你使用了,我会杀了你!**
安装操作函数的后缀:
‘ACTION_SUFFIX’ => ‘Action’ // 操作方法后缀
1 <?php
2 namespace Home\Controller;
3 use Think\Controller;
4 class IndexController extends Controller
5 {
6 public function listAction(){
7 echo 'list';
8 }
9
10 public function helloAction(){
11 echo 'hello';
12 }
13
14 public function testAction(){
15 echo 'test';
16 }
17 }
多层控制器:
在介绍Think PHP
架构的时候,我早就简单的介绍过多层控制器的概念,即可以把控制层细化为控制部分和事件处理部分。那里必要更详细的指明的某个是,控制部分一般必要继续Controler类,不过事件处理部分一般不是造访的入口(输出到模板),所以时常不须要持续Controler类。举例:
事件控制器代码举例:
1 <?php
2 namespace Home\Event;
3 class UserEvent {
4 public function login(){
5 echo 'login event';
6 }
7 public function logout(){
8 echo 'logout event';
9 }
10 }
11 ?>
铺天盖地控制器:
‘CONTROLLER_LEVEL’ => 2
调用规则及A函数:
1 $User = new \Home\Controller\UserController();
2 //实例化Admin模块的Blog控制器
3 $Blog = new \Admin\Controller\BlogController();
4 系统为上面的控制器实例化提供了一个快捷调用方法A,上面的代码可以简化为
5 //假设当前模块是Home模块
6 $User = A('User');
7 $Blog = A('Admin/Blog');
8 //假设当前模块是Home模块
9 //实例化Event控制器
10 $User = A('User','Event');
11 $Blog = A('Admin/Blog','Event');
Controler前置方法和前置方法:
1 <?php
2 namespace Home\Controller;
3 use Think\Controller;
4 class IndexController extends Controller{
5 //前置操作方法
6 public function _before_index(){
7 echo 'before<br/>';
8 }
9 public function index(){
10 echo 'index<br/>';
11 }
12 //后置操作方法
13 public function _after_index(){
14 echo 'after<br/>';
15 }
16 }
17 ?>
注意事项如下:
1.
一旦当前的操作并不曾概念操作方法,而是径直渲染模板文件,那么一旦定义了内置和前置方法的话,依旧会生效。真正有模板输出的只怕只是是当前的操作,松手和前置操作一般情况是尚未其它输出的。
- 须要专注的是,在稍微措施里面使用了exit或然失实输出等等的话
有只怕不会再进行前置方法了。例如,假定在现阶段操作里面调用了控制器类的error方法,那么将不会再举办前置操作,不过不影响success方法的前置方法执行。
再议UHighlanderL参数绑定:
前边曾经介绍过UTiguanL的参数绑定方案,就是通过措施/参数A/A值/参数B/B值……的措施。
实际UCRUISERL参数绑定还有其它一种方案,就是只传值不写参数名。
不过尔尔绑定须要在配置文件中布局如下配置项:
‘URL_PARAMS_BIND_TYPE’ => 1
除非在该配置项为1的时候,函数才会挨个从ULacrosseL中读入参数值。
变量顺序绑定的艺术当下仅对PATHINFO地址有效。
若果不想使用参数绑定,可以设置如下内容:
‘URL_PARAMS_BIND’ => false
URL伪静态:
U汉兰达L伪静态可以更好的支撑SEO。
比方设置:’UTiguanL_HTML_SUFFIX’=>’html’
那样,原来的访问链接:
http://123.56.183.226/index.php/Home/search/detail/3329061
可以修改为:
http://123.56.183.226/index.php/Home/search/detail/3329061.html
如果把伪静态U奥迪Q7L_HTML_SUFFIX设置为空值,那么框架将协助全部的伪静态后缀。
帮助各个伪静态,之间用|分割:’UPRADOL_HTML_SUFFIX’=>’html|pdf’
一致的,你可以经过其它二个参数设置禁用的伪静态后缀:
‘URL_DENY_SUFFIX’ =>’html’
那种状态下访问http://123.56.183.226/index.php/Home/search/detail/3329061.html会出错。
URL_DENY_SUFFIX 的优先级比 UOdysseyL_HTML_SUFFIX 要高。
U昂科威L不区分轻重缓急写:
‘URL_CASE_INSENSITIVE’ =>true
那样是为了包容Think PHP编程规范和Linux环境(区分轻重缓急写)。
U帕杰罗L生成之U函数的采纳:
U(‘地址表达式’,[‘参数’],[‘伪静态后缀’],[‘突显域名’])
地方表明式:[模块/控制器/操作#锚点@域名]?参数1=值1&参数2=值2…
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’)
带伪静态后缀:U(‘Blog/cate’,’cate_id=1&status=1′,’xml’)
U函数会自动识别当前的URubiconL格局转变特定的URubiconL,包涵常见格局、PATHINFO方式等。
U函数协理路由规则。
U函数同时匡助域名和锚点,对应操作参考上面的表达式。
Ajax支持:
\Think\Controller 类里面包涵了尽善尽美的ajax帮衬函数,你能够动用ajaxReturn
函数举行前后端交互:
$data[‘status’] = 1;
$data[‘content’] = ‘content’;
$this->ajaxReturn($data);
而且,你可以设置Ajax的多寡重临格式:
$data[‘status’] = 1;
$data[‘content’] = ‘content’;
$this->ajaxReturn($data,’xml’);
上面这种方法ajax重临的数目是xml格式。
暗中同意的数额重临格式也是足以因此配备文件设置的:
页面跳转:
前边大家介绍了很多种的页面跳转方案,包涵在布局文件中跳转和在十三分处理页面中跳转,以往我们介绍一种新的页面跳转。那就是经过success函数和error函数。
1 $User = M('User'); //实例化User对象
2 $result = $User->add($data);
3 if($result){
4 //设置成功后跳转页面的地址,默认的返回页面是$_SERVER['HTTP_REFERER']
5 $this->success('新增成功', '/User/index');
6 } else {
7 //错误页面的默认跳转页面是返回前一页,通常不需要设置
8 $this->error('新增失败');
9 }
10
11 //操作完成3秒后跳转到 /Article/index
12 $this->success('操作完成','/Article/index',3);
13 //操作失败5秒后跳转到 /Article/error
14 $this->error('操作失败','/Article/error',5);
success和error方法的率先个参数表示提醒消息,第贰,个参数表示跳转地址,第一个参数是跳转时间。
有道是在安顿文件中安装默许的success跳转模板和error跳转模板:
//默许错误跳转对应的模板文件
‘TMPL_ACTION_ERROR’ => THINK_PATH . ‘Tpl/dispatch_jump.tpl’,
//暗中认可成功跳转对应的模版文件
‘TMPL_ACTION_SUCCESS’ => THINK_PATH . ‘Tpl/dispatch_jump.tpl’
页面重定向:
//重定向到New模块的Category操作,重定向到New模块Category操作,数组传参数,在当前页面停留五分钟
$this->redirect(‘New/category’, array(‘cate_id’ => 2), 5,
‘页面跳转中…’)
理所当然也可以一贯重定向到有些UTiggoL,这几个时候无需调用控制器的方法,只须要调用五个函数:
redirect(‘/New/category/cate_id/2’, 5, ‘页面跳转中…’)
变量获取:
get 获取GET参数
post 获取POST参数
param 自动判断请求类型获取GET、POST或然PUT参数
request 获取REQUEST 参数
put 获取PUT 参数
session 获取 $_SESSION 参数
cookie 获取 $_COOKIE 参数
server 获取 $_SERVER 参数
globals 获取 $GLOBALS参数
path 获取 PATHINFO模式的URL参数
data 获取其余品种的参数,必要同盟额外数据源参数
那个参数,大家可以透过正规的php函数获取,可是,Think
PHP提供了精锐的I函数,可以通用地得到上边的各样变量:
echo I(‘get.name’); // 相当于 $_GET[‘name’]
echo I(‘get.name’,’hello’); // 在不存在$_GET[‘name’]的时候回来hello
I(‘get.’); //获取具有的GET变量,注意get后边有个点。
echo I(‘get.name’,”,’htmlspecialchars’);
//采用htmlspecialchars方法对$_GET[‘name’]
举行过滤,尽管不设有则赶回空字符串
在PATHINFO格局下,能够按如下方法取得变量:
http://serverName/index.php/New/2013/06/01
echo I(‘path.1’); // 输出2013
echo I(‘path.2’); // 输出06
echo I(‘path.3’); // 输出01
data类型变量可以用于获取不支持的变量类型的读取。
上面所谓的变量过滤,实际上是足以在配置文件中布置的。所以在获取变量的时候,倘使不点名过滤规则,会动用暗许的变量过滤方案。
过滤规则可以设置为多少个:
‘DEFAULT_FILTER’ => ‘strip_tags,htmlspecialchars’
I(‘get.name’)等价于:htmlspecialchars(strip_tags($_GET[‘name’]))
自然,即便设置了DEFAULT_FILTEENCORE,大家也可以在I函数中指定过滤规则,那个时候就会忽略掉配置文件。实际上,这一定于介绍架构的时候小编讲过的,动态配置
I函数的第几个变量也足以调入函数名,那样就会动用相应的函数进行过滤。也可以动用正则说明式过滤。同时,还帮助其余部分过滤规则。(email等)
上边那三种艺术,代表不利用过滤规则,包涵安顿文件中的:
I(‘get.name’,”,”);
I(‘get.id’,”,false);
I函数还扶助参数类型转换:
举例:
I(‘get.id/d’); // 强制变量转换为整型
请求类型:
系统内置的央浼类型:
运用方法举例:
1 <?php
2 class UserController extends Controller
3 {
4 public function update(){
5 if(IS_POST){
6 $User = M('User');
7 $User->create();
8 $User->save();
9 $this->success('保存完成'); }
10 else{
11 $this->error('非法请求');
12 }
13 }
14 }
15 ?>
空操作:
目前介绍过前置函数和前置函数,以后牵线下空操作函数,举例:
1 <?php
2 namespace Home\Controller;
3 use Think\Controller;
4 class CityController extends Controller{
5 public function _empty($name){
6 //把所有城市的操作解析到city方法
7 $this->city($name);
8 } //注意 city方法 本身是 protected 方法
9 protected function city($name){
10 //和$name这个城市相关的处理
11 echo '当前城市' . $name;
12 }
13 }
14 ?>
URL:http://serverName/index.php/Home/City/beijing/
输出:当前都市beijing
空控制器:
和空操作类似,这里只给出示例代码:
1 <?php
2 namespace Home\Controller;
3 use Think\Controller;
4 class EmptyController extends Controller{
5 public function index(){
6 //根据当前控制器名来判断要执行那个城市的操作
7 $cityName = CONTROLLER_NAME;
8 $this->city($cityName);
9 }//注意 city方法 本身是 protected 方法
10 protected function city($name){
11 //和$name这个城市相关的处理
12 echo '当前城市' . $name;
13 }
14 }
15 ?>
http://serverName/index.php/Home/beijing/ 由于系统中并未beijing这几个控制器,所以会掉入空控制器。
插件控制器:
插件控制器是其余一种不根据前面URubiconL规则调用控制器的U奥迪Q7L规则,要求配备文件中VAOdyssey_ADDON
参数的协作,个人觉得,对于工程而言并非必须,反而简单使项目丧失整洁性。
操作绑定到类:
落到实处该功效需求配置:’ACTION_BIND_CLASS’ => True
http://serverName/Home/Index/index
index.class.php示例如下:
1 <?php
2 namespace Home\Controller\Index;
3 use Think\Controller;
4 class index extends Controller{
5 public function run(){
6 echo '执行Index控制器的index操作';
7 }
8 }
9 ?>
在操作绑定到类中,大家也得以只用前边介绍过的放手函数、前置函数、空操作和空控制器。只须要把前边的规则对应改为操作绑定到类的平整。