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 相关文章推荐
Discuz! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口
Apr 18 PHP
基于php验证码函数的使用示例
May 03 PHP
php-cli简介(不会Shell语言一样用Shell)
Jun 03 PHP
PHP中is_file不能替代file_exists的理由
Mar 04 PHP
php命令行使用方法和命令行参数说明
Apr 08 PHP
PHP实现linux命令tail -f
Feb 22 PHP
PHP获取不了React Native Fecth参数的解决办法
Aug 26 PHP
PHP 信号管理知识整理汇总
Feb 19 PHP
PHP实现链式操作的三种方法详解
Nov 16 PHP
YII框架实现自定义第三方扩展操作示例
Apr 26 PHP
PHP实现通过二维数组键值获取一维键名操作示例
Oct 11 PHP
php中try catch捕获异常实例详解
Aug 06 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
Zend Studio去除编辑器的语法警告设置方法
2012/10/24 PHP
php+mysqli实现批量执行插入、更新及删除数据的方法
2015/01/29 PHP
Javascript实例教程(19) 使用HoTMetal(6)
2006/12/23 Javascript
js 页面刷新location.reload和location.replace的区别小结
2009/12/24 Javascript
JavaScript 学习笔记二 字符串拼接
2010/03/28 Javascript
javascript 广告后加载,加载完页面再加载广告
2010/11/25 Javascript
jquery.validate 自定义验证方法及validate相关参数
2016/01/18 Javascript
Jquery和JS获取ul中li标签的实现方法
2016/06/02 Javascript
javascirpt实现2个iframe之间传值的方法
2016/06/30 Javascript
jQuery基于ajax操作json数据简单示例
2017/01/05 Javascript
微信小程序 图片边框解决方法
2017/01/16 Javascript
基于JavaScript实现图片剪切效果
2017/03/07 Javascript
ReactNative踩坑之配置调试端口的解决方法
2017/07/28 Javascript
JS基于对象的特性实现去除数组中重复项功能详解
2017/11/17 Javascript
使用vuex的state状态对象的5种方式
2018/04/19 Javascript
详解.vue文件中style标签的几个标识符
2018/07/17 Javascript
使用axios请求时,发送formData请求的示例
2019/10/29 Javascript
python实现目录树生成示例
2014/03/28 Python
python实现向ppt文件里插入新幻灯片页面的方法
2015/04/28 Python
Python 多线程抓取图片效率对比
2016/02/27 Python
Python中import机制详解
2017/11/14 Python
儿童编程python入门
2018/05/08 Python
python logging日志模块原理及操作解析
2019/10/12 Python
Python csv文件的读写操作实例详解
2019/11/19 Python
利用python在excel中画图的实现方法
2020/03/17 Python
Python实现随机爬山算法
2021/01/29 Python
英国领先的葡萄酒专家:Majestic Wine
2017/05/30 全球购物
激光脱毛、蓝光和护肤:Tria Beauty
2019/03/28 全球购物
Chi Chi London官网:购买连衣裙和礼服
2020/10/25 全球购物
教师师德教育的自我评价
2013/10/31 职场文书
信息管理应届生求职信
2014/03/07 职场文书
环保建议书600字
2014/05/14 职场文书
离婚协议书怎么写2014
2014/09/30 职场文书
村主任个人对照检查材料
2014/10/01 职场文书
社会实践单位意见
2015/06/05 职场文书
redis客户端实现高可用读写分离的方式详解
2021/07/04 Redis