一些刚接触FleaPHP的大虾,一些基础性的东西,由于开发教程及一些实例没有详细的说明,往往会被一些简单的问题所困扰。比如路径的问题、如何进行类功能扩展的问题等等。 FleaPHP对我辈来说,是如此晦涩难懂的东西。但在dualface老大面前,竟然视若无物,对一些细节的东西,一会藉口说太简单,一会又藉口说太忙,不愿涉及。也难怪,如此千年老妖,已修炼成羽化成仙的境界,功力自然无比深厚,这些基础性的东西,自然不入法眼。但我辈是凡夫俗子,没有如此高深的功力,因此一些基本性的东西如果不多说,重复地说,唠唠叨叨地说,是不能弄明白的。道理是越摆才越明的么。
下面先说说路径的问题,因为牵涉到FlEA:loadClass()函数(FleaPHP 1.0.61为load_Class()),因此我必须唠唠叨叨地说。 为了方便说明,先秀一下我的开发项目office的目录结构(相关部分):
[webroot]/office | +- libs | +- FLEA | +- ...... +- APP | +- ...... +- Admin | +- Controller | +- Config | +- ..... +- _Shared | +- Model | +- Config |
说明: office/libs目录里面放的是一些FleaPHP、Smarty等一些框架类。 office/APP目录里放的是一些前台运行程序及参数配置文件、模版文件等一些东西。 office/Admin目录里放的是管理后台运行程序及参数配置文件、模版文件等一些东西。 office/Admin/Controller里面放的自然是后台控制器类文件。 office/ADmin/Config目录里的是配置文件。 office/_Shared/Model目录里放的是数据表对象类。 office/_Shared/Config目录里的是前后台都要用到的数据库链接等一些参数配置文件。 再贴一段index.php的代码:
复制代码 说明:
复制代码 因为数据库链接前后台都要用到,因此我将 dbDSN 数据链库接参数独立出来单独放在一个文件,这样不用前后台的配置文件都重复写这方面的代码。
复制代码 说明: 这里定义了一些程序运行过程中要用到的路径常量。 FLEA::import()函数的作用就是把这些路径数据塞进全局变量数组$GLOBALS['__FLEA_CORE__']['CLASS_PATH']中保存起来,以方便其它程序引用。 要想看到效果,需要插入下面的断点进行调试。在此我再唠叨一句,dump()函数用来调试程序真是太方便了,大家在调试程序时一定要会用,多用。老大为我们设想得真是太周到了,大家饮水不要忘了挖井人啊。
复制代码 运行程序,显示的结果如下:
Array ( [0] => d:\apmxe4\htdocs\office\libs\FLEA [1] => d:\apmxe4\htdocs\office/Admin [2] => d:\apmxe4\htdocs\office/_Shared )
至于 WEBROOT_DIR ,自然为 d:\apmxe4\htdocs\office 了。 这些都是绝对路径,也就是说这是文件存放在主机上的物理路径,与“http://127.0.0.1/office/ ”这样的资源路径是两码事,由 incude()、require_once() 等包含命令装载文件时使用,不要搞混了。相对路径是 office/Admin 中的程序通过“ ../_Shared/Model ”这样的方式访问 office/_Shared/Model 中的文件,就属于相对路径。 这些路径在程序运行时装载类文件或设置Smarty模版参数时都要用到。这样设置路径的好处,方便以后部署到服务器或进行主机间迁移。同时,即使将office目录改为其它名字,都能保证程序运行不出问题。
[webroot]/office
说明:
- <?php
- /**
- * 文件名:index.php
- * 注释:后台管理入口文件
- * 作者:hegz
- * 更新时间:2007/02/27
- */
- $dsn = '../_Shared/Config/DSN.php';
- define('WEBROOT_DIR', dirname(dirname(__FILE__)));
- define('ADMIN_DIR', WEBROOT_DIR . '/Admin');
- //define('DEPLOY_MODE', true); //部署模式时启用
- define('NO_LEGACY_FLEAPHP', true); //如果启用,即取消与旧版FleaPHP兼容
- require('../libs/FLEA/FLEA.php');
- FLEA::loadAppInf($dsn);
- FLEA::loadAppInf(ADMIN_DIR. '/Config/Admin_INF.php');
- FLEA::import(ADMIN_DIR);
- FLEA::import(WEBROOT_DIR . '/_Shared');
- FLEA::runMVC();
- ?>
- $dsn = '../_Shared/Config/DSN.php';
- FLEA::loadAppInf($dsn);
- define('WEBROOT_DIR', dirname(dirname(__FILE__)));
- define('ADMIN_DIR', WEBROOT_DIR . '/Admin');
- FLEA::import(ADMIN_DIR);
- FLEA::import(WEBROOT_DIR . '/_Shared');
- $dsn = '../_Shared/Config/DSN.php';
- define('WEBROOT_DIR', dirname(dirname(__FILE__)));
- define('ADMIN_DIR', WEBROOT_DIR . '/Admin');
- //define('DEPLOY_MODE', true); //部署模式时启用
- define('NO_LEGACY_FLEAPHP', true); //如果启用,即取消与旧版FleaPHP兼容
- require('../libs/FLEA/FLEA.php');
- FLEA::loadAppInf($dsn);
- FLEA::loadAppInf(ADMIN_DIR. '/Config/Admin_INF.php');
- FLEA::import(ADMIN_DIR);
- FLEA::import(WEBROOT_DIR . '/_Shared');
- // 插入调试断点
- dump($GLOBALS['__FLEA_CORE__']['CLASS_PATH']);
- exit;
- FLEA::runMVC();
至于