PHP头条
热点:

基于PHP的微型框架dennisFramework,框架dennisframework


       本文背景前提,针对php入门新手,对于大部分主流php框架,其框架代码过于繁杂,不易于理解,为了更好便于的理解PHP框架中MVC的运行原理和流程。

       写下了dennisFramework框架,框架的代码地址     https://github.com/dennishao/dennisFramework 。

       警告:此框架千万不可用于线上环境,仅供初学者理解使用.

    

      正文开始:

      先介绍框架目录及其说明. 


  • applications 应用文件目录
    • config     配置文件
    • controllers 控制器目录
    • models 模型目录
    • views 视图目录
  • framework 框架目录
    • core 框架核心目录
    • database 框架数据库目录
    • helpers 框架第三方函数目录
    • libraries 框架第三方类库目录
  • public 公共文件目录
    • css css样式目录
    • images 图片文件目录
    • js js函数目录
    • uploads 上传目录
  • index.php 入口文件
       开始框架允许流程讲解       1.单一入口文件index.php       
<?php//引入框架核心类文件require "framework/core/framework.class.php";//开启报错信息ini_set("display_errors","on");error_reporting(-1);//启动框架framework::run();

      
    2.框架核心类文件framework.class.php,
     (1)对框架各个部分路径,进行定义常量。
     (2)引入框架的核心类库
     (3)解析URL路由,其中包括了php的autoload和spl_autoload_register魔术方法,方法参考手册http://php.net/manual/zh/function.spl-autoload-register.php
     (4)开启session
     
<?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>

www.phpzy.comtrue/php/5103.htmlTechArticle基于PHP的微型框架dennisFramework,框架dennisframework        本文背景前提,针对 php入门新手 ,对于大部分主流php框架,其框架代码过于繁杂,不易于理解,为了更好便于的理解PHP框架中...

相关文章

    暂无相关文章
相关频道:

PHP之友评论

今天推荐