码迷,mamicode.com
首页 > 其他好文 > 详细

空操作

时间:2016-07-31 11:44:58      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:

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 =>空

空操作

标签:

原文地址:http://www.cnblogs.com/jinshui/p/5722433.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!