tp框架中如何使用空操作与空控制器

大家好,今天说一下在thinkPHP中如何使用空操作,

首先我们要说的是在什么情况下能够用到空操作或者空控制器。

使用空操作和空控制器的好处有哪些。

我们下面来设立一个场景,形象的说明他的作用。

假如,你是一名黑客。当你看到一个项目的网址是的时候。想要**它。

于是你将 http://ty.full.com/thinkshop/home/index/index 变成了http://ty.full.com/thinkshop/home/index/login 

这时如果你没有进行空操作,或者是空控制器操作。会显示如下提示。tp框架中如何使用空操作与空控制器

非法操作login

和错误位置,这样就可以通过知道你是什么框架,来寻找框架漏洞。再就是用户体验大打折扣。

空控制器,如同上面,显示,无法加载控制器,也是同样的道理。所以。建立空操作或空控制器是很有必要的。

如何使用空操作。

我们使用方法   function _call(){} 

这个方法tp框架种自带,所以直接继承父类就可以了,不用在每个控制器中都填写。

下面我们来看看这个方法,

 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;
        }
    }

从第二个if中我们了解到。   $this 表示的是当前控制器。    _empty表示的是方法。

如果当前控制器有这个_empty方法就进入  直接调用

第二种是,如果有与控制器相同名字的模板也是自动调用,

E(L('_ERROR_ACTION_').':'.ACTION_NAME); 第三种是 他的意思就是我们所看到的错误信息。

前面两种建议选择第一种,因为这种更加灵活。