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输出1000以内质数(素数)示例
Feb 16 PHP
php使用PDO方法详解
Dec 27 PHP
PHP实现获取客户端IP并获取IP信息
Mar 17 PHP
PHP正则表达式过滤html标签属性(DEMO)
May 04 PHP
关于php中一些字符串总结
May 05 PHP
PHP简单判断手机设备的方法
Aug 23 PHP
解决微信授权回调页面域名只能设置一个的问题
Dec 11 PHP
php技巧小结【推荐】
Jan 19 PHP
PHP静态成员变量和非静态成员变量详解
Feb 14 PHP
php实现自定义中奖项数和概率的抽奖函数示例
May 26 PHP
PHP检查URL包含特定字符串实例方法
Feb 11 PHP
PHP切割汉字的常用方法实例总结
Apr 27 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 md5下16位和32位的实现代码
2008/04/09 PHP
php adodb连接带密码access数据库实例,测试成功
2008/05/14 PHP
php格式化金额函数分享
2015/02/02 PHP
php限制ip地址范围的方法
2015/03/31 PHP
Phpstorm+Xdebug断点调试PHP的方法
2018/05/14 PHP
JavaScript constructor和instanceof,JSOO中的一对欢喜冤家
2009/05/25 Javascript
高性能WEB开发 flush让页面分块,逐步呈现 flush让页面分块,逐步呈现
2010/06/19 Javascript
一个可绑定数据源的jQuery数据表格插件
2010/07/17 Javascript
juqery 学习之三 选择器 可见性 元素属性
2010/11/25 Javascript
深入理解JavaScript系列(38):设计模式之职责链模式详解
2015/03/04 Javascript
javascript实现checkBox的全选,反选与赋值
2015/03/12 Javascript
JavaScript动态添加列的方法
2015/03/25 Javascript
jQuery实现为控件添加水印文字效果(附源码)
2015/12/02 Javascript
判断JS对象是否拥有某属性的方法推荐
2016/05/12 Javascript
详解node.js平台下Express的session与cookie模块包的配置
2017/04/26 Javascript
原生js实现滑块区间组件
2021/01/20 Javascript
[54:53]完美世界DOTA2联赛PWL S2 GXR vs PXG 第二场 11.18
2020/11/18 DOTA
Python单链表的简单实现方法
2014/09/23 Python
python实现支持目录FTP上传下载文件的方法
2015/06/03 Python
浅谈五大Python Web框架
2017/03/20 Python
用Python和WordCloud绘制词云的实现方法(内附让字体清晰的秘笈)
2019/01/08 Python
在python带权重的列表中随机取值的方法
2019/01/23 Python
Python实现定时自动关闭的tkinter窗口方法
2019/02/16 Python
Spring Boot中使用IntelliJ IDEA插件EasyCode一键生成代码详细方法
2020/03/20 Python
关于jupyter打开之后不能直接跳转到浏览器的解决方式
2020/04/13 Python
CSS3 transforms应用于背景图像的解决方法
2019/04/16 HTML / CSS
阻止移动设备(手机、pad)浏览器双击放大网页的方法
2014/06/03 HTML / CSS
h5移动端调用支付宝、微信支付的实现
2020/06/08 HTML / CSS
管理站站长岗位职责
2013/11/27 职场文书
校园学雷锋活动月总结
2014/03/09 职场文书
行政管理专业求职信
2014/07/06 职场文书
乡镇食品安全责任书
2014/07/28 职场文书
党的群众路线领导班子整改方案
2014/09/27 职场文书
七年级作文之《我和我的祖国》观后感作文
2019/10/18 职场文书
导游词之山西关帝庙
2019/11/01 职场文书
Mysql中有关Datetime和Timestamp的使用总结
2021/12/06 MySQL