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 相关文章推荐
不用iconv库的gb2312与utf-8的互换函数
Oct 09 PHP
php5 mysql分页实例代码
Apr 10 PHP
PHP实现MySQL更新记录的代码
Jun 07 PHP
Php图像处理类代码分享
Jan 19 PHP
腾讯QQ微博API接口获取微博内容
Oct 30 PHP
PHP发送短信代码分享
Aug 11 PHP
PHP自带方法验证邮箱是否存在
Feb 01 PHP
PHP中单例模式与工厂模式详解
Feb 17 PHP
利用PHPStorm如何开发Laravel应用详解
Aug 30 PHP
PHP实现基于栈的后缀表达式求值功能
Nov 10 PHP
PHP让网站移动访问更加友好方法
Feb 14 PHP
laravel 修改记住我功能的cookie保存时间的方法
Oct 14 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 函数中使用static的说明
2012/06/01 PHP
关于php正则匹配汉字的方法介绍
2013/04/25 PHP
解析二进制流接口应用实例 pack、unpack、ord 函数使用方法
2013/06/18 PHP
php实现在新浪云中使用imagick生成缩略图并上传的方法
2016/09/26 PHP
php usort 使用用户自定义的比较函数对二维数组中的值进行排序
2017/05/02 PHP
PHP+Ajax实现上传文件进度条动态显示进度功能
2018/06/04 PHP
JavaScript 事件系统
2010/07/22 Javascript
在iframe里的页面编写js,实现在父窗口上创建动画效果展开和收缩的div(不变动iframe父窗口代码)
2011/12/20 Javascript
js里怎么取select标签里的值并修改
2012/12/10 Javascript
jquery实现metro效果示例代码
2013/09/06 Javascript
文本框回车提交与禁止提交示例
2013/09/27 Javascript
IE浏览器IFrame对象内存不释放问题解决方法
2014/08/22 Javascript
基于jQuery实现的文字按钮表单特效整理
2014/12/07 Javascript
KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机的方法
2016/10/05 Javascript
微信小程序 下拉列表的实现实例代码
2017/03/08 Javascript
纯js实现动态时间显示
2020/09/07 Javascript
React Native如何消除启动时白屏的方法
2017/08/08 Javascript
基于node打包可执行文件工具_Pkg使用心得分享
2018/01/24 Javascript
解决iView中时间控件选择的时间总是少一天的问题
2018/03/15 Javascript
Vue中使用vee-validate表单验证的方法
2018/05/09 Javascript
js自定义input文件上传样式
2018/10/26 Javascript
ssm+vue前后端分离框架整合实现(附源码)
2020/07/08 Javascript
[17:45]DOTA2 HEROES教学视频教你分分钟做大人-军团指挥官
2014/06/11 DOTA
[59:07]海涛为你详解DOTA2新版本“贤哲秘契”
2014/11/22 DOTA
详解Python 函数如何重载?
2019/04/23 Python
应届毕业生个人自我评价
2013/09/20 职场文书
会计实习自我鉴定
2013/12/04 职场文书
行政人员岗位职责
2013/12/08 职场文书
应届行政管理专业个人自我评价
2013/12/28 职场文书
新闻编辑专业自荐信
2014/07/02 职场文书
学生意外伤害赔偿协议书
2014/09/17 职场文书
2014年“世界无车日”活动方案
2014/09/21 职场文书
2015年初中元旦晚会活动总结
2014/11/28 职场文书
python 实现德洛内三角剖分的操作
2021/04/22 Python
聊聊SpringBoot自动装配的魔力
2021/11/17 Java/Android
Linux下使用C语言代码搭建一个简单的HTTP服务器
2022/04/13 Servers