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 相关文章推荐
在PHP3中实现SESSION的功能(三)
Oct 09 PHP
php-accelerator网站加速PHP缓冲的方法
Jul 30 PHP
paypal即时到账php实现代码
Nov 28 PHP
基于PHP静态类的原罪详解
May 06 PHP
zf框架的registry(注册表)使用示例
Mar 13 PHP
Yii中表单用法实例详解
Jan 05 PHP
CI框架整合smarty步骤详解
May 19 PHP
THINKPHP在添加数据的时候获取主键id的值方法
Apr 03 PHP
PHP获取文件扩展名的方法实例总结
Jun 10 PHP
PHP设计模式之PHP迭代器模式讲解
Mar 22 PHP
php过滤htmlspecialchars() 函数实现把预定义的字符转换为 HTML 实体用法分析
Jun 25 PHP
微信小程序结合ThinkPHP5授权登陆后获取手机号
Nov 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
PHP 年龄计算函数(精确到天)
2012/06/07 PHP
PHP打印输出函数汇总
2016/08/28 PHP
PHP针对多用户实现更换头像功能
2016/09/04 PHP
Laravel服务容器绑定的几种方法总结
2020/06/14 PHP
javascript与CSS复习(《精通javascript》)
2010/06/29 Javascript
浅谈javascript原型链与继承
2015/07/13 Javascript
由简入繁实现Jquery树状结构的方法(推荐)
2016/06/10 Javascript
ionic实现可滑动的tab选项卡切换效果
2020/04/15 Javascript
jquery实现下拉菜单的手风琴效果
2017/07/23 jQuery
Angular模板表单校验方法详解
2017/08/11 Javascript
Three.js基础学习教程
2017/11/16 Javascript
Angular 利用路由跳转到指定页面的指定位置方法
2018/08/31 Javascript
Vue全局loading及错误提示的思路与实现
2019/08/09 Javascript
微信小程序进入广告实现代码实例
2019/09/19 Javascript
微信接入之获取用户头像的方法步骤
2019/09/23 Javascript
[原创]使用豆瓣提供的国内pypi源
2017/07/02 Python
Python global全局变量函数详解
2018/09/18 Python
Python中反射和描述器总结
2018/09/23 Python
django项目搭建与Session使用详解
2018/10/10 Python
Python字符串内置函数功能与用法总结
2019/04/16 Python
使用pandas读取文件的实现
2019/07/31 Python
在pycharm中实现删除bookmark
2020/02/14 Python
Python3.7.0 Shell添加清屏快捷键的实现示例
2020/03/23 Python
Python实现SMTP邮件发送
2020/06/16 Python
Scrapy实现模拟登录的示例代码
2021/02/21 Python
HTML5 Canvas锯齿图代码实例
2014/04/10 HTML / CSS
在线吉他课程,学习如何弹吉他:Fender Play
2019/02/28 全球购物
澳大利亚在线家具店:Luxo Living
2019/03/24 全球购物
《花瓣飘香》教学反思
2014/04/15 职场文书
禁止高声喧哗的标语
2014/06/11 职场文书
2014年有孩子的离婚协议书范本
2014/10/08 职场文书
庆祝国庆节标语
2014/10/09 职场文书
2014年局领导班子自身建设情况汇报
2014/11/21 职场文书
出纳试用期自我评价
2015/03/10 职场文书
万能密码的SQL注入漏洞其PHP环境搭建及防御手段
2021/09/04 SQL Server
Python何绘制带有背景色块的折线图
2022/04/23 Python