一、结构介绍

结构的名字grape,中文名叫葡萄,因为最近一个同事经常带葡萄到公司给我们吃,受到启发想到了这个名字。

1)本结构需要在PHP5.5中运行,如果要在5.4中运行,有些地方就要做些修改

2)结构中会用到MongoDB,所以需要在php中额外引用php_mongo.dll文件查看安装方法

3)还用到了性能工具xhprof,全文检索工具Coreseek(改造了sphinx),如果使用都需要额外的配置,如果不使用可以关闭

4)整合了微信的部分API接口,点击查看《微信公众平台开发系列

5)整合了grape-skin(葡萄皮)静态结构,作为管理后台的页面样式与特效

6)后台管理demo帐号是admin,密码是123456

7)虚拟目录结构引用如下:

<VirtualHost *:80>
    DocumentRoot "D:/htdocs/grape/public/admin"
    ServerName admin.grape.net
</VirtualHost>
<VirtualHost *:80>
    DocumentRoot "D:/htdocs/grape/public/api"
    ServerName api.grape.net
</VirtualHost>

 

二、目录结构

  依托网上的开源框架InitPHP,略微修改了InitPHP的部分源码,使得结构更符合我自己的项目需要,并扩展了几个功能,例如全文检索配置、分页等。

1)app:放置的是控制器、试图、拦截器、缓存文件、视图编译文件与特定的配置文件,app下可以有多个项目文件,上面的admin和api隶属于两个项目中

   

2)conf:全局配置文件,包括数据库配置、缓存配置、自动载入配置等,查看InitPHP框架配置

3)initphp:框架initphp库文件,大部分是原先的,有几个地方做了调整。查看InitPHP框架全部文档

4)library:包括控制器通用文件、数据层逻辑、数据字典、表单控件编写、服务层逻辑、第三方代码以及简单的测试,这里我把library单处拎出来和app、initphp等平级。

   

5)logs:日志文件,可以打印出数据库查询语句,也可以做一些调试信息

6)public:项目的入口文件,全局变量配置,摆放静态资源(CSS、JS等)。如下图所示,admin文件夹中有静态资源文件,css、js等,并有自己的index.php入口文件,rpc文件是InitPHP框架中的RPC调用配置

  

7)tool:放置了MySQL数据库示例代码,简易api调试工具,memcache操作工具

   

 

三、配置文件

1)conf文件

1.全局的配置放在了外面的conf文件,而在每个app下面的项目中也有一个conf文件,这里面是配置一些这个项目下需要的配置项。

  

 

2.全局配置内容和InitPHP配置中的基本相同,但我在封装的时候多了几个。

is_xhprof:性能分析工具,点击查看工具配置

sphinx:全文检索工具,点击查看工具配置

autoload:自动载入文件,载入的是library文件夹中的一些php文件。自动载入的命名是有规则的,例如下面的第一个配置,自动载入library/controller文件夹中的adminController.php文件。

/*********************************自动载入配置*****************************************/
$InitPHP_conf['autoload']['controller'] = array(
    'path' => LIB_PATH . '/controller',
    'files' => array('admin', 'api')
);
$InitPHP_conf['autoload']['helper'] = array(
    'path' => LIB_PATH . '/helper',
    'files' => array('url', 'dict/const', 'dict/enum')
);

自动载入的逻辑代码写在了InitPHP里initphp.php文件中:

private static function _autoload() {
        $config = self::getConfig();
        $autoloads = $config['autoload'];
        foreach ($autoloads as $key=>$autoload) {
            if(empty($autoload['files']) || empty($autoload['path']))
                continue;
            $path = $autoload['path'];
            foreach ($autoload['files'] as $file) {
                require_once $path . '/' . $file.ucfirst($key).'.php';
            }
        }
        //是否打开性能测试
        if($config['is_xhprof']) {
            require_once LIB_XHPROF_PATH . "/xhprof_lib/utils/xhprof_lib.php";
            require_once LIB_XHPROF_PATH . "/xhprof_lib/utils/xhprof_runs.php";
        }
    }

 

2)定义全局常量

1.defined.php

文件位于public下面,这个文件中将定义些目录常量,域名常量,API密钥,微信配置等,并引入全局入口文件。

<?php
/**
 * 常量定义
 * @author: pwstrick
 */
define('ROOT_PATH', dirname(dirname(__FILE__)));
define('LIB_PATH', ROOT_PATH . '/library');
define('LIB_THIRD_PATH', LIB_PATH . '/third');//第三方类库目录
define('LIB_XHPROF_PATH', LIB_THIRD_PATH . '/xhprof');//性能测试工具
define('SCRIPT_PATH', 'scripts');//开发使用scripts,部署使用optimize
define('UPLOAD_PATH', ROOT_PATH.'/upload');//上传路径
define('UPLOAD_HTTP', 'http://upload.grape.net');

/**
 * API客户端密钥
 */
define('API_IOS_KEY', 'DF_A98=D^&7$^%*9CNAhj0UO!!LM11');
define('API_ANDROID_KEY', 'KU98&)dsf8%@kji89dfadJK-800i122');
define('API_UNKNOW_KEY', 'jfdsfd798hj+@(*kb66578-223q670933');

/**
 * 微信配置
 */
define('WEIXIN_APPID', 'xx');//TODO
define('WEIXIN_SECRET', 'xx');//TODO
define('WEIXIN_TOKEN', 'xx');//TODO
define('WEIXIN_NOTIFY_URL', 'http://xx');//TODO
define('WEIXIN_MCHID', 'xx');//TODO
define('WEIXIN_KEY', 'xx');//TODO

header("Content-Type:text/html; charset=utf-8");   
require_once(ROOT_PATH . '/initphp/initphp.php'); //导入配置文件-必须载入
require_once(ROOT_PATH . '/conf/comm.conf.php'); //公用配置

 

  2.index.php

index文件夹是各个项目的入口文件,同样位于public下面,里面有特定的配置常量,引用defined.php文件,并运行InitPHP开发框架。

<?php

require_once(dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'defined.php');
define('APP_NAME', 'admin');
define('APP_PATH', ROOT_PATH.'/app/'.APP_NAME);
require_once(APP_PATH . '/conf/comm.conf.php'); //APP配置
InitPHP::init();

 

 

GitHub地址:

https://github.com/pwstrick/grape

 posted on 2015-09-15 10:06  咖啡机(K.F.J)  阅读(1330)  评论(0编辑  收藏  举报