我的简单PHP框架——LabPHP v1.0.1
原创
©著作权归作者所有:来自51CTO博客作者mb638413918930b的原创作品,请联系作者获取转载授权,否则将追究法律责任
此前讲到 我做的一个基于MVC设计思想的简单PHP框架(我的简单PHP框架——LabPHP),这里对其进行一些改进,改进地方如下:
1、对 LabPHP/Common/functions.php 中的 M 方法进行修改,方法中实例化一个没有模型文件的Model;
2、在 LabPHP/Common/functions.php 中增加 D 方法,D方法实现实例化模型类(具有模型文件的Model对象);
3、在 LabPHP/Common/functions.php 中加入一个简单的 dump 方法,提供友好输出变量的方法;
4、在 LabPHP/LabPHP.php 增加引入用户当前模块下自定义的 function.php 文件的功能,在各个模块(如:Home、Admin)下增加 Common文件夹,在Common 文件夹下添加 function.php;
5、在 LabPHP/LabPHP.php 增加引入用户所有模块公共的自定义的 function.php 文件的功能,在 Application 文件夹下增加 Common文件夹,在Common 文件夹下再增加Common文件夹,在最后新增的Common文件夹下添加 function.php。
LabPHP框架修改后,项目目录结构基本如下:
LabPHP/Common/functions.php 修改如下:
<?php
//防止非法字符的输入
function daddslashes($str) {
return (!get_magic_quotes_gpc())?addslashes($str):$str;
}
/**
* 浏览器友好的变量输出
* @param [type] $var 变量
* @return [type] [description]
*/
function dump($var) {
echo '<pre>';
var_dump($var);
echo '</pre>';
}
/**
* 获得当前被访问的模块名
* @return [type] 当前模块名
*/
function getModuleName() {
return isset($_GET['m']) ? daddslashes($_GET['m']) : 'Home'; //初始化模块(默认Home模块)
}
/**
* 获得当前被访问的控制器名
* @return [type] 当前控制器名
*/
function getControllerName() {
return isset($_GET['c']) ? daddslashes($_GET['c']) : 'Index'; //初始化控制器
}
/**
* 获得当前被访问的操作名
* @return [type] 当前操作名
*/
function getActionName() {
return isset($_GET['a']) ? daddslashes($_GET['a']) : 'index'; //初始化操作
}
function getConfig() {
$c1 = include('./LabPHP/Conf/convention.php');
$c2 = include('./Application/' . MODULE_NAME . '/Config/config.php');
$config = array_merge($c1, $c2);
return $config;
}
/**
* 用于调用 $name 控制器的 $method 方法
* @param [type] $name 控制器名
* @param [type] $method 方法名
*/
function C($name, $method) {
$m = getModuleName();
require_once('./Application/' . $m . '/Controller/' . $name . 'Controller.class.php');
$c = $name . 'Controller';
$ct = new $c();
$ct->$method();
}
/**
* 实例化一个没有模型文件的Model
* @param [type] $name Model名称
*/
function M($name = '') {
$obj = new Model();
return $obj;
}
/**
* 实例化模型类
* @param [type] $name 模型类的名,如IndexModel,则 $name = 'Index'
*/
function D($name) {
if(!isset($name) || empty($name)) {
return null;
}
$obj = new Model();
// 如果不存在具有模型文件(xxxModel.class.php)的Model,就返回 new Model() 对象
$m = getModuleName();
$file_model_path = './Application/' . $m . '/Model/' . $name . 'Model.class.php';
if(file_exists($file_model_path)) {
require_once($file_model_path);
$model = $name.'Model';
$obj = new $model();
}
return $obj;
}
?>
LabPHP/LabPHP.php 修改如下:
<?php
// +----------------------------------------------------------------------
// | LabPHP v1.0.1
// +----------------------------------------------------------------------
// | Author: DreamBoy <937921168@qq.com>
// +----------------------------------------------------------------------
//定义应用的模式——是否为调试模式
if(!defined('APP_DEBUG') || APP_DEBUG == false) {
error_reporting(0);
}
//启动引擎
$currentdir = dirname(__FILE__);
//首先include文件清单
include_once $currentdir . '/Conf/include.list.php';
//include必要的文件
foreach ($paths as $value) {
include_once $currentdir . '/' . $value;
}
// 导入用户自定义的模块公共的 function.php 文件
$user_c_func = './Application/Common/Common/function.php';
if(file_exists($user_c_func)) {
include_once $user_c_func;
}
// 导入用户自定义的针对某一模块的 function.php 文件
$user_m_func = './Application/' . getModuleName() . '/Common/function.php';
if(file_exists($user_m_func)) {
include_once $user_m_func;
}
//定义当前被访问的模块
defined('MODULE_NAME') or define('MODULE_NAME', getModuleName());
//定义当前被访问的控制器
defined('CONTROLLER_NAME') or define('CONTROLLER_NAME', getControllerName());
//定义当前被访问的操作
defined('ACTION_NAME') or define('ACTION_NAME', getActionName());
LabPHP::start();
?>