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 相关文章推荐
Session的工作方式
Oct 09 PHP
第四节--构造函数和析构函数
Nov 16 PHP
php daodb插入、更新与删除数据
Mar 19 PHP
Ajax+PHP 边学边练 之二 实例
Nov 24 PHP
在PHP中PDO解决中文乱码问题的一些补充
Sep 06 PHP
《PHP编程最快明白》第七讲:php图片验证码与缩略图
Nov 01 PHP
PHP删除HTMl标签的三种解决方法
Jun 30 PHP
深入解析PHP中的(伪)多线程与多进程
Jul 01 PHP
php文件缓存方法总结
Mar 16 PHP
PHPCMS忘记后台密码的解决办法
Oct 30 PHP
thinkphp3.2实现在线留言提交验证码功能
Jul 19 PHP
TP5框架实现自定义分页样式的方法示例
Apr 05 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中使用curl伪造IP的简单方法
2015/08/07 PHP
php实现scws中文分词搜索的方法
2015/12/25 PHP
ecshop适应在PHP7的修改方法解决报错的实现
2016/11/01 PHP
Laravel修改验证提示信息为中文的示例
2019/10/23 PHP
学习ExtJS form布局
2009/10/08 Javascript
js函数的引用, 关于内存的开销
2012/09/17 Javascript
javascript与cookie 的问题详解
2013/11/11 Javascript
jquery获取css中的选择器(实例讲解)
2013/12/02 Javascript
用html+css+js实现的一个简单的图片切换特效
2014/05/28 Javascript
jQuery中:button选择器用法实例
2015/01/04 Javascript
教你JS中的运算符乘方、开方及变量格式转换
2016/08/09 Javascript
工厂模式在JS中的实践
2017/01/18 Javascript
从零学习node.js之express入门(六)
2017/02/25 Javascript
对vue中methods互相调用的方法详解
2018/08/30 Javascript
使用canvas实现一个vue弹幕组件功能
2018/11/30 Javascript
vue组件之间通信方式实例总结【8种方式】
2019/02/22 Javascript
微信小程序 可搜索的地址选择实现详解
2019/08/28 Javascript
js实现简单进度条效果
2020/03/25 Javascript
JavaScript装箱及拆箱boxing及unBoxing用法解析
2020/06/15 Javascript
[49:08]OpTic vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python ip正则式
2009/05/07 Python
Python的Django框架中的select_related函数对QuerySet 查询的优化
2015/04/01 Python
python中is与双等于号“==”的区别示例详解
2017/11/21 Python
python实现壁纸批量下载代码实例
2018/01/25 Python
Python绘制KS曲线的实现方法
2018/08/13 Python
Python异常处理知识点总结
2019/02/18 Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
2019/02/22 Python
如何在python开发工具PyCharm中搭建QtPy环境(教程详解)
2020/02/04 Python
建筑毕业生自我鉴定
2013/10/18 职场文书
网络教育自我鉴定
2014/02/04 职场文书
《我不是最弱小的》教学反思
2014/02/23 职场文书
大学生村官座谈会发言材料
2014/05/25 职场文书
关于感恩的演讲稿500字
2014/08/26 职场文书
公务员考察材料范文
2014/12/23 职场文书
医院病假条范文
2015/08/17 职场文书
Python答题卡识别并给出分数的实现代码
2021/06/22 Python