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桌面中心(二) 数据库写入
Mar 11 PHP
Ajax PHP简单入门教程代码
Apr 25 PHP
火车采集器 免费版使出收费版本功能实现原理
Sep 17 PHP
php使HTML标签自动补全闭合函数代码
Oct 04 PHP
深入理解php的MySQL连接类
Jun 07 PHP
zf框架db类的分页示例分享
Mar 14 PHP
php实现使用正则将文本中的网址转换成链接标签
Dec 03 PHP
php中使用in_array() foreach array_search() 查找数组是否包含时的性能对比
Apr 14 PHP
php生成高清缩略图实例详解
Dec 07 PHP
PHP开发中csrf攻击的简单演示和防范
May 07 PHP
thinkPHP5.0框架事务处理操作简单示例
Sep 07 PHP
laravel 实现根据字段不同值做不同查询
Oct 23 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
文章推荐系统(二)
2006/10/09 PHP
php微信公众平台示例代码分析(二)
2016/12/06 PHP
php使用str_replace替换多维数组的实现方法分析
2017/06/15 PHP
Laravel学习教程之IOC容器的介绍与用例
2017/08/15 PHP
php使用curl模拟浏览器表单上传文件或者图片的方法
2018/11/10 PHP
laravel 数据迁移与 Eloquent ORM的实现方法
2019/04/12 PHP
JQuery实现倒计时按钮的实现代码
2012/03/23 Javascript
JavaScript执行效率与性能提升方案
2012/12/21 Javascript
Javascript图像处理思路及实现代码
2012/12/25 Javascript
jquery 淡入淡出效果的简单实现
2014/02/07 Javascript
解决node-webkit 不支持html5播放mp4视频的方法
2015/03/11 Javascript
js实现精确到秒的倒计时效果
2016/05/29 Javascript
从源码里了解vue中的nextTick的使用
2018/11/22 Javascript
微信小程序访问豆瓣电影api的实现方法
2019/03/31 Javascript
JS解惑之Object中的key是有序的么
2019/05/06 Javascript
Vue代码整洁之去重方法整理
2019/08/06 Javascript
小程序Request的另类用法详解
2019/08/09 Javascript
使用Vue调取接口,并渲染数据的示例代码
2019/10/28 Javascript
[01:41]DOTA2超级联赛专访YYF 称一辈子难忘TI2
2013/05/28 DOTA
跟老齐学Python之玩转字符串(2)更新篇
2014/09/28 Python
python实现QQ批量登录功能
2019/06/19 Python
python内置模块collections知识点总结
2019/12/19 Python
python 操作hive pyhs2方式
2019/12/21 Python
Python获取浏览器窗口句柄过程解析
2020/07/25 Python
使用css实现android系统的loading加载动画
2019/07/25 HTML / CSS
Canvas多边形绘制的实现方法
2019/08/05 HTML / CSS
世界上最大的售后摩托车零配件超市:J&P Cycles
2017/12/08 全球购物
LivingSocial爱尔兰:爱尔兰本地优惠
2018/08/10 全球购物
水果超市创业计划书
2014/01/27 职场文书
汽车队司机先进事迹材料
2014/02/01 职场文书
校园绿化美化方案
2014/06/08 职场文书
国际贸易实务实训报告
2014/11/05 职场文书
因家庭原因离职的辞职信范文
2015/05/12 职场文书
员工规章制度范本
2015/08/07 职场文书
2016年七夕爱情寄语
2015/12/04 职场文书
Python 如何将integer转化为罗马数(3999以内)
2021/06/05 Python