在上篇随笔中我们已经知道了tp框架的四种访问方式,那么当在地址栏输入不存在的操作方法、控制器会怎么样呢?

先看一下定义:

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

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

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

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

<?php
namespace Ceshi\Controller;
use Think\Controller;
class LoginController extends Controller
{
public function login()
{
echo "欢迎登陆!";
}
}

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

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

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

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

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

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

如何给出更为安全、更为友好的提示呢?

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

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

1)在View文件夹下建一个Ceshi文件夹,路径如下:

loginsss.html

<!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()方法

<?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

<?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

这样就可以解决空控制器和空操作的问题了~.~.~

thinkphp的空控制器和空操作以及对应解决方法的更多相关文章

  1. thinkphp5空控制器和空操作

    thinkphp5空控制器和空操作 一.总结 1.空控制器和空操作用:空控制器和空操作都是为了防止网站上的用户恶意输入,网站上线的话必须加上, 2.空操作:空操作就是在一般的控制器里面加上一个 _em ...

  2. 【tp5】tp5实现空模块、空控制器、空操作的页面404跳转

    写在最开始:本教程适用于tp5路由的[强制模式+半pathinfo模式+pathinfo模式],通用. 比网上的[通过路由去控制空模块更强力.更全面]. PS:路由控制空模块缺点:仅仅在[强制模式下才 ...

  3. thinkphp5.0 空模块、空控制器、空方法

    空模块 'exception_handle' => function(Exception $e){ // 参数验证错误 if ($e instanceof \think\exception\Va ...

  4. ThinkPHP3.2 中空方法、空控制器和空模块的设置

    ThinkPHP3.2 中空方法.空控制器和空模块的设置 1.空方法设置 问题: 当你访问一个不存在的方法的时候: 如: http://localhost/test/index.php/Home/Us ...

  5. TP框架 ---空控制器和空操作

    通过之前的学习我们知道了index.php是一个入口文件,如果没有这个入口文件的话,我们需要自己创建! [视图模板文件创建] 视图模板文件存放发位置在: 里面没有模板文件 如果我们想要访问Login控 ...

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

    通过之前的学习我们知道了index.php是一个入口文件,如果没有这个入口文件的话,我们需要自己创建! [视图模板文件创建] 视图模板文件存放发位置在: 里面没有模板文件 如果我们想要访问Login控 ...

  7. TP3.2框架,实现空模块、空控制器、空操作的页面404替换||同步实现apache报错404页面替换

    一,前言 一.1)以下代码是在TP3.0版本之后,URL的默认模式=>PATHINFO的前提下进行的.(通俗点,URL中index.php必须存在且正确) 代码和讲解如下: 1.空模块解决:ht ...

  8. Tp5 空模块、空控制器、空方法的处理

    1.空模块处理 如果是开启了路由 可直接找到route.php文件,具体的位置看个人放置的位置,在里面新增一个语句 '__miss__' => ['portal/index/errorMsg', ...

  9. 关于“类不能支持Automation操作”错误的解决方法

    一段程序IE上老是提示“类不支持Automation操作”的错误,IE6.7.8都一样,但是Firefox可以,后来网上找到如下解决方法: 重新注册下以下文件,问题便解决了:msscript.ocxd ...

随机推荐

  1. Java Primitives and Bits

    Integer when processors were 16 bit, an int was 2 bytes. Nowadays, it's most often 4 bytes on a 32 b ...

  2. servlet context 和 servlet config

    servletConfig Servlet容器初始化一个servlet对象时,会为这个servlet对象创建一个servletConfig对象,该对象中包含了servlet的<init-para ...

  3. swift学习 - 分类(Extensions)

    在oc中为了增强已有类的功能,我们经常使用分类.使用分类,我们可以在不破坏原有类的结构的前提下,对原有类进行模块化的扩展. 但是在swift中没有分类这种写法了.相对应的是swift中只有扩展(Ext ...

  4. 浏览器兼容之Chrome浏览器: -webkit-text-size-adjust: none;

    今天在看demo的时候css样式里面发现的 -webkit-text-size-adjust: none; 度娘以后,了解这段样式的作用是:解决Chrome浏览器里面,设置小于12px的字体大小问题. ...

  5. Lambda类库篇 —— Streams API, Collector和并行

    本文是深入理解Java 8 Lambda系列的第二篇,主要介绍Java 8针对新增语言特性而新增的类库(例如Streams API.Collectors和并行). 本文是对 Brian Goetz 的 ...

  6. Running R jobs quickly on many machines(转)

    As we demonstrated in “A gentle introduction to parallel computing in R” one of the great things abo ...

  7. 使用nodeJS实现前端项目自动化之项目构建和文件合并

    前面的话 一般地,我们使用构建工具来完成项目的自动化操作.本文主要介绍如何使用nodeJS来实现简单的项目结构构建和文件合并 项目构建 假设,最终实现的项目名称为'test',结构如下图所示 那么,首 ...

  8. canvas——随机生成迷宫

    先上图. 效果 代码 随机生成迷宫要求任意两点都能够找到相同的路径,也就是说,迷宫是一个连通图.随机生成迷宫可以使用普里姆算法.广度优先算法.深度优先算法等实现.这里将使用普里姆算法通过生成最小数的方 ...

  9. JSP手动注入 全

    检测可否注入 http://****.house.sina.com.cn/publics/detail.jsp?id=7674 and 1=1 (正常页面) http://****.house.sin ...

  10. iOS开发之资讯类App常用分类控件的封装与实现(CollectionView+Swift3.0+)

    今天博客中,我们就来实现一下一些常用资讯类App中常用的分类选择的控件的封装.本篇博客中没有使用到什么新的技术点,如果非得说用到了什么新的技术点的话,那么勉强的说,用到了一些iOS9以后UIColle ...