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 相关文章推荐
一个程序下载的管理程序(一)
Oct 09 PHP
解决MySQL中文输出变成问号的问题
Jun 05 PHP
PHP学习笔记(一) 简单了解PHP
Aug 04 PHP
PHP的switch判断语句的“高级”用法详解
Oct 01 PHP
Laravel 5 框架入门(三)
Apr 09 PHP
thinkphp实现图片上传功能
Jan 13 PHP
利用PHP自动生成印有用户信息的名片
Aug 01 PHP
php基于curl实现的股票信息查询类实例
Nov 11 PHP
CI框架AR数据库操作常用函数总结
Nov 21 PHP
PHP实现文件下载【实例分享】
Apr 28 PHP
thinkPHP中U方法加密传递参数功能示例
May 29 PHP
php常用字符串查找函数strstr()与strpos()实例分析
Jun 21 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
CodeIgniter框架提示Disallowed Key Characters的解决办法
2014/04/21 PHP
php mb_substr()函数截取中文字符串应用示例
2014/07/29 PHP
php实现扫描二维码根据浏览器类型访问不同下载地址
2014/10/15 PHP
Yii框架中memcache用法实例
2014/12/03 PHP
10个超级有用值得收藏的PHP代码片段
2015/01/22 PHP
php array_values 返回数组的所有值详解及实例
2016/11/12 PHP
潜说js对象和数组
2011/05/25 Javascript
js判断是否为数组的函数: isArray()
2011/10/30 Javascript
获取服务器传来的数据 用JS去空格的正则表达式
2012/03/26 Javascript
制作jquery遮罩层效果导航菜单代码分享
2013/12/25 Javascript
浅析Node在构建超媒体API中的作用
2014/07/30 Javascript
javascript中setTimeout使用指南
2015/07/26 Javascript
jQuery模拟原生态App上拉刷新下拉加载更多页面及原理
2015/08/10 Javascript
AngularJS自定义控件实例详解
2016/12/13 Javascript
JavaScript数据结构之数组的表示方法示例
2017/04/12 Javascript
Bootstrap框架建立树形菜单(Tree)的实例代码
2017/10/30 Javascript
基于Vue2.X的路由和钩子函数详解
2018/02/09 Javascript
Vue2.0结合webuploader实现文件分片上传功能
2018/03/09 Javascript
JavaScript插入排序算法原理与实现方法示例
2018/08/06 Javascript
利用原生JavaScript实现造日历轮子实例代码
2019/05/08 Javascript
egg.js的基本使用和调用数据库的方法示例
2019/05/18 Javascript
JavaScript直接调用函数与call调用的区别实例分析
2020/05/22 Javascript
H5 js点击按钮复制文本到粘贴板
2020/11/19 Javascript
Python中异常重试的解决方案详解
2017/05/05 Python
Python使用wxPython实现计算器
2018/01/30 Python
python sklearn包——混淆矩阵、分类报告等自动生成方式
2020/02/28 Python
接口的多继承会带来哪些问题
2015/08/17 面试题
检讨书大全
2015/01/27 职场文书
店铺转让协议书
2015/01/29 职场文书
毕业生登记表班级意见
2015/06/05 职场文书
早恋主题班会
2015/08/14 职场文书
重阳节主题班会
2015/08/17 职场文书
继续教育心得体会(共6篇)
2016/01/19 职场文书
MySQL表字段时间设置默认值
2021/05/13 MySQL
Pytorch数据读取之Dataset和DataLoader知识总结
2021/05/23 Python
深入理解pytorch库的dockerfile
2022/06/10 Python