## 定义

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

~~~

'ACTION_BIND_CLASS' => True,

~~~

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

~~~

Application/Home/Controller/IndexController.class.php

~~~

控制器类的定义如下:

~~~

namespace Home\Controller;

use Think\Controller;

class IndexController extends Controller{

public function index(){

echo '执行Index控制器的index操作';

}

}

~~~

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

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

~~~

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

~~~

控制器类的定义如下:

~~~

namespace Home\Controller\Index;

use Think\Controller;

class index extends Controller{

public function run(){

echo '执行Index控制器的index操作';

}

}

~~~

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

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

## 前置和后置操作

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

~~~

namespace Home\Controller\Index;

use Think\Controller;

class index extends Controller{

public function _before_run(){

echo 'before_'.ACTION_NAME;

}

public function run(){

echo '执行Index控制器的index操作';

}

public function _after_run(){

echo 'after_'.ACTION_NAME;

}

}

~~~

## 空控制器

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

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

并且我们有定义:

~~~

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

~~~

控制器定义如下:

~~~

namespace Home\Controller\_empty;

use Think\Controller;

class index extends Controller{

public function run(){

echo '执行'CONTROLLER_NAME.'控制器的'.ACTION_NAME.'操作';

}

}

~~~

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

~~~

执行Test控制器的index操作

~~~

## 空操作

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

~~~

namespace Home\Controller\Index;

use Think\Controller;

class _empty extends Controller{

public function run(){

echo '执行Index控制器的'.ACTION_NAME.'操作';

}

}

~~~

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

~~~

执行Index控制器的test操作

~~~

php tp3 操作绑定到类,操作绑定到类 · ThinkPHP3.2.3完全开发手册 · 看云相关推荐

  1. php tp3.2 添加表内容,数据创建 · ThinkPHP3.2.3完全开发手册 · 看云

    在进行数据操作之前,我们往往需要手动创建需要的数据,例如对于提交的表单数据: ~~~ // 获取表单的POST数据 $data['name'] = $_POST['name']; $data['ema ...

  2. 微赞php.ini_安装 · 微赞操作手册 · 看云

    [1]程序安装请参照:http://www.efwww.com/thread-40-1-1.html [2]本版本已整合含有IC9加密模块,部分模块虚拟主机无法使用,独立主机请安装IC9组件后再安装( ...

  3. 【JetPack】为现有 Android 项目配置视图绑定 ( ViewBinding ) 模块 ( 视图绑定不影响传统布局操作 | 视图绑定类关联 Activity | 视图绑定类本质 )

    文章目录 I . 为现有项目配置 视图绑定 ( ViewBinding ) 应用 II . 视图绑定 ( ViewBinding ) 定制 III . 视图绑定 ( ViewBinding ) 对于正 ...

  4. java自定义监听器例子_Java使用自定义注解实现为事件源绑定事件监听器操作示例...

    本文实例讲述了Java使用自定义注解实现为事件源绑定事件监听器操作.分享给大家供大家参考,具体如下: 一 定义注解 import java.lang.annotation.*; import java ...

  5. 域名绑定https流程操作步骤

    域名绑定https流程操作步骤 网上找了很多资料,踩过不少坑,发现在网上很少有关于域名绑定https实现过程的完整资料,这里整理了下,共大家参考. 1.1关于https和http的区别 HTTP协议传 ...

  6. 如何在xaml文件中操作用户在后台代码定义的类(1)

    本文主要示例如何在xaml文件中操作用户使用C#代码自定义的类.主要步骤如下: 1.在VS2008中创建一个新项目CustomTypesInXaml,在此项目下我们新建两个类,一个是Client类,一 ...

  7. C#拾遗系列(9):继承、接口、扩展方法、分部类、类操作、Ref and Out、可空类型...

    本文内容: 继承 Equal示例 结构和类 属性 Ref and Out 类操作 扩展方法 接口 可空类型 分部类 1. 继承 using System; using System.Collectio ...

  8. SilverLight学习笔记--如何在xaml文件中操作用户在后台代码定义的类(2)--示例篇:创建一个登录控件(原创)(转载本文请注明出处)...

    本文将示例如何运用前篇所写知识来建立一个用户自定义的登录控件.此控件界面非常简单,主要涉及的知识点是:   如何创建用户控件(包括对此控件的自定义事件和属性的编写,此处我们将创建一个名为LoginBo ...

  9. django-模型类操作-初期阶段-小结

    负责数据库控制的文件 应用夹下,models .py 如何定义一个模型类 格式: class 类名(models.Model):字段名=字段类型 如何进入django的shell 如何导入和使用mod ...

最新文章

  1. c++ 继承访问控制初步
  2. 图灵测试,时至今日还有意义吗?
  3. 磁铁对于小型直流电机的影响
  4. android隐藏状态栏
  5. Bootstrap的x-editable行编辑
  6. delphi fastreport 动态加载图片
  7. Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' 的解决办
  8. 《R与Hadoop大数据分析实战》一1.6 HDFS和MapReduce架构
  9. RRC 常用名词解释
  10. Wechart 饼图
  11. linux线程 ppt,实验十七Linux下进程线程的创建.ppt
  12. windows 2003 server 企业英文版 序列号
  13. 洗内衣、白鞋、羊毛衫……需要专用清洁剂吗
  14. 西安交通大学915考研--编程题Java代码踩坑(2020年真题)
  15. wd移动硬盘测试软件,WD西数 MY Passport移动硬盘拆解评测
  16. obs-shaderfilter滤镜
  17. Node.js Express博客项目实战 之 前台页面数据的显示
  18. 快速配置 Sign In with Apple
  19. 融云超级群的「新能力」
  20. Python3 实现 KMP 算法核心 PMT

热门文章

  1. asp.net core 错误定位 vs2017 远程调试部署在centos上的asp.net core程序
  2. [翻译] 比较 Node.js,Python,Java,C# 和 Go 的 AWS Lambda 性能
  3. .NET Core 2.0 单元测试中初识 IOptionsMonitoramp;lt;Tamp;gt;
  4. DDD理论学习系列(4)-- 领域模型
  5. Azure SQL的DTU和eDTU到底是个什么鬼
  6. 应用工具 .NET Portability Analyzer 分析迁移dotnet core
  7. 使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(二)-- Web Api Demo
  8. 采用EntityFramework.Extended 对EF进行扩展(Entity Framework 延伸系列2)
  9. Android使用C/C++来保存密钥
  10. LeetCode之Sqrt(x)