定义

ThinkPHP3.2版本提供了把每个操作方法定位到一个类的功能,可以让你的开发工作更细化,可以设置参数ACTION_BIND_CLASS,例如:

  1. 'ACTION_BIND_CLASS' => True,

设置后,我们的控制器定义有所改变,以URL访问为 http://serverName/Home/Index/index为例,原来的控制器文件定义位置为:

  1. Application/Home/Controller/IndexController.class.php

控制器类的定义如下:

  1. namespace Home\Controller;
  2. use Think\Controller;
  3. class IndexController extends Controller{
  4. public function index(){
  5. echo '执行Index控制器的index操作';
  6. }
  7. }

可以看到,实际上我们调用的是 Home\Controller\IndexController 类的index方法。

设置后,控制器文件位置改为:

  1. Application/Home/Controller/Index/index.class.php

控制器类的定义如下:

  1. namespace Home\Controller\Index;
  2. use Think\Controller;
  3. class index extends Controller{
  4. public function run(){
  5. echo '执行Index控制器的index操作';
  6. }
  7. }

现在,我们调用的其实是 Home\Controller\Index\index 类的run方法。

run方法依旧可以支持传入参数和进行Action参数绑定操作,但不再支持A方法实例化和R方法远程调用,我们建议R方法不要进行当前访问控制器的远程调用。

前置和后置操作

当设置操作方法绑定到类后,前置和后置操作的定义有所改变,只需要在类里面定义_before_run_after_run方法即可,例如:

  1. namespace Home\Controller\Index;
  2. use Think\Controller;
  3. class index extends Controller{
  4. public function _before_run(){
  5. echo 'before_'.ACTION_NAME;
  6. }
  7. public function run(){
  8. echo '执行Index控制器的index操作';
  9. }
  10. public function _after_run(){
  11. echo 'after_'.ACTION_NAME;
  12. }
  13. }

空控制器

操作方法绑定到类后,一样可以支持空控制器,我们可以创建 Application/Home/Controller/_empty目录,即表示如果找不到当前的控制器的话,会到_empty控制器目录下面定位操作方法。

例如,我们访问了URL地址 http://serverName/Home/Test/index,但并不存在 Application/Home/Controller/Test目录,但是有定义 Application/Home/Controller/_empty目录。

并且我们有定义:

  1. Application/Home/Controller/_empty/index.class.php

控制器定义如下:

  1. namespace Home\Controller\_empty;
  2. use Think\Controller;
  3. class index extends Controller{
  4. public function run(){
  5. echo '执行'CONTROLLER_NAME.'控制器的'.ACTION_NAME.'操作';
  6. }
  7. }

访问http://serverName/Home/Test/index后 输出结果显示:

  1. 执行Test控制器的index操作

大理石平台检验标准

空操作

操作绑定到类后,我们依然可以实现空操作方法,我们只要定义一个 Home\Controller\Index\_empty类,就可以支持Index控制器的空操作访问,例如: 控制器定义如下:

  1. namespace Home\Controller\Index;
  2. use Think\Controller;
  3. class _empty extends Controller{
  4. public function run(){
  5. echo '执行Index控制器的'.ACTION_NAME.'操作';
  6. }
  7. }

当我们访问http://serverName/Home/Index/test后 输出结果显示:

  1. 执行Index控制器的test操作
 

thinkphp 操作绑定到类的更多相关文章

  1. cocos2dx 2.x版本:简化提炼tolua++绑定自定义类到lua中使用

    cocos2dx的3.x版本已经提供了更好地绑定方式,网上有很多相关的教程,这里给一个链接:http://www.cocoachina.com/bbs/read.php?tid=196416. 由于目 ...

  2. Hibernate_day02--课程安排_主键生成策略_对实体类crud操作_实体类对象状态

    Hibernate_day02 上节内容 今天内容 实体类编写规则 Hibernate主键生成策略 实体类操作 对实体类crud操作 添加操作 根据id查询 修改操作 删除操作 实体类对象状态(概念) ...

  3. quick-cocos2d-x 创建自定义lua绑定c++类

    内容主要参考 “在quick-cocos2d-x中添加自定义的类给lua使用” ( http://www.codeo4.cn/archives/746) 1. quick-coco2d-x 使用 to ...

  4. jQuery-介绍 加载 选择器 样式操作 属性操作 绑定click事件

    jQuery - 介绍 加载 选择器 样式操作 属性操作 绑定click事件 注意:以下部分问题不能实现效果,因该是单词拼写错误(少个t)或者没有加引号(“swing”)... jquery介绍 jQ ...

  5. thinkphp 入口绑定

    入口绑定是指在应用的入口文件中绑定某个模块,甚至还可以绑定某个控制器和操作,用来简化URL地址的访问. 绑定模块 例如,我们定义了一个入口文件admin.php,希望可以直接访问Admin模块,那么我 ...

  6. disruptor笔记之三:环形队列的基础操作(不用Disruptor类)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  7. C#操作CSV存取类

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...

  8. cocos2dx lua 绑定之二:手动绑定自定义类中的函数

    cococs2dx 3.13.1 + vs2013 + win10 1.首先按照<cocos2dx lua 绑定之一:自动绑定自定义类>绑定Student类 2.在Student类中增加一 ...

  9. 自己封装的poi操作Excel工具类

    自己封装的poi操作Excel工具类 在上一篇文章<使用poi读写Excel>中分享了一下poi操作Excel的简单示例,这次要分享一下我封装的一个Excel操作的工具类. 该工具类主要完 ...

随机推荐

  1. linux每日命令(2):ps命令

    ps命令真是我比较常用的命令了,只是也没咋仔细研究过,最大的用处就是写代码的时候,起了多进程,就会占用多个进程,如果程序异常了,进程确没有kill掉,那么再启动程序就会报错 正常起项目 如果进程被占用 ...

  2. 关于js 重载

    拜读js忍者修炼一书 读到关于js函数重载内容这个模块 主要是介绍通过js的访问argument这个参数来实现js函数的重载 通过在函数内部进行判断js argument参数的长度 代码如下所示 va ...

  3. Linux fork创建子进程

    1.  pid_t fork(void); 功能:创建父子进程 参数:无 返回值:成功:在父进程中:返回值为子进程的PID 在子进程中:返回值为0 失败:-1 注意: 1)fork函数是用来创建进程的 ...

  4. 随笔记录 误删boot恢复 2019.8.7

    系统还原: 1. 2. 3. 4. 5.进入硬盘 6.挂载光盘,安装恢复boot 7.安装grub2 8.重建grub.cfg文件  

  5. react 使用触摸事件

    react开发支持的事件中,onClick事件,部分标签不支持点击,只能onTouchEnd,但是在移动端,手指触碰到事件绑定元素上,滑动,也会触发该事件,故来share解决办法,有更好的方法,欢迎评 ...

  6. 47. List中特有的方法

    集合的体系:--------------| Collection  单列集合的根接口----------| List 如果实现了List接口的集合类,该类具备的特点是:有序,可重复---------- ...

  7. Ruby 数据类型

    Ruby 数据类型 本章节我们将为大家介绍 Ruby 的基本数据类型. Ruby支持的数据类型包括基本的Number.String.Ranges.Symbols,以及true.false和nil这几个 ...

  8. Redis缓存数据库常见操作

    Jedis的最为常见的操作.主要包括常用的列表(list).集合(set).有序集合(sorted set).哈希表(hash)等数据结构,以及其他特性支持. 参考资料:http://hello-ni ...

  9. vue.js 2.0 --- 安装node环境,webpack和脚手架(入门篇)

    1.环境搭建 1.1.安装node.js 1.2 安装过程很简单,一路“下一步”就可以了.安装完成之后,打开命令行工具(win+r,然后输入cmd),输入 node -v,如下图,如果出现相应的版本号 ...

  10. [JZOJ 5810] 简单的玄学

    思路: 就是考虑一个结论 对于\(1<=x<=2^n\),那么\(x\)与\(2^n - x\)中的2的个数相等. 证明: 我们将\(x\)表示成\(2^k*b\),那么\(2^n - x ...