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 会话(session 时间设定)使用入门代码
Jun 05 PHP
PHP新手用的Insert和Update语句构造类
Mar 31 PHP
Zend的MVC机制使用分析(一)
May 02 PHP
解析Linux下Varnish缓存的配置优化
Jun 20 PHP
Yii的CDbCriteria查询条件用法实例
Dec 04 PHP
php+mysqli使用面向对象方式更新数据库实例
Jan 29 PHP
浅谈COOKIE和SESSION区别
Jul 19 PHP
学习php设计模式 php实现装饰器模式(decorator)
Dec 07 PHP
php用正则判断是否为数字的方法
Mar 25 PHP
php版微信公众平台回复中文出现乱码问题的解决方法
Sep 22 PHP
PHP实现时间比较和时间差计算的方法示例
Jul 24 PHP
laravel与thinkphp之间的区别与优缺点
Mar 02 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会话(Session)实现用户登陆功能
2013/06/29 PHP
PHP实现的下载远程图片自定义函数分享
2015/01/28 PHP
php实现将数据做成json的格式给前端使用
2018/08/21 PHP
PHP实现页面静态化深入讲解
2021/03/04 PHP
JSON 入门指南 想了解json的朋友可以看下
2009/08/26 Javascript
Extjs中使用extend(js继承) 的代码
2012/03/15 Javascript
javascript消除window.close()的提示窗口
2015/05/20 Javascript
HTML5使用DeviceOrientation实现摇一摇功能
2015/06/05 Javascript
jQuery手机拨号界面特效代码分享
2015/08/27 Javascript
javascript中eval和with用法实例总结
2015/11/30 Javascript
jQuery Easyui实现左右布局
2016/01/26 Javascript
基于jQuery实现仿微博发布框字数提示
2016/07/27 Javascript
在Web项目中引入Jquery插件报错的完美解决方案(图解)
2016/09/19 Javascript
VUE开发一个图片轮播的组件示例代码
2017/03/06 Javascript
google广告之另类js调用实现代码
2020/08/22 Javascript
利用Python的Django框架中的ORM建立查询API
2015/04/20 Python
python杀死一个线程的方法
2015/09/06 Python
两个命令把 Vim 打造成 Python IDE的方法
2016/03/20 Python
浅谈python字典多键值及重复键值的使用
2016/11/04 Python
浅谈Python基础之I/O模型
2017/05/11 Python
儿童编程python入门
2018/05/08 Python
Selenium+Python 自动化操控登录界面实例(有简单验证码图片校验)
2019/06/28 Python
解析pip安装第三方库但PyCharm中却无法识别的问题及PyCharm安装第三方库的方法教程
2020/03/10 Python
Django-xadmin后台导入json数据及后台显示信息图标和主题更改方式
2020/03/11 Python
Python基于paramunittest模块实现excl参数化
2020/04/26 Python
基于Python把网站域名解析成ip地址
2020/05/25 Python
如何用python实现一个HTTP连接池
2021/01/14 Python
python os.listdir()乱码解决方案
2021/01/31 Python
KENZO官网:高田贤三在法国创立的品牌
2019/05/16 全球购物
文员个人的求职信范文
2013/09/26 职场文书
物流仓管员工作职责
2014/01/06 职场文书
师范教师专业大学生职业生涯规划范文
2014/03/02 职场文书
水污染治理工程专业自荐信
2014/06/21 职场文书
房屋租赁授权委托书范本
2014/09/20 职场文书
爱情保证书
2015/01/17 职场文书
JS中如何优雅的使用async await详解
2021/10/05 Javascript