1.空方法
如上图,访问控制器的一个不存在方法,会出现以上界面,原因是父类Controlley里的call方法,代码如下
/** * 魔术方法 有不存在的操作的时候执行 * @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; } }
解决办法,一个是在每个控制器中创建空方法(_empty()),一个是创建相应模板(不推荐),方法不存在照样能访问;
代码如下:
_empty()方法:
<?php namespace Home\Controller;//写的时候写到文件夹 use Think\Controller;//用的时候写到类 class MainController extends Controller{ function _empty(){ echo "你输入的方法不存在"; } }
2、空控制器
访问错误的控制器,出现以上界面,为了防止普通用户看不懂和黑客的袭击,必须隐藏信息
原因是APP.class.php里的执行控制器时候的代码:
// 是否定义Empty控制器 $module = A('Empty');//创建empty控制器 if(!$module){ E(L('_CONTROLLER_NOT_EXIST_').':'.CONTROLLER_NAME);//如果控制器不存在打出错误信息 }
逻辑:如果没有创建空控制器,显示错误信息
解决办法:
在相应模块下创建空控制器Emptycontroller;
代码:
<?php namespace Home\Controller; use Think\Controller; class EmptyController extends Controller{ function _empty(){ echo "控制器错误"; } function esa(){ echo "1"; } }
App => Application 应用程序
void =>空
No Excuse~