空操作的本质意思:一个对象(控制器)调用本身不存在的方法
在OOP里边,对象调用本身不存在的方法,处于用户体验比较好的角度考虑,
我们可以在类里边制作一个魔术方法:function __call();
避免该方法被重复在各个控制器中书写,可以把该访问放到父类里边
function __call($m,$arg){}
普通控制器父类的位置:
use Think\Controller; class IndexController extends Controller {
/** * 魔术方法 有不存在的操作的时候执行 * @access public * @param string $method 方法名 * @param array $args 参数 * @return mixed */ public function __call($method,$args) { if( 0 === strcasecmp($method,ACTION_NAME.C('ACTION_SUFFIX'))) { if(method_exists($this,'_empty')) { // 如果定义了_empty操作 则调用 $this->_empty($method,$args); }elseif(file_exists_case($this->view->parseTemplate())){ // 检查是否存在默认模版 如果有直接输出模版 $this->display(); }else{ E(L('_ERROR_ACTION_').':'.ACTION_NAME); } }else{ E(__CLASS__.':'.$method.L('_METHOD_NOT_EXIST_')); return; } }
空操作有两种解决方案:
1,在对应的控制器里边制作一个方法,名称为"_empty",这个控制器的空操作都会自动执行该方法。(推荐使用)
2,给空操作的名称制作一个同名得模板出来,系统会自动调用