tp框架中如何使用空操作与空控制器
大家好,今天说一下在thinkPHP中如何使用空操作,
首先我们要说的是在什么情况下能够用到空操作或者空控制器。
使用空操作和空控制器的好处有哪些。
我们下面来设立一个场景,形象的说明他的作用。
假如,你是一名黑客。当你看到一个项目的网址是的时候。想要**它。
于是你将 http://ty.full.com/thinkshop/home/index/index 变成了http://ty.full.com/thinkshop/home/index/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); 第三种是 他的意思就是我们所看到的错误信息。
前面两种建议选择第一种,因为这种更加灵活。