空操作

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

时间: 2024-10-27 19:03:03

空操作的相关文章

6月14日 空操作 命名空间 视图

空操作: 方法1: MainController.class.php: function _empty() { echo "网页不存在,请检查浏览器地址信息"; } 方法2: 给空操作的名称制作一个同名的模板出来,系统会自动调用 空控制器: 创建EmptyController.class.php,以及对象调用指定的方法: <?php namespace Home\Controller; use Think\Controller; class EmptyController ext

TP之空操作及View模块

空操作可以分为两类:空操作方法,空控制器. 空操作方法参考核心类Controller.class.php中__call魔术方法定义一个_empty()操作方法 <?php namespace Home\Controller; use Think\Controller; class TestController extends Controller { public function _empty() //空操作:就有指定的操作方法.在子类中写入空方法,保护信息防止外泄,实际项目中每个页面都要写

TP框架基础 (二) ---空控制器和空操作

通过之前的学习我们知道了index.php是一个入口文件,如果没有这个入口文件的话,我们需要自己创建! [视图模板文件创建] 视图模板文件存放发位置在: 里面没有模板文件 如果我们想要访问Login控制器中的Login方法,首先我们要创建一个Login控制器对应的模板文件夹,该文件夹就对应着Login控制器: 然后在Login文件夹下再创建一个login.html的模板文件来对应Login控制器下的Login方法: 在login.html里面写入要显示的代码: 然后再次请求: [url地址大小写

ThinkPHP空操作及命名空间

空操作是指访问不存在的路径: 解决方法:在控制其中创建 _empty方法 空控制器是指访问存在的控制器: 解决方法:创建EmptyController控制器 命名空间: 初识命名空间是Library:用\表示 初识命名空间下有两块根命名空间,1是Library下的文件夹,2是程序的模块文件夹 给类定义命名空间,否则类不能使用 在定义命名空间的时候需要从根写起例如:Home\Controller 创建类对象 $page = new \Home\FenYe\Page(10,5);

Thinkphp入门 二 —空操作、空模块、模块分组、前置操作、后置操作、跨模块调用(46)

原文:Thinkphp入门 二 -空操作.空模块.模块分组.前置操作.后置操作.跨模块调用(46) [空操作处理] 看下列图: 实际情况:我们的User控制器没有hello()这个方法 一个对象去访问这个类不存在的方法,那么它会去访问”魔术方法__call()” 用户访问一个不存在的操作—>解决:给每个控制器都定义个_empty()方法来处理 第二个解决方法:定义一个空操作 [空模块处理] 我们使用一个类,但是现在这个类还没有被include进来. 我们可以通过自动加载机制处理__autoloa

空操作命名空间

空操作 MainController.class.php //如果访问的页面不存在,空操作 //1.empty 空方法 /*function _empty() { echo "网页不存在请检查浏览器地址信息"; }*/ //2.造一个该方法对应的模板,直接输出模板不需要在子类写代码 //跨控制器调用 function ShuChu() { //造对象 /*$index = new IndexController(); echo $index->ShuChu();*/ //使用A方

ThinkPHP - 空模块+空操作

空操作 空操作是指系统在找不到指定的操作方法的时候,会定位到空操作(_empty)方法来执行,利用这个机制,我们可以实现错误页面和一些URL的优化. 例如,下面我们用空操作功能来实现一个城市切换的功能.我们只需要给CityAction类定义一个_empty (空操作)方法: <?php class CityAction extends Action{ public function _empty($name){ //把所有城市的操作解析到city方法 $this->city($name); }

tp空操作和空控制器处理

TP框架几个重要文件:index.php,ThinkPHP.php,Library/Think/Think.class.php,Library/Think/App.class.php,conversion.php 空操作就是当用户访问不存在的方法,在控制器里声明一个_empty方法,这个方法会被自动调用,它是通过父控制Controller里的__call方法实现的. 当访问不存在的控制器的时候,要在Controller目录下新建一个Empty控制,这个控制器只需要一个_empty方法.

thinkphp的空控制器和空操作以及对应解决方法

在上篇随笔中我们已经知道了tp框架的四种访问方式,那么当在地址栏输入不存在的操作方法.控制器会怎么样呢? 先看一下定义: 空操作:一个对象(控制器)调用本身不存在的方法 空控制器:在实例化控制器对象的时候,没有找到指定的类 首先,在Application文件下新建Ceshi模块,并在Ceshi模块下按照Home模块建立相同的文件夹,如下图: 1)在Controller文件夹下新建Login控制器: <?php namespace Ceshi\Controller; use Think\Contr

TP框架控制器的空操作

在浏览器中输入tp框架入口文件的地址,如图 要注意,localhost/后面跟的是www的下一级,tp文件的上一级,因为我直接把tp文件做成了www目录的下一级,所以我写的地址localhost后面跟的就是tp 打上目录后回车,就会出来tp的主页面,如图 再随便打上一个没有的操作方法,如 打出的这个页面,暴露了很多信息,不太安全,所以我们要控制住,. 像这种操作本来没有的,叫做空操作 要改变这种,我们可以提供一种方法 从这个目录下找 可以在这个文件中查找双下划线打头的call方法 在这个位置搜到