TP框架中 空控制器和空方法的解决方案

空操作:一个对象(控制器)调用本身不存在的方法

空控制器:在实例化控制器对象的时候,没有找到指定的类

首先,在Application文件下新建Ceshi模块,并在Ceshi模块下按照Home模块建立相同的文件夹,如下图:

 

1)在Controller文件夹下新建Login控制器:

1
2
3
4
5
6
7
8
9
10
<?php
namespace  Ceshi\Controller;
use  Think\Controller;
class  LoginController  extends   Controller
{
    public  function  login()
    {
     echo  "Mir.c!" ;
    }
}

2)地址栏输入访问地址:http://localhost/wamp/thinkphp/index.php/Ceshi/Login/login

 

一、 在地址栏访问不存在的方法,会怎么样?

http://localhost/wamp/thinkphp/index.php/Ceshi/Login/login

 

通过此页面,我们可以知道:

(1)这样的界面暴露了我们是用什么工具写的代码,同时暴露了thinkphp的版本号,如果黑客找到该版本号的漏洞就可以攻击你了。

(2)其次,这样的界面很不友好,对于用户来说,他们看不懂也不知道是哪里出错了。

我们应该给出更为安全、更为友好的提示。

 

父类中有个方法如下图,我们可以仿照这个来做:

第一种方法:做一个空的模板

1)在View文件夹下建一个Ceshi文件夹,

 

简单布局一下login.html 页面

1
2
3
4
5
6
7
8
9
10
11
12
13
<! DOCTYPE  html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
< html  xmlns="http://www.w3.org/1999/xhtml">
< head >
< meta  http-equiv="Content-Type" content="text/html; charset=utf-8" />
< title >无标题文档</ title >
< style  type="text/css">
*{ margin:0px auto; padding:0px}
</ style >
</ head >
< body >
< div >您访问的操作方法有误!</ div >
</ body >
</ html >

 2) 再次访问http://localhost/wamp/thinkphp/index.php/Ceshi/Login/loginsss

这样相比只出现代码要好的多,但是,我们不可能每输入一个不存在的方法就做一个模板,这样不切实际,再说我们也不知道用户下一次会输入什么样的操作方法,所以这种方法并有太大的局限性。

 

第二种方法:做一个空的方法:_empty()方法

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
namespace  Ceshi\Controller;
use  Think\Controller;
class  LoginController  extends   Controller
{
    public  function  login()
    {
     echo  "欢迎登陆!" ;
    }
    public  function  _empty(){
     echo  "您访问的操作方法不存在!" ;
    }
}

 

这样不论访问到什么样的空方法都会显示“您访问的操作方法不存在!”如图:

 

http://localhost/wamp/thinkphp/index.php/Ceshi/Login/logins

 

http://localhost/wamp/thinkphp/index.php/Ceshi/Login/aaa



 

二、 在地址栏访问不存在的控制器,会怎么样?出现同样的报错

 

解决方法:

新建一个Empty控制器:

 EmptyController.class.php

1
2
3
4
5
6
7
8
9
<?php
namespace  Ceshi\Controller;
use  Think\Controller;
class  EmptyController  extends  Controller
{
     public  function  _empty(){
         echo  "您访问的控制器有误哦" ;
     }
}

  再访问http://localhost/wamp/thinkphp/index.php/Ceshi/Main/login

换个  http://localhost/wamp/thinkphp/index.php/Ceshi/MMMn/login

这样就可以解决空控制器和空操作的问题了,简单来说就是做一个空方法和一个空控制器的方法,当没有这种控制器或者方法,就直接跳到你做的页面中去.~

转载于:https://www.cnblogs.com/cyd123/p/7145586.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值