当前位置:K88软件开发文章中心网站服务器框架ThinkPHP → 文章内容

操作绑定到类

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-26 15:32:21

由 AdairSweet 创建, 最后一次修改 2016-02-24 定义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操作

操作绑定到类