ThinkPHP调节器详解,ThinkPHP开辟笔记

1、上边正是四个卓绝群伦的支配器类的定义:

在上一科目中,你恐怕会对ThinkPHP的路由会有一小点疑忌,然而没什么,学完本课程,比较多事都会发聋振聩。

这里记录的是自己学习的thinkPHP笔记官方开辟手册

1.定义调整器

<?php  namespace Home\Controller;  use Think\Controller;  class IndexController extends Controller {      public function hello(){          echo 'hello,thinkphp!';      }  }  ?>

调节器文件命名遵循IndexController.class.php的法门

工程目录www WEB计划目录├─index.php 入口文件├─README.md
README文件├─Application 应用目录├─Public 财富文件目录└─ThinkPHP
框架目录TP框架结构├─ThinkPHP 框架系统目录(能够安顿在非web目录上面)│
├─Common 核心公共函数目录│ ├─Conf 主题配置目录│ ├─Lang 大旨语言包目录│
├─Library 框架类库目录│ │ ├─Think 大旨Think类库包目录│ │ ├─Behavior
行为类库目录│ │ ├─Org Org类库包目录│ │ ├─Vendor 第三方类库目录│ │ ├─ …
越多类库目录│ ├─Mode 框架应用格局目录│ ├─Tpl 系统模板目录│ ├─LICENSE.txt
框架授权协议文件│ ├─logo.png 框架LOGO文件│ ├─README.txt 框架README文件│
└─ThinkPHP.php 框架入口文件

貌似的话,ThinkPHP的调节器是一个类,而操作则是决定器类的一个公物措施

当访问 http://serverName/index.php/Home/Index/hello 后会输出:

调整器的概念

从3.2发端TP暗许给大家提供了多少个一度安顿好的入口文件和三个应用程序目录,应用程序目录是空的,当您首先在浏览器中输入”localhost/工程名称/”的时候会在application目录自动生成多个程序,目录如下:

调整器日常须求后续系统的Controller类恐怕其子类,举例,上边定义了二个
\Home\Controller\IndexController 调整器类:

hello,thinkphp!

在起首在此以前,大家照旧要求鲜美素佳儿(Aptamil)下调控器的概念:

Application├─Common 应用公共模块│ ├─Common 应用公共函数目录│ └─Conf
应用公共配置文件目录├─Home 暗中认可生成的Home模块│ ├─Conf 模块配置文件目录│
├─Common 模块函数公共目录│ ├─Controller 模块调控器目录│ ├─Model
模块模型目录│ └─View 模块视图像和文字件目录├─Runtime 运转时目录│ ├─Cache
模版缓存目录│ ├─Data 数据目录│ ├─Logs 日志目录│ └─Temp 缓存目录

<?php  namespace Home\Controller;  use Think\Controller;    class IndexController extends Controller {      public function hello(){          echo 'hello';      }          public function test(){          echo 'test';     }  }  ?>

2、Action参数绑定。参数绑定效率私下认可是翻开的,原理是把U中华VL中的参数和操作方法中的参数进行绑定。参数绑定有二种办法:依照变量名绑定和遵守变量顺序绑定。

<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {

  public function read($id){
    echo "read page with </br>" .$id;
  }

  public function top(){
    echo "top page </br>";
  }

}

ThinkPHP调节器详解,ThinkPHP开辟笔记。TP命名选用驼峰法命名,对于类名首字母要大写,对于M类和C类要有Model后缀和Controller后缀。

调整器的称呼选拔驼峰法命名(首字母大写),操作方法的概念必须是共用措施,不然会报操作错误。

(1)默许的参数绑定格局是依据变量名实行绑定,比方,我们给Blog调控器定义了个操作方法archive方法:

如所见,后面在路由篇涉嫌的调控器便是那样定义的:

  1. 对于调节器类:类名+Controller.class.php 并且一而再自extends
    Controller只怕Controller的子类
  2. 对此模型类:类名+Model.class.php 而且继续自extends
    Model大概Model的子类
  3. 对于视图像和文字件名:Home/View/模块名(以对应调控器命名的文书夹)/视图名(以对应调控器中要显得该视图函数的称呼命名)

IndexController调整器类的hello和test方法正是操作方法,通过下边包车型大巴U本田CR-VL地址访谈调整器方法:

namespace Home\Controller;  use Think\Controller;  class BlogController extends Controller{        public function archive($year='2013',$month='01'){          echo 'year='.$year.'&month='.$month;      }  }

选取相应的命名空间,暗中认可是namespace Home\Controller
加载Think\Controller
新建调整器承袭于Controller(或子类)
选用驼峰命名法,注意首字母大写
调整器内的公共措施能够用作三个操作,譬如上面的read()和top()方法就能够当作操作,大家在路由篇的时候都印证过了。

注:对于视图像和文字件的命名格局得以随心所欲,不过在调整器中展现该视图的函数中display方法将要带有参数了,参数的章程有多中诸如:对应调控器sunleiController.class.php
视图的门径为:/Home/View/long/add.html调控在那之中有三个艺术sun(),此方法中的display要求如此写$this->display(‘long:add’);,这种艺术不是独步一时的,也得以用其余情势的参数在浏览器中输入localhost/工程名/index.php/sunlei/sun
就能够

http://serverName/Home/Index/hello

U帕杰罗L的拜谒地址是:

不怕访谈到top()方法,会在页面上打字与印刷出top page
,再度生硬Home代表的是Home模块

名称 描述
应用 基于同一个入口文件访问的项目我们称之为一个应用。
模块 一个应用下面可以包含多个模块,每个模块在应用目录下面都是一个独立的子目录,包含配置文件,MVC文件等,3.2以后默认生成一个Home模块。
控制器 每个模块可以包含多个控制器,一个控制器通常体现为一个控制器类。
操作 每个控制器类可以包含多个操作方法,也可能是绑定的某个操作类,每个操作是URL访问的最小单元。

http://serverName/Home/Index/test

http://serverName/index.php/Home/Blog/archive/year/2013/month/11

突发性大概会碰到有和系统的要紧字争辨的点子,那时候就足以使用安装操作方法后缀来减轻了,具体请看官方文档:

模块化设计的思索上边,模块是最主要的部分,模块其实是三个分包配置文件、函数文件和MVC文件的集聚。

 

遵从变量名实行参数绑定的参数必须和URubiconL中流传的变量名称一样,可是参数顺序无需平等。

嵌入和前置操作

合法链接:

2.实例化调整器

假若选取上边包车型客车U索罗德L地址举办访谈,参数绑定依旧有效:

停放和前置操作指的是在进行有个别操作方法以前和后来会活动调用的法子,可是仅对拜访调节器有效,如在IndexController中为top()方法增加前置前置方法:

设若我们平素访问入口文件的话,由于U奥迪Q5L中从不模块名、调控器名称(不富含Controller后缀)和操作名称,因而系统会访谈默许模块下边包车型大巴默许调节器的暗中认可操作,因而下边的访谈是一致的:

访谈调节器的实例化日常是机动完毕的,系统会基于URubiconL地址分析出国访问问的调整器名称自动实例化,况兼调用相关的操作方法。

http://serverName/index.php/Home/Blog/archive/month/11/year/2013  http://serverName/index.php?s=/Home/Blog/archive/year/2013/month/11  http://serverName/index.php?c=Blog&a=archive&year=2013&month=11
public function _before_top(){
    echo "before top page </br>";
  }
  public function top(){
    echo "top page </br>";
  }
  public function _after_top(){
    echo "after top page </br>";
  }

地点这种ULANDL形式正是系统私下认可的PATHINFO形式,也是最常用的方式,不一致的U揽胜L形式获得模块和操作的法门区别,ThinkPHP辅助的U凯雷德L形式有各个:普通格局、PATHINFO、REWWranglerITE和同盟方式,能够安装UTucsonL_MODEL参数改动U揽胜L形式。

假如你需要跨调节器调用的话,则能够单独实例化:

(2)按变量顺序绑定。这种情形下U福睿斯L地址中的参数顺序非常关键,无法轻巧调治。要遵从变量顺序进行绑定,必须先安装URL_PARAMS_BIND_TYPE为1:

访问:

URL模式 URL_MODEL设置
普通模式 0
PATHINFO模式 1
REWRITE模式 2
兼容模式 3
// 实例化Home模块的User控制器  $user = new \Home\Controller\UserController();
'URL_PARAMS_BIND_TYPE'  =>  1, // 设置参数绑定按照变量顺序绑定

就拜候到打印出:

举个例子你整整应用上边包车型地铁模块都是选择统一的UEscortL情势,就能够在应用的安顿文件中设置U奥迪Q7L形式,倘使差异的模块要求安装分歧的USportageL格局,则能够在模块的安插文件中安装。

系统为地点的调整器实例化提供了三个高速调用方法A,上面包车型大巴代码能够简化为:

操作方法的概念没有要求转移,URubiconL的会见地址改成:

before top page
top page
after top page

五、函数参数的绑定

参数绑定成效默许是敞开的,其规律是把UHavalL中的参数(不包罗模块、调节器和操作名)和操作方法中的参数进行绑定。要启用参数绑定功效,首先保障您开启了UWranglerL_PARAMS_BIND设置:’URL_PARAMS_BIND’
=> true, // U福特ExplorerL变量绑定到操作方法作为参数

参数绑定有三种方法:依据变量名绑定和遵循变量顺序绑定。

专注:对于满含参数的函数,要是U昂科威L未有传到对应的参数值,则会报错,为制止报错大家能够给函数设置贰个默许值如:public
function read{echo ‘id=’.$id;}

// 假设当前模块是Home模块  $user = A('User');   $blog = A('Admin/Blog');
http://serverName/index.php/Home/Blog/archive/2013/11

采纳前置和前置操作要专注如下两点:

六、伪静态

UENVISIONL伪静态经常是为着满足更加好的SEO效果,ThinkPHP协助伪静态U安德拉L设置,能够通过安装URAV4L_HTML_SUFFIX参数随目的在于U福特ExplorerL的终极扩大你想要的静态后缀,而不会潜濡默化当下操作的正规实施。比如,大家设置

‘URL_HTML_SUFFIX’=>’shtml’

的话,大家得以把上面包车型大巴UMuranoL 变成

‘URL_HTML_SUFFIX’=>”

则能够接济全体的静态后缀,而且会记录当前的伪静态后缀到常量 EXT
,但不会影响正常的页面访谈。举例:

都足以健康访谈,如果要博安妥前的伪静态后缀,通过常量 EXT
获取就能够。假若指望援救几个伪静态后缀,能够直接设置如下:

// 三个伪静态后缀设置 用|分割’U讴歌MDXL_HTML_SUFFIX’ => ‘html|shtml|xml’

那么,当访问
的时候会报系统错误。能够安装禁止访谈的U中华VL后缀,比如:’U翼虎L_DENY_SUFFIX’
=> ‘pdf|ico|png|gif|jpg’, // UEvoqueL禁止访问的后缀设置

设若采访
就能够直接回到404张冠李戴。注意:U锐界L_DENY_SUFFIX的预先级比URubiconL_HTML_SUFFIX要高。

 

若果操作方法定义都不带任何参数,能够关闭参数绑定作用:

假定当前的操作并不曾定义操作方法,而是径直渲染模板文件,那么只要定义了安放和前置方法的话,照旧会收效。真正有模板输出的或许独自是当前的操作,前置和前置操作一般景况是不曾任何输出的。

七、UCRUISERL的分寸写标题

对此Windows来讲ULANDL是不区分轻重缓急写的,但是在Linux下是分别轻重缓急写的,但是TP框架给了大家布署的义务,咱们得以经过布置’UExigeL_CASE_INSENSITIVE’
=>true来达到在其余平台下都不区分轻重缓急写

此地需求小心三个地点,一旦开启了不区分U中华VL大小写后,即使大家要拜谒类似UserTypeController的调节器,那么无误的UCRUISERL访谈应该是://
正确的拜谒地址
错误的拜望地址

采纳系统提供的U方法可认为您自动生成相关的U逍客L地址。

如若设置’U途乐L_CASE_INSENSITIVE’ =>false

的话,UMuranoL就又成为:

提出依然习于旧贯性的分别轻重缓急写吧,系统暗许的正规化是基于UPRADOL里面的模块名、调节器名来定位到实际的垄断器类的,进而实践调整器类的操作方法。

在MVC三层中,ThinkPHP并不依赖M只怕V,以致足以只有C也许唯有V,那一个在ThinkPHP的宏图之中是贰个很要紧的用户体验设计,用户只需求定义视图,在并未有C的情景下也能自动识别。

3.停放和前置操作

'URL_PARAMS_BIND'       =>  false

须要细心的是,在有一些措施里面使用了exit或然失实输出之类的话
有相当大希望不会再实施后置方法了。举个例子,如若在时下操作里面调用了系统Action的error方法,那么将不会再施行前置操作,然则不影响success方法的前置方法试行

八、库文件自动加载的种种

在其实的采取类库加载进度中,往往会涉及到活动加载的预先级难点,以Test\MyClass类为例,自动加载的前期顺序如下:1.判别是还是不是有注册了Test\MyClass类库映射,倘诺有则自动加载类库映射定义的文书;2.推断是还是不是存在Library/Test目录,有则以该目录为始发目录加载;3.推断是或不是有注册Test根命名空间,有则以登记的目录为开头目录加载;4.假诺以上都不创造,则以Test为模块目录举行初叶目录加载;5.然后以地方获得到的启幕目录加载命名空间对应路线的文件;

内置和前置操作指的是在实行有个别操作方法此前和现在会自动调用的措施,但是仅对拜会调控器有效。

3、U中华VL生成。为了同盟所运用的U奥迪Q5L情势,须要基于最近的U奥迪Q5L设置生成对应的UXC60L地址,为此,ThinkPHP内置提供了U方法,用于U途乐L的动态变化,能够保证项目在移植进度中不受意况的震慑。U方法的定义准绳如下:

能够用于表单的过滤和表明

九、TP常用函数

  1. U函数用于获取U奥迪Q5L的:U()

U('/Admin/Insert/insert@localhost’)
  1. C函数此前的格局都是透过事先定义配置文件的方法,而在实际的操作方法里面,大家依旧能够对一些参数举行动态配置,重假若指这么些还从未被选拔的参数。设置新的值:C(‘参数名称’,’新的参数值’)动态配置赋值仅对当下乞请有效,不会对之后的乞请形成影响。获取已设置的安顿参数的值:

$config = C;
  1. A函数暗中同意情形下,A方法实例化的是暗中同意调节器层(Controller)借使调整器有分支调控器,要实例化分层调控器的话,则写二级模块名,否则第4个参数能够忽略A(‘模块名/调控器名’,’二级模块名’)寻访调控器(暗中认可是Home,能够设置)的实例化日常是电动完毕的,系统会依赖UENVISIONL地址分析出国访问谈的调节器名称自动实例化,并且调用相关的操作方法。假若你需求跨调控器调用的话,则足以独立实例化:

// 实例化Home模块的User控制器$User = new \Home\Controller\UserController();// 实例化Admin模块的Blog控制器$Blog = new \Admin\Controller\BlogController();

系统为地点的调整器实例化提供了二个飞快调用方法A,上边的代码能够简化为:

// 假设当前模块是Home模块$User = A; $Blog = A('Admin/Blog');

私下认可处境下,A方法实例化的是暗中认可调节器层(Controller),倘让你要实例化别的的分层控制器的话,能够使用:

// 假设当前模块是Home模块// 实例化Event控制器$User = A('User','Event'); $Blog = A('Admin/Blog','Event');

地点的代码等效于:

// 实例化Home模块的User事件控制器$User = new \Home\Event\UserEvent();// 实例化Admin模块的Blog事件控制器$Blog = new \Admin\Event\BlogEvent();

内置和前置操作的概念格局如下:

U('地址表达式',['参数'],['伪静态后缀'],['显示域名'])

参数绑定

<?php  namespace Home\Controller;  use Think\Controller;  class IndexController extends Controller{      //前置操作方法      public function _before_index(){          echo 'before<br/>';      }      public function index(){          echo 'index<br/>';      }      //后置操作方法      public function _after_index(){          echo 'after<br/>';      }  }

地点表明式、参数、伪静态后缀的格式请参谋文书档案:

参数绑定是通过直接绑定UCR-VL地址中的变量作为操作方法的参数,能够简化方法的定义乃至路由的分析。

一经大家寻访 http://serverName/index.php/Home/Index/index 结果会输出

基于项目标差别URL设置,同样的U方法调用能够智能地呼应发生不一样的U纳瓦拉L地址效果,比方对于:

'URL_PARAMS_BIND'    => true

before
index
after

U('Blog/read?id=1');

参数绑定功用暗中认可是打开的,其规律是把U大切诺基L中的参数(不包蕴模块、调节器和操作名)和操作方法中的参数进行绑定。
参数绑定有二种办法:依据变量名绑定和遵从变量顺序绑定,默许使用的是奉公守法变量名绑定,譬喻看上边包车型客车事例:

 

一经当前URubiconL设置为一般格局以来,最后生成的U奥迪Q5L地址是:

 public function read($id){
    echo "read page with </br>".$id;
  }

 public function archive($year, $month){
    echo "$year </br>".$month;
  }

4.Action参数绑定

http://serverName/index.php?m=Blog&a=read&id=1

对,这一个就是上一篇路由所关联的内容,在前边路由的路由设置处

参数绑定作用默许是敞开的,其规律是把UHavalL中的参数(不满含模块、调节器和操作名)和操作方法中的参数举办绑定。

若是当前U纳瓦拉L设置为PATHINFO情势的话,一样的不二法门最终身成的U锐界L地址是:

‘blogs/:id’               => array(‘Index/read’)
笔者们将:id直接照射给read()方法的参数$id,所以现在回头再看,其实路由法则正是给了您一个自定义UCRUISERL的效应。借使去掉下边包车型大巴路由设置,我们科学的走访形式是:

要启用参数绑定功效,首先保险您张开了URL_PARAMS_BIND设置:

http://serverName/index.php/Home/Blog/read/id/1

'URL_PARAMS_BIND' => true, // URL变量绑定到操作方法作为参数

一经当前UEscortL设置为REW索罗德ITE情势以来,同样的法子最平生成的U奥迪Q3L地址是:

地点的UTucsonl中id就是变量名,借使您写成:

暗中认可的参数绑定格局是遵照变量名举行绑定,比如:

http://serverName/Home/Blog/read/id/1
 public function read($title){
    echo "read page with </br>".$title;
  }
namespace Home\Controller;  use Think\Controller;  class BlogController extends Controller{      public function read($id){          echo 'id='.$id;      }        public function archive($year='2013',$month='01'){          echo 'year='.$year.'&amp;month='.$month;      }  }

一经当前U凯雷德L设置为REW福特ExplorerITE格局,而且安装了伪静态后缀为.html的话,同样的不二秘诀最后生成的U奥迪Q5L地址是:

那么访谈地址正是:

当访问URL地址:

http://serverName/Home/Blog/read/id/1.html

http://serverName/index.php/Home/Blog/read/id/5

UEscortL方式的介绍请参见文书档案:

对此三个参数绑定的事态,只要将相应的变量名和值传进来就足以了,不在乎顺序,比如下边两个会回来相同的结果:

http://serverName/index.php/Home/Blog/archive/year/2013/month/11

3、获取变量。就算您照旧能够在付出进度中央银行使古板办法赢得各个系统变量,譬喻:

八个U中华VL地址中的id参数和year和month参数会活动和read操作方法以及archive操作方法的同名参数绑定。

$id    =  $_GET['id']; // 获取get变量  $name  =  $_POST['name'];  // 获取post变量  $value =  $_SESSION['var']; // 获取session变量  $name  =  $_COOKIE['name']; // 获取cookie变量  $file  =  $_SERVER['PHP_SELF']; // 获取server变量

根据变量名举行参数绑定的参数必须和UEvoqueL中传出的变量名称相同,可是参数顺序无需一致。

而是我们不建议间接选拔古板办法取得,因为尚未统一的平安管理机制,前期若是调解的话,改起来会比较辛勤。所以,越来越好的办法是在框架中集结行使I函数实行变量获取和过滤。I方法是ThinkPHP用于特别惠及和河池的拿走系统输入变量,能够用于其余地点,我们以GET变量类型为例,表明下I方法的施用:

亟待专注的是,不管这种状态之下,当您拜望

借使选用上面包车型地铁U翼虎L地址进行访谈,参数绑定如故有效:

echo I('get.id'); // 相当于 $_GET['id']  echo I('get.name'); // 相当于 $_GET['name']

是会报错的:

http://serverName/index.php?c=Blog&a=read&id=5

 

参数错误只怕未定义:id
杀鸡取蛋的三个好措施正是,给绑定的参数设置私下认可值,譬喻:

http://serverName/index.php?c=Blog&a=archive&year=2013&month=11


 public function read($id=0){
    echo "read page with </br>".$id;
  }

假设用户访问的ULANDL地址是:

这么重复拜访上边的UHighlanderL,就能够输出:

http://serverName/index.php/Home/Blog/read/

read page with
0

那便是说会抛出上边的要命提醒: 参数错误:id

tips:给绑定参数设置默许值是二个制止报错的好格局
在实质上的开支中,大家实际会看出未有出示变量名那样的URAV4L,如:

报错的缘故很简短,因为在实践read操作方法的时候,id参数是必须传入参数的,但是方法不恐怕从U索罗德L地址中收获科学的id参数音讯。由于我们不可能相信用户的其余输入,由此建议你给read方法的id参数增加暗中认可值,比如:

public function read($id=0){        echo 'id='.$id;  }

怎么消除呢?这一年,大家其实就能够用到第三种参数绑定:依照变量顺序绑定。要选用这种参数绑定,必要先在安装项中安装:

始终给操作方法的参数定义暗中同意值是二个防止报错的好措施。

'URL_PARAMS_BIND_TYPE' => 1

 

假若设置变量顺序绑定,这种情况下U揽胜L地址中的参数顺序相当的重大,不能够自由调度。这种情景下操作方法的定义无需退换,只是访谈的U途胜L变了罢了,以往用地点的艺术访谈就足以准确访谈了。

其次种格局是依照变量的依次绑定,这种情状下ULANDL地址中的参数顺序极其首要,无法自由调治。要依据变量顺序实行绑定,必须先安装URL_PARAMS_BIND_TYPE为1:

比如在变量顺序绑定的情事下,我们访谈:

'URL_PARAMS_BIND_TYPE' => 1, // 设置参数绑定按照变量顺序绑定

操作方法的定义不供给改换,UENVISIONL的拜候地址分别改成:

http://serverName/index.php/Home/Blog/read/5

那四个结实断定是不相同等,后面一个并不是大家想要的。所以这种景观需求从严遵守顺序来传值。

http://serverName/index.php/Home/Blog/archive/2013/11

伪静态

 

U凯雷德L伪静态常常是为了满意越来越好的SEO效果,ThinkPHP帮忙伪静态U昂CoraL设置,能够由此设置U瑞鹰L_HTML_SUFFIX参数随便在UCRUISERL的终极增加你想要的静态后缀,而不会耳熏目染当下操作的寻常实践,暗许处境下,伪静态的装置为html。但大家能够团结设置,举例

5.AJAX返回

‘URL_HTML_SUFFIX’=>’shtml’

系统的\Think\Controller类提供了ajaxReturn方法用于AJAX调用后回到数据给客户端。并且协理JSON、JSONP、XML和EVAL二种办法给客户端接受多少,而且扶助配置别的格局的数量格式再次回到。要是是EVAL情势的话,只会输出字符串data数据。

一经期望扶助多少个伪静态后缀,能够平素设置如下:

ajaxReturn方法调用示例:

‘URL_HTML_SUFFIX’ => ‘html|shtml|xml’

$data['status']  = 1;  $data['content'] = 'content';  $this->ajaxReturn($data);

要是此项设置留空则意味能够辅助具有的静态后缀。

暗许配置使用JSON格式再次来到数据(通过配备DEFAULT_AJAX_RETURN实行设置),大家能够钦命格式再次回到,比如:

也得以设置禁止访问的UPAJEROL后缀通过U奥迪Q5L_DENY_SUFFIX来设置,例如:

// 指定XML格式返回数据  $data['status']  = 1;  $data['content'] = 'content';  $this->ajaxReturn($data,'xml');

‘URL_DENY_SUFFIX’ => ‘pdf|ico|png|gif|jpg’,
注: URL_DENY_SUFFIX的预先级比UEscortL_HTML_SUFFIX要高。

暗中同意的JSONP格式重返的管理情势是jsonpReturn,假诺您采取不相同的措施,能够安装:

URL生成

'DEFAULT_JSONP_HANDLER' => 'myJsonpReturn', // 默认JSONP格式返回的处理方法

为了合作所利用的UGL450L形式,大家须求能够动态的依照近期的UWranglerL设置生成对应的ULANDL地址,为此,ThinkPHP内置提供了U方法,用于U奥迪Q7L的动态变化,能够确认保障项目在移植进度中不受情况的震慑。

恐怕间接在页面中用callback参数来钦点。

概念法则

如下:

U方法的定义法则如下(方括号内部仿照效法信息数根据实际使用决定):
U(‘地址表明式’,[‘参数’],[‘伪静态后缀’],[‘彰显域名’])

输出为:

地点表明式

jsCallback({"name":"\u5468\u5bcc\u6c11","age":26});

地方表达式的格式定义如下:

 

[模块/控制器/操作#锚点@域名]?参数1=值1&参数2=值2…
若果不定义模块的话 就象征近期模块名称,下边是有的粗略的事例:

6.跳转和重定向

U(‘User/add’) // 生成User调节器的add操作的U奥迪Q5L地址
U(‘阿特icle/read?id=1’) // 生成阿特icle调整器的read操作
况兼id为1的UPRADOL地址
U(‘Admin/User/select’) //
生成Admin模块的User调控器的select操作的U奥迪Q5L地址

系统的\Think\Controller类内置了三个跳转方法success和error,用于页面跳转提醒,况且能够帮忙ajax提交。

参数

success和error方法的首先个参数表示提醒新闻,第三个参数表示跳转地址,第多少个参数是跳转时间(单位为秒),举例:

U方法的第一个参数帮助数组和字符串二种概念情势,如若只是字符串格局的参数能够在首先个参数中定义,举个例子:

// 操作完成3秒后跳转到 /Article/index  $this->success('操作完成',U('/Article/index'),3);  // 操作失败5秒后跳转到 /Article/error  $this->error('操作失败',U('/Article/error'),5);
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')

跳转地址是可选的,success方法的暗中同意跳转地址是$_SERVER["HTTP_REFERER"],error方法的暗许跳转地址是javascript:history.back(-1);

三种艺术是均等的,都以生成Article调节器的cate()操作 并且cate_id为1
status为1的URL地址

暗中认可的等候时间success方法是1秒,error方法是3秒

只是不允许利用上边包车型大巴定义形式来传参数:

success和error方法会自动判别当前呼吁是还是不是属于Ajax央求,若是属于Ajax央浼则会调用ajaxReturn方法再次来到音讯。
ajax方式下边,success和error方法会封装下边的数据重临:

U('Article/cate/cate_id/1/status/1');
$data['info']   =   $message; // 提示信息内容  $data['status'] =   $status;  // 状态 如果是success是1 error 是0  $data['url']    =   $jumpUrl; // 成功或者错误的跳转地址

生成路由地点

Controller类的redirect方法能够兑现页面包车型客车重定向功效。

U方法还足以补助路由,如若大家定义了四个路由准则为:

redirect方法的参数用法和U函数的用法一致,比如:

'blogs/:id\d'=>'Index/read'
//重定向到New控制器的Category操作  $this->redirect('New/category', array('cate_id' => 2), 5, '页面跳转中...');

那正是说能够运用

亚洲必赢官网, 

U('/blogs/1');

7.URL生成

终极生成的U昂科雷L地址是:

ThinkPHP内置提供了U方法,用于UKoleosL的动态变化,可以确定保障项目在移植进程中不受情状的熏陶。

U方法的概念准则如下(方括号内部参照他事他说加以考察新闻数根据实际应用决定):

跳转和重定向

     U(‘地址表明式’,[‘参数’],[‘伪静态后缀’],[‘呈现域名’])

那应当是在付出中最常用的遵守之一。在使用开采中,平日会遇上某些包罗提示消息的跳转页面,举例操作成功照旧操作不当页面,而且自动跳转到另外一个指标页面。系统的\Think\Controller类内置了七个跳转方法success()和error(),用于页面跳转提醒。

地点表达式的格式定义如下:

跳转

[模块/控制器/操作#锚点@域名]?参数1=值1&参数2=值2...

行使格局很轻巧,比方我们在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');
    }
  }
U('User/add'); // 生成User控制器的add操作的URL地址  U('Blog/read?id=1'); // 生成Blog控制器的read操作 并且id为1的URL地址  U('Admin/User/select'); // 生成Admin模块的User控制器的select操作的URL地址

M(‘User’)表示实例化贰个User对象,add()方法是向数据库增多一条纪录。然后我们要求新建叁个UserController,在中间写上addUser()方法

U方法的第3个参数协助数组和字符串两种概念格局,如若只是字符串格局的参数能够在率先个参数中定义,举个例子:

<?php
namespace Home\Controller;

use Think\Controller;

class UserController extends Controller {

  public function addUser()
  {
    echo 'add user done!';
  }
}
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');

然后在浏览器中访问,就能够看来add
user done!了,下边详细来讲说这四个重定向方法。

留意:如若您是在模板文件中平素使用U方法的话,必要使用 {:U(‘参数1’,
‘参数2’…)} 的点子。

success()和error()方法的首先个参数表示提示信息,首个参数表示跳转地址,第七个参数是跳转时间(单位为秒),例如:


// redirect to /Article/index after 3 seconds when success
$this->success('done','/Home/Article/index',3);
// redirect to /Article/error after 5 seconds when failed
$this->error('failed','/Home/Article/error',5);

假定不安装跳转时间,暗中同意的等待时间success()方法是1秒,error()方法是3秒。看到地点的四个跳转地址前面都带上了/Home,假若您想简写为/Article/index,你需求在ThinkPHP的入口文件(项目目录下的index.php)中加上上边一行:

define('BIND_MODULE','Home');

并且那三个格局都有对应的模板,暗中同意的安装是五个法子对应的沙盘都以:

‘TMPL_ACTION_ERROR’ => THINK_PATH . ‘Tpl/dispatch_jump.tpl’,

‘TMPL_ACTION_SUCCESS’ => THINK_PATH . ‘Tpl/dispatch_jump.tpl’,
您可以根据自身的急需来修改模版。

重定向

Controller类的redirect()方法能够兑现页面包车型地铁重定向功效。
redirect()方法的参数用法和U函数的用法一致(参谋上部分UWranglerL生成都部队分),比如:

$this->redirect(‘/Home/Article/show’, array(‘id’ => 2), 3,
‘Redirecting…’);
上边的用法是栖息3秒后跳转到Article调节器的show()操作,并且展现页面跳转中字样Redirecting…,重定向后会退换近年来的UKugaL地址。

为了成功开展测量检验,我们在IndexController下加多redirectToArticle()方法并写上地方那行代码:

public function redirectToArticle()
  {
    $this->redirect('/Home/Article/show', array('id' => 2), 3, 'Redirecting...');
  }

接下来我们成立一个ArticleController,而且为他增添show()方法:

namespace Home\Controller;

use Think\Controller;

class ArticleController extends Controller {

  public function show($id)
  {
    echo 'This is an Article Page';
    // $id 变量我们后续会用到,现在只是演示跳转
  }
}

下一场在浏览器访谈:,等待三秒,你就可以看来跳转之后的页面了。

假使您偏偏是想重定向要一个点名的U卡宴L地址,并非到有个别模块的操作方法,能够直接动用redirect()函数重定向,比如

$this->redirect(‘/Home/Article/show/id/3’, ‘Redirecting…’,3);

注:调整器的redirect()方法和redirect()函数的区分在于前面叁个是用U福特ExplorerL法则定义跳转地址,前面一个是二个纯粹的UEnclaveL地址
注:好像官方文书档案是那般写的

$this->redirect(‘/New/category/cate_id/2’, 5, ‘页面跳转中…’);

以上所述正是本文的全体内容了,希望大家能够欣赏。

您恐怕感兴趣的篇章:

  • ThinkPHP调节器间达成互动调用的艺术
  • thinkphp3.2实现跨调控器调用其余模块的办法
  • thinkphp调整器调治使用示例
  • thinkphp3.2达成上传图片的调控器方法
  • ThinkPHP3.2.2的插件调控器效率简述
  • 初识ThinkPHP控制器
  • Thinkphp
    空操作、中央空调整器、命名空间(详解)
  • 宏观化解在ThinkPHP调整器中命名空间的主题材料
  • thinkPHP通用调控器完成格局现身说法
网站地图xml地图