Thinkphp 框架扩展之应用模式实现方法分析


Posted in PHP onApril 27, 2020

本文实例讲述了Thinkphp 框架扩展之应用模式实现方法。分享给大家供大家参考,具体如下:

应用模式

应用模式是你的生活环境 开发环境 执行环境 ,就好比一个框架的应用场景(模式),是指这个框架在哪个平台上运行,

thinkphp中SAE、普通、API三种模式,

  • 普通是指用于普通WEB开发和运行方式,
  • API是指用作API请求服务端,大多为别的客户端进行服务,供远程调用
  • SAE是指在新浪的SAE平台上用的

不同的模式下配置都是不一样的

应用模式提供了对核心框架进行改造的机会,可以让你的应用适应更多的环境和不同的要求。

每个应用模式有自己的模式定义文件,用于配置当前模式需要加载的核心文件和配置文件,以及别名定义、行为扩展定义等等。根据模式定义文件的定义位置和入口是否需要定义模式,可以分为显式应用模式和隐含应用模式。

显式应用模式

显式应用模式的模式定义文件位于ThinkPHP\Mode目录,如果我们要增加一个应用模式,只需要在该目录下面定义一个模式定义文件即可,下面是一个典型的模式定义文件(lite.php):

return array(
  // 配置文件
  'config'  => array(
    THINK_PATH.'Conf/convention.php',  // 系统惯例配置
    CONF_PATH.'config.php',   // 应用公共配置
  ),
 
  // 别名定义
  'alias'   => array(
    'Think\Exception'     => CORE_PATH . 'Exception'.EXT,
    'Think\Model'       => CORE_PATH . 'Model'.EXT,
    'Think\Db'        => CORE_PATH . 'Db'.EXT,
    'Think\Cache'       => CORE_PATH . 'Cache'.EXT,
    'Think\Cache\Driver\File' => CORE_PATH . 'Cache/Driver/File'.EXT,
    'Think\Storage'      => CORE_PATH . 'Storage'.EXT,
  ),
 
  // 函数和类文件
  'core'   => array(
    MODE_PATH.'Lite/functions.php',
    COMMON_PATH.'Common/function.php',
    MODE_PATH . 'Lite/App'.EXT,
    MODE_PATH . 'Lite/Dispatcher'.EXT,
    MODE_PATH . 'Lite/Controller'.EXT,
    MODE_PATH . 'Lite/View'.EXT,
    CORE_PATH . 'Behavior'.EXT,
  ),
  // 行为扩展定义
  'tags' => array(
    'view_parse'  => array(
      'Behavior\ParseTemplate', // 模板解析 支持PHP、内置模板引擎和第三方模板引擎
    ),
    'template_filter'=> array(
      'Behavior\ContentReplace', // 模板输出替换
    ),
  ),
);

我们在ThinkPHP/Mode/Lite目录下面创建functions.php函数库文件,以及App.class.phpDispatcher.class.phpController.class.phpView.class.php,这些类都是针对我们新的应用模式定制的核心类,但是和标准模式的命名空间是一致的,也就是说都在Think命名空间下面。

ThinkPHP/Mode/Lite目录用于存放该应用模式下面的所有自定义文件。

应用模式定义文件定义好后,我们就可以在应用中使用该模式了,例如:

define('MODE_NAME','lite');
define('APP_PATH','./Application/');
require './ThinkPHP/ThinkPHP.php';

隐含应用模式

隐含应用模式的模式定义文件位于应用的配置目录下面 Application/Common/Conf/core.php,模式定义文件和显式应用模式的定义文件一样。 使用隐含应用模式的时候,不需要在入口文件中定义MODE_NAME,或者说存在隐含应用模式定义文件的时候,MODE_NAME定义无效。

注意:如果应用中定义的应用模式需要使用其他的存储类型,需要在入口文件中定义。

define('STORAGE_TYPE','Bae');

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
解决了Ajax、MySQL 和 Zend Framework 的乱码问题
Mar 03 PHP
php生成的html meta和link标记在body标签里 顶部有个空行
May 18 PHP
用php实现选择排序的解决方法
May 04 PHP
php检查是否是ajax请求的方法
Apr 16 PHP
thinkPHP模型初始化实例分析
Dec 03 PHP
php结合md5实现的加密解密方法
Jan 25 PHP
PHP模板引擎Smarty自定义变量调解器用法
Apr 11 PHP
PHP在linux上执行外部命令的方法
Feb 06 PHP
利用PHP判断是手机移动端还是PC端访问的函数示例
Dec 14 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
Jun 16 PHP
PHP的mysqli_ssl_set()函数讲解
Jan 23 PHP
Laravel统计一段时间间隔的数据方法
Oct 09 PHP
php让json_encode不自动转义斜杠“/”的方法
Apr 27 #PHP
PHP Pipeline 实现中间件的示例代码
Apr 26 #PHP
PHP设计模式入门之状态模式原理与实现方法分析
Apr 26 #PHP
PHP设计模式入门之迭代器模式原理与实现方法分析
Apr 26 #PHP
PHP中迭代器的简单实现及Yii框架中的迭代器实现方法示例
Apr 26 #PHP
PHP设计模式之迭代器模式Iterator实例分析【对象行为型】
Apr 26 #PHP
Yii Framework框架开发微信公众平台示例
Apr 26 #PHP
You might like
应用开发中涉及到的css和php笔记分享
2011/08/02 PHP
php写的带缓存数据功能的mysqli类
2012/09/06 PHP
thinkPHP中create方法与令牌验证实例浅析
2015/12/08 PHP
PHP常见数组排序方法小结
2018/08/20 PHP
jQuery $.data()方法使用注意细节
2012/12/31 Javascript
制作jquery遮罩层效果导航菜单代码分享
2013/12/25 Javascript
javascript定义变量时有var和没有var的区别探讨
2014/07/21 Javascript
ie8下修改input的type属性报错的解决方法
2014/09/16 Javascript
node.js中的url.parse方法使用说明
2014/12/10 Javascript
javascript中Math.random()使用详解
2015/04/15 Javascript
理解 JavaScript Scoping & Hoisting(二)
2015/11/18 Javascript
WEB前端开发框架Bootstrap3 VS Foundation5
2016/05/16 Javascript
详解webpack es6 to es5支持配置
2017/05/04 Javascript
解决IE11 vue +webpack 项目中数据更新后页面没有刷新的问题
2018/09/25 Javascript
Angular2实现的秒表及改良版示例
2019/05/10 Javascript
JavaScript设计模式之门面模式原理与实现方法分析
2020/03/09 Javascript
通过js随机函数Math.random实现乱序
2020/05/19 Javascript
[03:14]2014DOTA2西雅图国际邀请赛 EG战队巡礼
2014/07/07 DOTA
在树莓派2或树莓派B+上安装Python和OpenCV的教程
2015/03/30 Python
详解Python使用simplejson模块解析JSON的方法
2016/03/24 Python
python基础while循环及if判断的实例讲解
2017/08/25 Python
python利用小波分析进行特征提取的实例
2019/01/09 Python
使用Python实现企业微信的自动打卡功能
2019/04/30 Python
深入浅析Python 中 is 语法带来的误解
2019/05/07 Python
python 利用pyttsx3文字转语音过程详解
2019/09/25 Python
Python短信轰炸的代码
2020/03/25 Python
python爬虫构建代理ip池抓取数据库的示例代码
2020/09/22 Python
Html5自定义字体解决方法
2019/10/09 HTML / CSS
Java工程师面试集锦之Spring框架
2013/06/16 面试题
ddl,dml和dcl的含义
2016/05/08 面试题
微型企业创业投资计划书
2014/01/10 职场文书
文化产业实施方案
2014/06/07 职场文书
民主生活会剖析材料
2014/09/30 职场文书
齐云山导游词
2015/02/06 职场文书
java中用float时,数字后面加f,这样是为什么你知道吗
2021/09/04 Java/Android
Go结合Gin导出Mysql数据到Excel表格
2022/08/05 Golang