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 相关文章推荐
php数组函数序列之array_values() 获取数组元素值的函数与方法
Oct 30 PHP
利用ThinkPHP内置的ThinkAjax实现异步传输技术的实现方法
Dec 19 PHP
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
Jun 17 PHP
探讨:php中在foreach中使用foreach ($arr as &$value) 这种类型的解释
Jun 24 PHP
PHP面向对象之旅:深入理解static变量与方法
Jan 06 PHP
PHP缓存集成库phpFastCache用法
Dec 15 PHP
php实现四舍五入的方法小结
Mar 03 PHP
php限制上传文件类型并保存上传文件的方法
Mar 13 PHP
PHP 返回数组后处理方法(开户成功后弹窗提示)
Jul 03 PHP
PHP实现找出链表中环的入口节点
Jan 16 PHP
php使用QueryList轻松采集js动态渲染页面方法
Sep 11 PHP
Yii2.0建立公共方法简单示例
Jan 29 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
回首过去10年中最搞笑的10部动漫,哪一部让你节操尽碎?
2020/03/03 日漫
php 全局变量范围分析
2009/08/07 PHP
PHP删除数组中空值的方法介绍
2014/04/14 PHP
PHP正则表达式 /i, /is, /s, /isU等介绍
2014/10/23 PHP
php通过sort()函数给数组排序的方法
2015/03/18 PHP
PHP微信分享开发详解
2017/01/14 PHP
Laravel统一错误处理为JSON的方法介绍
2020/10/18 PHP
抽出www.templatemonster.com的鼠标悬停加载大图模板的代码
2007/07/11 Javascript
xml 封装与解析(javascript和C#中)
2009/07/26 Javascript
js文本框输入点回车触发确定兼容IE、FF等
2013/11/19 Javascript
JavaScript通过prototype给对象定义属性用法实例
2015/03/23 Javascript
jQuery Easyui学习教程之实现datagrid在没有数据时显示相关提示内容
2016/07/09 Javascript
Bootstrap CSS布局之按钮
2016/12/17 Javascript
Bootstrap路径导航与分页学习使用
2017/02/08 Javascript
Vue.js实战之通过监听滚动事件实现动态锚点
2017/04/04 Javascript
JS温故而知新之变量提升和时间死区
2019/01/27 Javascript
Vue2.0实现组件之间数据交互和通信操作示例
2019/05/16 Javascript
聊聊Vue 中 title 的动态修改问题
2019/06/11 Javascript
node.js实现带进度条的多文件上传
2020/03/27 Javascript
vue实现节点增删改功能
2019/09/26 Javascript
JS如何把字符串转换成json
2020/02/21 Javascript
[03:00]《DAC最前线》之欧美新秀VS老将
2015/02/01 DOTA
python根据出生年份简单计算生肖的方法
2015/03/27 Python
为Python的web框架编写前端模版的教程
2015/04/30 Python
详解Python中的type()方法的使用
2015/05/21 Python
Python中Iterator迭代器的使用杂谈
2016/06/20 Python
使用Python在Windows下获取USB PID&VID的方法
2019/07/02 Python
python区分不同数据类型的方法
2019/10/14 Python
零基础学Python之前需要学c语言吗
2020/07/21 Python
详解解决jupyter不能使用pytorch的问题
2021/02/18 Python
软件工程师面试题
2012/06/25 面试题
运动会入场式解说词
2014/02/18 职场文书
职称评定个人总结
2015/03/05 职场文书
考教师资格证不要错过的4个最佳时机
2019/07/17 职场文书
Dubbo+zookeeper搭配分布式服务的过程详解
2022/04/03 Java/Android
python数字图像处理实现图像的形变与缩放
2022/06/28 Python