TmacPHP MVC Framework是php mvc框架 OOP
项目入口目录在wwwroot深层级,这样保证web目录访问不到程序文件,提高安全性。
server_name www.weixinshow.com;
root /var/www/www.weixinshow.com/Apps/helloworld/wwwroot/;
在每个app功能块的 APP_NAME/wwwroot/index.php//代码里有详细注释
Project/database.config.php //数据库及URL配置文件
Project/Tmac.config.php //框架配置文件
Project/Apps/{APP_NAME}/application/Config/config.php //每个APP_NAME的配置文件。
默认控制器取名 index.php;
class indexAction extends service_Controller_www
{
public function __construct()
{
parent::__construct();
}
public function index()
{
$goods_model = new service_goods_Detail_www();
$goods_model->setGoodsId ( $goods_id );
$goods_info = $goods_model->getGoodsDetail();
$array['title'] = 'TmacPHP MVC Framework';
$array['goods_info'] = $goods_info;
$this->assign( $array );
$this->V( 'index' );
}
}
View层在 APP_NAME/application/View/default/index.tpl 支持标签和原生PHP两种
<html>
<head>
<title>Hello World</title>
</head>
<body>
<!--{template inc/header}-->
{loop $result $k $v}
<li>{$v->title}</li>
{/loop}
{if empty($title)}
<h2>没有标题</h2?
{else}
<h2>{$title}</h2>
{/if}
{$content}
</body>
</html>
<!-下面是原生模板标签-->
<html>
<title><?php echo $title;?></title>
<?php foreach($result AS $k=>$v):?>
<li><?php echo $v->title;?></li>
<?php endforeach;?>
<?php if ($a == 5): ?>
<div>等于5</div>
<?php elseif ($a == 6): ?>
<div>等于5</div>
<?php else: ?>
<div>不是5就是6</div>
<?php endif; ?>
<?php include Tmac::loadView ( 'inc/header' );?>
<?php include 'inc/com.tpl';?>
</html>
//比如在电商项目中的封装了一个促销规则计算处理的函数,
service_goods_Detail_base
protected function getPromotions($goods_id)
//在后台的商品详细页面中需要用到
class service_goods_Detail_admin extends service_goods_Detail_base
//在前台的商品详细页面中需要用到
class service_goods_Detail_www extends service_goods_Detail_base
//这样通过共同继承base中order_Detail就可以实现,同理把所有goods相关共同的方法都可以放在base中
框架自带的类库目录 Framework/Plugin/*.class.php //框架的类库目录已经autoload了,直接初始化使用。
自己扩展项目使用的类库 Project/APP_NAME/application/Plugin/
例如
//大的类库,有自己目录结构的
$alipay_config = Tmac::config( 'alipay.alipay_config', APP_WWW_NAME );
require_once Tmac::findFile( 'payment/alipay/alipay_notify', APP_WWW_NAME );
$alipaySubmit = new AlipaySubmit( $alipay_config );
//单个php类文件
$pages = Tmac::Plugin('Pages', APP_WWW_NAME);
$pages->setTotal($count);
$pages->setUrl($url);
$pages->setPrepage(20);
$limit = $pages->getSqlLimit();
$img = Tmac::Plugin('images');
$img->loadFile("test.gif")->crop(0,0,100,100)->resize(50,50)->waterMark("mark.png", 'left','center')->save("b.gif");
通过简单的helloword加载测试对比,(apache ab).性能远高于TP,CI,YII等框架。具体测试数据正在完善。
原理
- 第一次运行的时候把框架核心文件编译成一个~runtime.php文件,保证每次请求时的文件加载数量额外的文件及少。
- 实现spl_autoload_register('_tmac_autoload'); 实现class文件自动按需加载的规则。
- 框架核心满足了平时MVC OOP开发的最小需求,没有像ci,yii,tp那样太臃肿复杂的功能银弹。方便灵活扩展,
TmacPHP已经成长了4年多了,目前已经有大量站点使用。有过大量成熟的实战检验。
- 住哪网目前线上的版本 http://www.zhuna.cn/ 百万级PV的检验。
- 银品惠微商城 http://yph.weixinshow.com/ 公众号(银品惠)code 在https://github.com/wentmac/weixinshow
- 宝身茶公众号 http://m.baoshencha.com/ 前后台(供应商,api,商城,会员中心,管理中心)
- 用户的小企业站 http://www.ruixugroup.com/
更多文档请访问wiki https://github.com/wentmac/TmacPHP/wiki
+Public
| + common
| + js
| + www
| + css
| + js
| + image
+Apps //Apps目录下每个目录都是一个模块。比如会员中心,主站,后台,管理中心,移动版,接口API
| +www
| + application
| + Config //配置文件
| + Controller //控制器
| + Model
| + dao //数据库驱动
| + entity //实体
| + service //业务层
| + Plugin //第三方类库,插件
| + View //模板层
| + var
| + wwwroot
+base //放一些项目中公用的类库,公共的继承
| + application
| + Config
| + Controller
| + Model
| + dao
| + entity
| + service
| + Plugin
| + View
| + var
| + wwwroot
+Vendor //放一些composer公用的轮子包
-Tmac.config.php
-database.config.php