MiniFramework 是一款遵循 Apache2 开源协议发布的,支持 MVC 和 RESTful 的超轻量级 PHP 开发框架。MiniFramework 能够帮助开发者用最小的学习成本快速构建 Web 应用,在满足开发者最基础的分层开发、数据库和缓存访问等少量功能基础上,做到尽可能精简,以帮助您的应用基于框架高效运行。
|--- App/ 应用案例 | |--- Api/ REST模式的API | |--- Cache/ 缓存 | |--- Config/ 配置 | | |--- database.php 数据库配置文件 | | | |--- Controller/ 控制器 | |--- Layout/ 布局 | |--- Model/ 模型 | |--- Public/ 站点根目录 | | |--- css/ css | | |--- img/ 图片 | | |--- js/ js | | |--- uploads/ 上传文件存储目录 | | |--- index.php 应用入口文件 | | | |--- View/ 视图 | |--- MiniFramework/ 框架核心目录 |---Base/ 基础类库 |---Bootstrap.php 引导程序
请将 Apache 或 Nginx 的站点根目录指向 App 中的 Public 目录。
如果你可以通过访问类似于
http://localhost/index.php?c=index&a=index
这样的 URL 获得一个“Hello World!”页面,这说明你已经部署成功了。
使用 MVC 开发模式时,通常需要为应用准备一个入口文件,所有对应用的访问请求都应指向这个入口文件,MiniFramework 也不例外。
在附带的应用案例中,找到 App/Public/index.php,这就是一个入口文件,其代码如下:
//应用命名空间(请与应用所在目录名保持一致) define('APP_NAMESPACE', 'App'); //应用路径 define('APP_PATH', dirname(dirname(__FILE__))); //是否显示错误信息 define('SHOW_ERROR', true); //是否启用布局功能 define('LAYOUT_ON', true); //是否开启REST模式的API接口功能(默认值:false) define('REST_ON', true); //引入 MiniFramework 就是这么简单 require dirname(APP_PATH) . DIRECTORY_SEPARATOR . 'MiniFramework' . DIRECTORY_SEPARATOR . 'Bootstrap.php';
在上边的代码中,最为关键的是最后一行,通过 require 命令引入 MiniFramework 的引导程序 Bootstrap.php。
在引入引导程序前,你还可以像案例中一样,通过 define 命令定义一些 MiniFramework 的关键常量,例如用于显示报错信息的常量 SHOW_ERROR 。
提示:MiniFramework 运行所需的全部常量可以在引导程序 Bootstrap.php 中找到(1.0.0 版之前引导程序名为 Mini.php)。
本框架在设置了 Rewrite 规则后,可实现类似下面这种伪静态访问方式
http://localhost/Controller/Action/param1/value1/param2/value2
运行于 Apache 的设置方法:
向 Public 目录中添加一个 .htaccess 文件(附带的应用案例中已提供),内容如下:
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^ index.php [L]
运行于 Nginx 的设置方法:
在 nginx.conf 中,找到对应的站点,向 server{} 中添加如下设置:
location / { index index.html index.php; if (!-e $request_filename) { rewrite ^/(.*)$ /index.php last; } }
控制器:只允许使用a-z、A-Z、0-9和_,并以大写字母开头,例如:Index.php
模型:只允许使用a-z、A-Z、0-9和_,并以大写字母开头,例如:Info.php
布局:只允许使用a-z、A-Z、0-9和_,并以字母开头,例如:header.php
从 1.0.0 版开始,MiniFramework 已全面启用命名空间,其中:
Mini 对应的框架核心
App 对应你的应用,可以通过定义常量 APP_NAMESPACE 的值来改变应用的命名空间,例如:
define('APP_NAMESPACE', 'MyApp'); //建议与应用目录名保持一致
创建控制器时,请在页面顶部放置用于声明命名空间的代码,例如:
namespace App\Controller; //声明当前页的命名空间 use Mini\Base\Action; //引入Action,因为Action是框架核心文件,所以前面要加Mini\Base\ class Index extends Action { function indexAction() { //... } }
创建模型时,同样要在页面顶部放置用于声明命名空间的代码,例如:
namespace App\Model; //声明当前页的命名空间为 App\Model use Mini\Base\Model; //引入框架核心文件 class Info extends Model { public function getInfo() { //... } }
MiniFramework 从 1.0.0 版开始,增加了对 RESTful 的支持,可以在入口文件 Public/index.php 中,定义常量 REST_ON 的值为 true 开启 REST 模式的 API 接口功能,例如:
define('REST_ON', true);
开启 REST 后,可以访问应用案例中附带的一个名为 Version 的接口 demo 进行测试
文件位于 App/Api/Version.php,访问方式为:http://你的域名/api/version
访问后,正常情况下会得到如下输出结果:
{"code":200,"msg":"success","data":"1.0.0"}
需要特别注意的是:如果你的项目中有使用 Api 命名的 Controller,将会因 REST 开启而失效,所有向 Api 的请求均会被指向 App/Api 目录。
提示:MiniFramework 的 REST 接口支持输出 JSON 和 XML 两种数据格式,附带的 demo 中已经进行了演示。
MiniFramework 目前只支持 MySQL 数据库,有自动和手动两种连接方式。
手动连接方法:
//如果未在页面顶部用 use 引入 Db,按照下面的写法,在 Db 前加上 \Mini\Db\ $db = \Mini\Db\Db::factory ('Mysql', array ( 'host' => 'localhost', //主机地址 'port' => 3306, //端口 'dbname' => 'mydbname', //库名 'username' => 'myuser', //用户名 'passwd' => '123456', //密码 'charset' => 'utf8', //字符编码 'persistent' => false //是否启用持久连接 ( true | false ) ) ); //还可以通过 Config 中的 load() 方法先读取数据库配置,再创建对象 $dbConfig = \Mini\Base\Config::getInstance()->load('database'); $db2 = Db::factory ('Mysql', $dbConfig['default']);
提示:Config::getInstance()->load(‘database’) 这个方法还可以传入 database:default 来直接获取 default 中的数据(从 1.0.0 开始支持)
自动连接方法:
MiniFramework 的自动连接数据库功能默认是关闭的,如需使用,请在你的应用入口文件 Public/index.php 中定义常量 DB_AUTO_CONNECT 的值为 true,例如:
define('DB_AUTO_CONNECT', true);
同时,还需要在 Config/database.php 中对数据库连接进行配置,例如:
$database['default'] = array ( 'host' => 'localhost', //主机地址 'port' => 3306, //端口 'dbname' => 'test', //库名 'username' => 'root', //用户名 'passwd' => '', //密码 'charset' => 'utf8', //字符编码 'persistent' => false //是否启用持久连接 ( true | false ) );
接下来就可以在模型中通过 $this->loadDb() 方法直接加载数据库对象了,例如:
namespace App\Model; use Mini\Base\Model; class Info extends Model //自动连接数据库,必须继承核心类 Model { public function getInfo() { //加载 key 为 default 的数据库 $db = $this->loadDb('default'); ... } }
MiniFramework 支持三种缓存方式,分别是:Memcache、Redis 和 File(磁盘文件存储)。
使用方法如下:
//以最常用的 Memcache 为例 $cache = \Mini\Cache\Cache::factory ('Memcache', array ( 'host' => 'localhost', //主机 'port' => 11211, //端口 'prefix' => 'MINI_' //缓存名前缀,默认值为空 ) ); //写入一个名为 test 的缓存,值为 abc,有效时间为 3600 秒 $cache->set('test', 'abc', 3600); //读取名为 test 的缓存 $test = $cache->get('test');
MiniFramework 的布局 (Layout) 功能默认是关闭的,如需使用,请在你的应用入口文件 Public/index.php 中定义常量 LAYOUT_ON 的值为 true,例如:
define('LAYOUT_ON', true);
提示:附带的应用案例中,已经开启了布局功能,并演示了如何使用布局。
MiniFramework 在初始化时,会自动加载一个全局函数库,你可以随时调用全局函数,例如:
//调用全局函数 pushJson() 输出一个 JSON 串并终止程序运行 pushJson($test);
提示:全局函数库位于 /Function/Global.func.php
关于控制器、模型和视图的使用方法,请参考附带的应用案例中提供的相关代码。
作者:Jason Wei
信箱:jasonwei06@hotmail.com
博客:http://www.sunbloger.com
MiniFramework 遵循 Apache License Version 2.0 开源协议发布。
协议详细内容请浏览项目目录中的 LICENSE 文件。