基于PHP的微型框架dennisFramework,框架dennisframework
本文背景前提,针对php入门新手,对于大部分主流php框架,其框架代码过于繁杂,不易于理解,为了更好便于的理解PHP框架中MVC的运行原理和流程。
写下了dennisFramework框架,框架的代码地址 https://github.com/dennishao/dennisFramework 。
警告:此框架千万不可用于线上环境,仅供初学者理解使用.
正文开始:
先介绍框架目录及其说明.
-
applications 应用文件目录
- config 配置文件
- controllers 控制器目录
- models 模型目录
- views 视图目录
- config 配置文件
-
framework 框架目录
- core 框架核心目录
- database 框架数据库目录
- helpers 框架第三方函数目录
- libraries 框架第三方类库目录
- core 框架核心目录
-
public 公共文件目录
- css css样式目录
- images 图片文件目录
- js js函数目录
- uploads 上传目录
- css css样式目录
- index.php 入口文件
<?php class framework { public static function run() { self::init(); self::autoload(); self::dispatch(); } private static function init() { //定义常量 define("ROOT", dirname(dirname(dirname(__FILE__)))); define("APP_PATH", ROOT . "/applications"); define("FRAMEWORK_PATH", ROOT . "/framework"); define("PUBLIC_PATH", ROOT . "/public"); define("CONFIG_PATH", APP_PATH . "/config"); define("CONTROLLERS_PATH", APP_PATH . "/controllers"); define("MODELS_PATH", APP_PATH . "/models"); define("VIEWS_PATH", APP_PATH . "/views"); define("CORE_PATH", FRAMEWORK_PATH . "/core"); define("DATABASE_PATH", FRAMEWORK_PATH . "/database"); define("HELPERS_PATH", FRAMEWORK_PATH . "/helpers"); define("LIBRARIES_PATH", FRAMEWORK_PATH . "/libraries"); define("CSS_PATH", PUBLIC_PATH . "/css"); define("JS_PATH", PUBLIC_PATH . "/js"); define("IMAGES_PATH", PUBLIC_PATH . "/images"); define("UPLOADS_PATH", PUBLIC_PATH . "/uploads"); //index.php?c=Index&a=index define("CONTROLLER", isset($_REQUEST['c']) ? $_REQUEST['c'] : "Index"); define("ACTION", isset($_REQUEST['a']) ? $_REQUEST['a'] : "index"); //包含核心类库 require_once CORE_PATH . "/Controller.class.php"; require_once CORE_PATH . "/Loader.class.php"; require_once DATABASE_PATH . "/Mysql.class.php"; require_once CORE_PATH . "/Model.class.php"; require_once CONFIG_PATH . "/config.php"; //开启session session_start(); } protected static function autoload() { spl_autoload_register(array(__CLASS__, "load")); } private static function load($className) { //区别xxxController和xxxModel if (substr($className, -10) == "Controller") { require_once CONTROLLERS_PATH."/$className.class.php"; } elseif (substr($className, -5) == "Model") { require_once MODELS_PATH."/$className.class.php"; } } protected static function dispatch() { //对解析后的URl,进行MVC的载入,调用控制器和方法,渲染视图 $controller_name = CONTROLLER . "Controller"; $action_name = ACTION . "Action"; $controller = new $controller_name; $controller->$action_name(); } }3.框架的基础控制器Controller.class.php和载入第三方类库Loader.class.php和基础模型Model.class.php (1)Controller.class.php 利用构造方法,完成引入第三方类Loader.class.php的一个引入。 并且完成模板的渲染功能
<?php class Controller { protected $load; protected $data=array(); public function __construct() { //在控制器中,对引入第三方类库Loader进行实例化. $this->load = new Loader(); } protected function redirect($url, $message=null, $wait = 0) { //控制器中,完成模板的渲染 extract($message); if($wait == 0) { include VIEWS_PATH."/$url"; } else { include VIEWS_PATH . "message.html"; } exit; } }(2)Loader.class.php 其中介绍下,library.class.php和helper.class.php的主要区别 library主要是第三方的封装类库 helper主要是第三方封装函数
<?php class Loader { public function library($lib) { //完成第三方的Libraries的引入 require_once LIBRARIES_PATH."/$lib.class.php"; } public function helper($helper) { //完成第三方Helpers的引入 require_once HELPERS_PATH."/$helper.php"; } }
(3)Model.class.php
此处主要是继承Mysql.class.php数据库类库。
包括对数据库的curd操作等。
<?php class Model extends Mysql{ }
4.由第二部分的dispatch方法,对相关控制器及方法进行调用。
默认设置的是IndexController和indexAction操作方法。
protected static function dispatch() { //对解析后的URl,进行MVC的载入,调用控制器和方法,渲染视图 $controller_name = CONTROLLER . "Controller"; $action_name = ACTION . "Action"; $controller = new $controller_name; $controller->$action_name(); }
IndexController
<?php class IndexController extends Controller { public function mainAction() { //main方法 } public function indexAction() { //实例化Index模型 $indexModel = new IndexModel(); //调用模型类中的getModel方法 $model = $indexModel->getModel(); //引入测试类库 $this->load->library("testLibrary"); $library = testLibrary::getLibrary(); //引入测试helper文件 $this->load->helper("testHelper"); $heler=getHelper(); $data['helper']=$heler; $data['library'] = $library; $data['model'] = $model; $data['welcome'] = "这里是首页"; $this->redirect("index.html", $data); //include CURR_VIEW_PATH . "index.html"; } }
index.html
<html> <head> <meta charset="UTF-8"> <title>首页</title> </head> <body> <h1 style="text-align:center;"><?php echo $welcome; ?></h1> <h2 style="text-align:center;"><?php echo $model; ?></h2> <h3 style="text-align:center;"><?php echo $library; ?></h3> <h4 style="text-align:center;"><?php echo $helper; ?></h4> </html>
PHP之友评论