$GLOBALS["url"] = $GLOBALS["app"] . $_GET["m"] . '/'; //访问到当前模块
$GLOBALS["public"] = $GLOBALS["root"] . 'public/'; //项目的全局资源目录
$GLOBALS["res"] = $GLOBALS["root"] . ltrim(APP_PATH, './') . "views/" . TPLSTYLE . "/resource/"; //当前应用模板的资源
2)包含框架中的函数库文件
函数库文件主要是一些常用的工具方法的集合,框架自带的functions.inc.php方法库包含了数据模型创建操作的一些列工具方法,可以开箱即用 。此外用户也可以自定义函数库文件保存在对应模块目录下的commons/functions.inc.php位置,框架会自动引入 。
//包含框架中的函数库文件 include BROPHP_PATH . 'commons/functions.inc.php'; ? // 包含全局的函数库文件,用户可以自己定义函数在这个文件中 $funfile = PROJECT_PATH . "commons/functions.inc.php"; if (file_exists($funfile)) include $funfile;3)设置包含目录(类所在的全部目录)
这个步骤是__autoload()自动加载类的基础,__autoload()方法中include会自动从这些目录中寻找要包含的类
//设置包含目录(类所在的全部目录), PATH_SEPARATOR 分隔符号 linux(:) windows(;) $include_path = get_include_path(); //原基目录 $include_path .= PATH_SEPARATOR . BROPHP_PATH . "bases/"; //框架中基类所在的目录 $include_path .= PATH_SEPARATOR . BROPHP_PATH . "classes/"; //框架中扩展类的目录 $include_path .= PATH_SEPARATOR . BROPHP_PATH . "libs/"; //模板Smarty所在的目录 $include_path .= PATH_SEPARATOR . PROJECT_PATH . "classes/"; //项目中用的到的工具类 $controlerpath = PROJECT_PATH . "runtime/controls/" . TMPPATH; //生成控制器所在的路径 $include_path .= PATH_SEPARATOR . $controlerpath; //当前应用的控制类所在的目录 //设置include包含文件所在的所有目录 set_include_path($include_path);4)__autoload()自动加载类
__autoload()魔术方法是在用户创建一个没有包含的类的对象之前会调用,所以重写这个方法,在这个方法中处理类文件的包含,省去了类文件包含的工作,当然类名需要符合一定的规则才能使用自动包含,框架定义了类名的规则为“首字母大小的类名.clsss.php”
//自动加载类 function __autoload($className) { if ($className == "memcache") { //如果是系统的Memcache类则不包含 return; } else if ($className == "Smarty") { //如果类名是Smarty类,则直接包含 include "Smarty.class.php"; } else { //如果是其他类,将类名转为小写 include strtolower($className) . ".class.php"; } Debug::addmsg("<b> $className </b>类", 1); //在debug中显示自动包含的类 }解析处理URL
解析处理URL步骤调用的是Prourl::parseUrl();
/** * URL路由,转为PATHINFO的格式 */ static function parseUrl() { if (isset($_SERVER['PATH_INFO'])) { //获取 pathinfo $pathinfo = explode('/', trim($_SERVER['PATH_INFO'], "/")); ? // 获取 control $_GET['m'] = (!empty($pathinfo[0]) ? $pathinfo[0] : 'index'); ? array_shift($pathinfo); //将数组开头的单元移出数组? // 获取 action $_GET['a'] = (!empty($pathinfo[0]) ? $pathinfo[0] : 'index'); array_shift($pathinfo); //再将将数组开头的单元移出数组? for ($i = 0; $i < count($pathinfo); $i += 2) { $_GET[$pathinfo[$i]] = $pathinfo[$i + 1]; } ? } else { $_GET["m"] = (!empty($_GET['m']) ? $_GET['m'] : 'index'); //默认是index模块 $_GET["a"] = (!empty($_GET['a']) ? $_GET['a'] : 'index'); //默认是index动作 ? if ($_SERVER["QUERY_STRING"]) { $m = $_GET["m"]; unset($_GET["m"]); //去除数组中的m $a = $_GET["a"]; unset($_GET["a"]); //去除数组中的a $query = http_build_query($_GET); //形成0=foo&1=bar&2=baz&3=boom&cow=milk格式 //组成新的URL $url = $_SERVER["SCRIPT_NAME"] . "/{$m}/{$a}/" . str_replace(array("&", "="), "/", $query); header("Location:" . $url); } } }访问login/index,解析保存在全局的GET数组中的信息如下:
m -> control 表示控制器
a -> action 表示操作
有了这些信息,动态创建控制器,发起对应的流程
$className = ucfirst($_GET["m"]) . "Action"; $controler = new $className(); $controler->run();3.2、控制器(Controller)
1)控制器的声明
功能模块的控制器类保存在controls目录中,类名和模块名相同,下面是登录模块,定义一个Login类(类的首字母需要大写)保存的文件名为login.class.php
推荐阅读
- win7提示explorer.exe应用程序错误的解决方法
- 新买的Mac电脑如何设置更好用
- Mac小技巧|小技能有大作用
- 涌泉穴位位置图和作用 涌泉穴正确的按摩方法
- 浙江松阳启用茶叶质量IC卡 力求以质兴茶
- 原地热车究竟有啥作用?不少老司机都搞不明白,看看维修师傅怎么说?
- 汽车上的转速表究竟有什么用?我们开车时如何利用转速表?
- 汽车内外循环该怎样使用?
- 汽车上用的铅酸蓄电池,“铅”和“酸”是如何反应产生电能的?
- 暖脚宝可以在被窝用吗,暖脚宝可不可以睡觉用
