Thinkphp 空操作、空控制器、命名空间(详解)


Posted in PHP onMay 05, 2017

1、空操作

空操作是指系统在找不到请求的操作方法的时候,会定位到空操作(_empty)方法来执行,利用这个机制,我们可以实现错误页面和一些URL的优化。

http://网址/index.php/Home/Main/login

http://网址/index.php/Home/Main/hello 空操作

出现页面:

Thinkphp 空操作、空控制器、命名空间(详解)

显示的错误信息过于详细,为安全以及优化页面起见,实行空操作

1、做一个_empty()方法。要在子类里面写,不要再父类里(推荐使用)

function _empty()
{
echo "网页不存在,请检查浏览器地址信息!";
}

Thinkphp 空操作、空控制器、命名空间(详解)

2.造一个该方法对应的模版

在view/main下面新建一个text.html文件

<body>
<h1>别乱访问</h1>
</body>
</html>

Thinkphp 空操作、空控制器、命名空间(详解)

注意:空操作方法仅在你的控制器类继承系统的Think\Controller类才有效,否则需要自己定义 __call 来实现。

2、空控制器

空控制器的概念是指当系统找不到请求的控制器名称的时候,系统会尝试定位空控制器(EmptyController),利用这个机制我们可以用来定制错误页面和进行URL的优化。

Home/Controller/EmptyController.class.php

<?php
namespace Home\Controller;
use Think\Controller;
class EmptyController extends Controller
{
  public function _empty()
  {
    echo "访问的页面不存在!";
    }
  
}

Thinkphp 空操作、空控制器、命名空间(详解)

3、跨控制器调用

一个控制器在执行的时候,可以实例化另外一个控制,并通过对象访问其指定方法。

跨控制器调用可以节省我们代码的工作量

3.1 同一模块下:

例如:在Home/Controller中有两个控制器:IndexController.class.php和MainController.class.php

Thinkphp 空操作、空控制器、命名空间(详解)

在IndexController.class.php有一个方法:

public function ShuChu()
  {
    return "教务管理系统!";  
  }

现在想要在 MainController.class.php中也调用ShuChu()方法

function DiaoYong()
   {
    //方法一:造对象
    //$index=new IndexController(); 
    //echo $index->ShuChu();
    
    //造对象有快捷函数供我们使用:
    //A(“[模块/]控制器标志”) 实例化控制器对象
    //方法二:使用A()方法
    //$index=A("Index");
    //echo $index->ShuChu();
    
    //R([模块/]控制器标志/操作方法) 实例化对象同时调用指定方法
    //方法三:使用R()方法,造对象并且调用某个特定的方法
    echo R("Index/ShuChu");
}

运行结果:

Thinkphp 空操作、空控制器、命名空间(详解)

3.2 不同模块下:

新添加一个模块Admin

Thinkphp 空操作、空控制器、命名空间(详解)

TextController.class.php:

<?php
namespace Admin\Controller;
use Think\Controller;
class TextController extends Controller
{  
  public function Text()
  {
    echo "HHHHH";
  }
}

现在想要在Home/Controller/ MainController.class.php中也调用Text()方法

function Text()
  {
    //跨模块调用
        
    //方法一:使用A()方法
    //$tt=A("Admin/Text");
    //echo $tt->Text();
    
    //方法二:使用R()方法,造对象并且调用某个特定的方法
    echo R("Admin/Text/Text");
    
    }

运行结果:

Thinkphp 空操作、空控制器、命名空间(详解)

4.命名空间namespace

相当于一个虚拟的目录

正常管理文件使用文件夹--物理区分

TP框架的初始命名空间是:ThinkPHP\Library

在TP框架下命名空间里面使用\代表的是初始命名空间(ThinkPHP\Library)

1.系统目录下根命名空间是ThinkPHP\Library下面的文件夹名称命名的

2.模块的根命名空间是以模块名命名的

在定义命名空间的时候需要从根写起例如:Home\Controller 例如:Think\Model

如果要使用某个类文件,引入该类命名空间的时候:

使用use关键字,后面写该类的命名空间 后面加上 "\文件名"

如果不想引入命名空间:在造类的对象的时候可以使用\(初始命名空间)来找到对应的类
例如:new \Think\Page(30);

以上这篇Thinkphp 空操作、空控制器、命名空间(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP的一个完整SMTP类(解决邮件服务器需要验证时的问题)
Oct 09 PHP
在Windows中安装Apache2和PHP4的权威指南
Oct 09 PHP
php设计模式 DAO(数据访问对象模式)
Jun 26 PHP
Can't create/write to file 'C:\WINDOWS\TEMP\...MYSQL报错解决方法
Jun 30 PHP
PHPEXCEL 使用小记
Jan 06 PHP
thinkphp获取栏目和文章当前位置的方法
Oct 29 PHP
php实现微信公众平台账号自定义菜单类
Dec 02 PHP
PHP使用内置dir类实现目录遍历删除
Mar 31 PHP
php实现zip文件解压操作
Nov 03 PHP
实例详解PHP中html word 互转的方法
Jan 28 PHP
php版微信公众平台接口开发之智能回复开发教程
Sep 22 PHP
微信JSSDK分享功能图文实例详解
Apr 08 PHP
thinkPHP实现的联动菜单功能详解
May 05 #PHP
thinkPHP实现的省市区三级联动功能示例
May 05 #PHP
php str_replace替换指定次数的方法详解
May 05 #PHP
老生常谈ThinkPHP中的行为扩展和插件(推荐)
May 05 #PHP
PHP curl 或 file_get_contents 获取需要授权页面的方法
May 05 #PHP
php 浮点数比较方法详解
May 05 #PHP
PHP删除二维数组中相同元素及数组重复值的方法示例
May 05 #PHP
You might like
php的urlencode()URL编码函数浅析
2011/08/09 PHP
PHP 生成微信红包代码简单
2016/03/25 PHP
php实现的中文分词类完整实例
2017/02/06 PHP
摘自百度的图片轮换效果代码
2007/11/19 Javascript
Jquery中Ajax 缓存带来的影响的解决方法
2011/05/19 Javascript
关于Jquery操作Cookie取值错误的解决方法
2013/08/26 Javascript
showModalDialog模态对话框的使用详解以及浏览器兼容
2014/01/11 Javascript
Javascript毫秒数用法实例
2015/02/05 Javascript
jQuery实现按键盘方向键翻页特效
2015/03/18 Javascript
jQuery实现的简单百分比进度条效果示例
2016/08/01 Javascript
webpack 插件html-webpack-plugin的具体使用
2018/04/09 Javascript
vue自动化表单实例分析
2018/05/06 Javascript
微信小程序实现张图片合成为一张并下载
2019/07/16 Javascript
微信小程序 确认框的实现(附代码)
2019/07/23 Javascript
解决一个微信号同时支持多个环境网页授权问题
2019/08/07 Javascript
使用JavaScript计算前一天和后一天的思路详解
2019/12/20 Javascript
js实现点击烟花特效
2020/10/14 Javascript
vue解决跨域问题(推荐)
2020/11/10 Javascript
[43:43]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第三场 11.29
2020/12/02 DOTA
[03:17]DOTA2-DPC中国联赛1月29日Recap集锦
2021/03/11 DOTA
python基础教程之基本内置数据类型介绍
2014/02/20 Python
基于python 处理中文路径的终极解决方法
2018/04/12 Python
Python实现App自动签到领取积分功能
2018/09/29 Python
pycharm配置当鼠标悬停时快速提示方法参数
2019/07/31 Python
python实现二分类和多分类的ROC曲线教程
2020/06/15 Python
python线程池 ThreadPoolExecutor 的用法示例
2020/10/10 Python
深入研究HTML5实现图片压缩上传功能
2016/03/25 HTML / CSS
Fanatics英国官网:美国体育电商
2018/11/06 全球购物
KENZO官网:高田贤三在法国创立的品牌
2019/05/16 全球购物
公司年会策划方案
2014/05/17 职场文书
党的群众路线对照检查材料范文
2014/09/24 职场文书
信用卡工资证明范本
2015/06/19 职场文书
答谢酒会主持词
2015/07/02 职场文书
庆祝教师节新闻稿
2015/07/17 职场文书
Android Gradle 插件自定义Plugin实现注意事项
2022/06/16 Java/Android
TypeScript实用技巧 Nominal Typing名义类型详解
2022/09/23 Javascript