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 相关文章推荐
多文件上传的例子
Oct 09 PHP
php 用sock技术发送邮件的函数
Jul 21 PHP
Thinkphp中Create方法深入探究
Jun 16 PHP
php使用正则表达式获取图片url的方法
Jan 16 PHP
php禁止某ip或ip地址段访问的方法
Feb 25 PHP
PHP如何将log信息写入服务器中的log文件
Jul 29 PHP
WordPress中对访客评论功能的一些优化方法
Nov 24 PHP
简单了解WordPress开发中update_option()函数的用法
Jan 11 PHP
laravel手动创建数组分页的实现代码
Jun 07 PHP
Laravel5.4简单实现app接口Api Token认证方法
Aug 29 PHP
ThinkPHP5.1验证码功能实现的示例代码
Jun 08 PHP
php redis setnx分布式锁简单原理解析
Oct 23 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
《星际争霸2》终章已出 RTS时代宣告终结
2017/02/07 星际争霸
PHP下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
2011/06/09 PHP
php解析字符串里所有URL地址的方法
2015/04/03 PHP
PHP结合Mysql数据库实现留言板功能
2016/03/04 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
2020/08/26 PHP
PHP7 弃用功能
2021/03/09 PHP
[Web]防止用户复制页面内容和另存页面的方法
2009/02/06 Javascript
JavaScript replace(rgExp,fn)正则替换的用法
2010/03/04 Javascript
Node.js模块加载详解
2014/08/16 Javascript
node.js中的fs.realpath方法使用说明
2014/12/16 Javascript
jquery实现表单验证并阻止非法提交
2015/07/09 Javascript
针对初学者的jQuery入门指南
2015/08/15 Javascript
jQuery+Ajax实现无刷新操作
2016/01/04 Javascript
jquery对复选框(checkbox)的操作汇总
2016/01/13 Javascript
浅谈javascript中的constructor
2016/06/08 Javascript
微信小程序 input输入框详解及简单实例
2017/01/10 Javascript
Vue.Js中的$watch()方法总结
2017/03/23 Javascript
AngularJS动态菜单操作指令
2017/04/25 Javascript
详解vue.js的devtools安装
2017/05/26 Javascript
Node.js使用Express.Router的方法
2017/11/14 Javascript
JS调用安卓手机摄像头扫描二维码
2018/10/16 Javascript
nodejs 使用nodejs-websocket模块实现点对点实时通讯
2018/11/28 NodeJs
js中apply和call的理解与使用方法
2019/11/27 Javascript
js 图片懒加载的实现
2020/10/21 Javascript
python获取文件扩展名的方法
2015/07/06 Python
PyCharm的设置方法和第一个Python程序的建立
2019/01/16 Python
python在新的图片窗口显示图片(图像)的方法
2019/07/11 Python
Python实现串口通信(pyserial)过程解析
2019/09/25 Python
python、PyTorch图像读取与numpy转换实例
2020/01/13 Python
新闻发布会主持词
2014/03/28 职场文书
《天安门广场》教学反思
2014/04/23 职场文书
工商管理专业自荐信
2014/06/03 职场文书
委托书英文
2015/01/28 职场文书
谢师宴家长答谢词
2015/09/30 职场文书
redis requires ruby version2.2.2的解决方案
2021/07/15 Redis
vue里使用create, mounted调用方法
2022/04/26 Vue.js