13.7 模式扩展
匿名 · 更新于 2013/12/26
模式扩展属于系统核心级别的扩展,可以改变底层的架构体系。在众多扩展中,也只有模式扩展具有改变和替换核心MVC的可能,其他扩展只是在标准模式基础之上的增强和替换,无法从根本上改变底层的架构。所以,大家会看到不同的模式扩展可能具有很大的用法区别,有些模式扩展是为某个特别的应用环境而定制的,例如CLI模式、AMF模式和PHPRPC模式。
新版对模式扩展的改进和行为扩展的增强使得开发人员对底层框架的DIY更加方便,也正是因为支持对框架底层进行DIY,使得ThinkPHP能够满足企业开发中更加复杂的项目需求。
新版对模式扩展的改进和行为扩展的增强使得开发人员对底层框架的DIY更加方便,也正是因为支持对框架底层进行DIY,使得ThinkPHP能够满足企业开发中更加复杂的项目需求。
使用模式扩展
我们前面所涉及的所有用法都是基于框架内置的标准模式的,除了标准模式之外,官方还提供了一些常用的模式扩展,模式扩展的目录位于Extend/Mode下面,已经提供的包括:Cli(命令模式)、Lite(精简模式)、Thin(简洁模式)、AMF模式、PHPRPC模式和REST模式,他们为不同的需求提供了不同的底层框架解决方案。通常来说不同的模式之间是无法进行切换。要使用某个扩展模式,需要修改项目的入口文件,添加一行定义代码:
define('MODE_NAME','模式扩展名称');
具体不同模式的用法需要参考每个模式扩展的帮助文件。
1
简洁模式
简洁模式相当于标准模式的主要区别在于:默认不使用任何模板引擎(可以自己在操作方法里面调用);
模型仅支持原生SQL操作和事务;
支持多数据库切换和连接;
默认仅支持MySQL数据库;
不支持语言包、模块分组、模板主题和Dispatch功能;
去除了大部分扩展机制;
如果你的应用选择了Mysql数据库,并且完全使用原生SQL操作,并希望有一个轻巧的核心,那么简洁模式是一个很好的选择。
要使用简洁模式,需要在项目的入口文件中添加模式定义:
define('MODE_NAME','Thin'); // 采用简洁模式运行
精简模式
精简模式在简洁模式的基础上,增加了:默认使用PHP模板;
支持不带路由的Dispatch;
支持不带回调接口的CURD操作;
支持连贯操作、统计查询;
精简模式比简洁模式在模型方面多了CURD和连贯操作,如果你习惯于使用PHP作为模板,并且还是喜欢使用模型的CURD功能,但又不希望核心那么庞大,那么精简模式是一个不错的选择。
要使用精简模式,需要在项目的入口文件中添加模式定义:
define('MODE_NAME','Lite'); // 采用精简模式运行
命令模式
命令模式用于支持命令行模式下面的PHP应用,需要在入口文件设置:define('MODE_NAME', 'cli'); // 采用CLI运行模式运行
一、PATHINFO参数模式(URL_MODEL为1)
在PATHINFO参数模式下面,我们可以这样调用模块和操作
index.php module/action/id/4
在普通参数模式下面 ,我们需要这样调用模块和操作
index.php module action id 4
index.php Info/read/category/2/id/4
AMF模式
AMF模式采用了ZendAMF类库,支持AMF开发和Flash进行通讯。首先,我们需要设置当前运行模式为Amf模式,在入口文件中增加下面代码:define('MODE_NAME', 'amf'); // 采用Amf运行模式运行
'APP_AMF_ACTIONS'=>'Index,User,Shop…' // 定义AMF模式的模块列表
最后一步就是在你的Flash客户端或者AS脚本中修改Amf的网关地址为当前项目的入口地址即可。
PHPRPC模式
首先,我们设置当前运行模式为Phprpc模式:define('MODE_NAME', 'phprpc'); // 采用Phprpc运行模式运行
'APP_PHPRPC_ACTIONS'=>'Index,User,Shop…' // 定义PHPRPC模式的模块列表
REST模式
Rest模式主要是为了支持RESTFul的开发,鉴于目前Rest主要用来提供接口服务,所以单独作为模式扩展来使用。首先,我们设置当前运行模式为rest模式:define('MODE_NAME', 'rest'); // 采用rest模式运行
定制模式扩展
要定制自己的模式扩展,首先要定义模式扩展的定义文件,定义文件位于Extend/Mode目录下面,命名就是模式扩展的名称(全部为小写),定义文件是一个数组,包括:| core | 系统核心列表文件定义 |
|---|---|
| config | 模式配置文件 |
| alias | 模式别名定义文件 |
| extends | 模式系统行为定义 |
| tags | 应用行为定义文件 |
config是模式配置定义,可以采用文件名或者直接用数组定义的方式。
alias是模式别名定义,可以采用文件名或者直接用数组定义的方式。
extends是模式系统行为定义,可以采用文件名或者直接用数组定义的方式。
tags是应用行为定义,可以采用文件名或者直接用数组定义的方式。
上面这些定义,只有需要的时候才要定义,如果没有则可不必定义,一般core定义是模式扩展必须的,改变核心列表文件的定义就能起到自定义MVC的目的。
例如,命令行模式的模式定义文件为:
// 命令行模式定义文件return array('core' => array(MODE_PATH.'Cli/functions.php', // 命令行系统函数库MODE_PATH.'Cli/Log.class.php',MODE_PATH.'Cli/App.class.php',MODE_PATH.'Cli/Action.class.php',),// 项目别名定义文件 [支持数组直接定义或者文件名定义]'alias' => array('Model' => MODE_PATH.'Cli/Model.class.php','Db' => MODE_PATH.'Cli/Db.class.php','Cache' => CORE_PATH.'Core/Cache.class.php','Debug' => CORE_PATH.'Util/Debug.class.php',),// 系统行为定义文件'extends' => array(),);
REPL for thinkphp 模式扩展
简单来说,REPL是一个shell版本的交互运行模式。输入代码即可直接运行,并查看运行结果。与web运行相比,不需要web环境,不需要将代码写到php文件中,再去访问。在测试代码、线上调试、线上运行数据统计方面,可以说是非常方便。REPL for thinkphp,便是通过php cli模式,加载thinkphp中定义的常量、模型、控制器,可以直接在命令行中直接获取运行命令后的结果。比如,要获取最新注册的一个用户,按常规的办法,肯定是添加一个控制器,添加一个方法,调用M("User")->find(),并把代码写到文件中,上传到服务器,然后访问这个方法的url。而repl模式,则只需要在shell敲入M("User")->find(); 就可以看到结果了。
REPL for thinkphp 安装及使用说明:
A. 支持平台(Windows不支持):Linux Centos 5.5
Ubuntu 13.04
Linux Deepin 12.12.1
Mac OS X 10.7.5
B. 依赖条件
1. PHP 5.3.0 +
2. Readline moudle(php5-readline)
3. pcntl_signal(PHP for OS X http://php-osx.liip.ch/)
C. ThinkPHP版本要求
1. 3.1、3.2核心:https://github.com/liu21st/thinkphp
2. 最新版Extend扩展包:https://github.com/liu21st/extend
D.使用方法:
1. 按正常流程开发Thinkphp项目,并将Extend扩展包下载到ThinkPHP/Extend目录下
2. 复制入口文件index.php为cli.php,并在cli.php添加两行配置define('MODE_NAME', 'cli');define('MODE_REPL', true);
3. 使用命令行访问cli.php,如 /usr/bin/php /www/cli.php
4. shell中可以使用php的语法,运算方法,Thinkphp的A、D、M、U等所有语法和常量,并能直接输出运行结果
E.图片展示:




