php tp3 操作绑定到类,快速入门 17:操作绑定到类

本文介绍了在应用规模较大时如何使用操作绑定到类的功能来细化控制器开发。设置`ACTION_BIND_CLASS`为`True`后,控制器文件位置和命名空间发生改变,操作方法由`run`替代。此外,还详细说明了前置和后置操作的定义、空控制器及空操作的处理方式,有助于提高代码组织的清晰度和模块化。
摘要由CSDN通过智能技术生成

# 快速入门(十七):操作绑定到类

如果你的应用规模比较大,每个操作方法彼此相对独立,那么就可以尝试下操作绑定到类的功能。

## 定义

系统提供了把每个操作方法定位到一个类的功能,可以让你的开发工作更细化,可以设置参数**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参数绑定操作。

~~~

namespace Home\Controller\Index;

use Think\Controller;

class index extends Controller{

public function run($name=''){

echo 'Hello,'.$name.'!';

}

}

~~~

我们访问

~~~

http://serverName/Home/Index/index/name/thinkphp

~~~

可以看到输出结果为:

Hello,thinkphp!

## 前置和后置操作

当设置操作方法绑定到类后,前置和后置操作的定义有所改变,只需要在类里面定义`_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操作

~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值