zoukankan      html  css  js  c++  java
  • 怎样封装一个自己的MVC框架(二)

    1.首先需要写一个开口文件

    主要包括以下几点

     1.定义常量(路由)
     2.加载类库

     3.启动框架

    <?PHP 
    /**
     * 1.入口文件
     * 2.定义常量(路由)
     * 3.加载类库
     * 4.启动框架
     */

    //定义根目录
    define("ROOT",dirname(__FILE__));

    //定义核心文件目录
    define('CORE', ROOT."/core");

    //项目目录
    define('APP', ROOT."/app");

    //项目目录相对路径
    define('MODULE', "app");

    //是否开启调试模式
    define('DEBUG',true);

    if (DEBUG) {
        ini_set('display_error', 'On');
    }else{
        ini_set('display_error', 'Off');
    }

    //引入公共文件
    include CORE."/common/function.php";

    //p(ROOT);

    //引入核心类库
    include CORE."/mymvc.php";

    //自动加载
    spl_autoload_register("coremymvc::autoload");

    //启动框架
    coremymvc::run();

    2.定义路由,写一个路由类,通过构造函数解析路由信获取控制器方法,及get传值

    <?php 
    namespace corelib;

    class route
    {
        //定义控制器
        public $control;

        //定义方法
        public $action;

        //定义构造函数解析路由
        public function __construct()
        {
            //获取url参数,获取控制器、方法
            if (isset($_SERVER['PATH_INFO'])&&$_SERVER['PATH_INFO']!="/") {
                //获取url控制器、方法
                $path=$_SERVER['PATH_INFO'];
                $patharr=explode("/",trim($path,"/"));
                //p($patharr);

                //定义控制器、方法名
                if (isset($patharr[0])) {
                    $this->control=$patharr[0];
                }

                if (isset($patharr[1])) {
                    $this->action=$patharr[1];
                }else{
                    $this->action="index";
                }

                //获取参数的值
                $count=count($patharr)+2;
                $i=2;
                while ($i < $count) {
                    if (isset($patharr[$i+1])) {
                        $_GET[$patharr[$i]]=$patharr[$i+1];
                    }
                    
                    $i+=2;
                }
                //p($_GET);

            }else{
                $this->control="index";
                $this->action="index";
            }
        }
    }

    3.写一个核心文件来加载类文件;自动加载类文件,然后加载路由类文件,解析路由获取控制器、方法,

    通过开口文件的自动加载类,根据获取的控制器方法,加载控制器获取结果

    <?php 
    namespace core;

    class mymvc
    {
        //定义加载类地图
        public static $classMap=array();

        //开启框架
        static function run()
        {
            //p('OK');
            $route=new corelib oute();

            //加载控制器方法
            $control=$route->control;
            $action=$route->action;
            //拼接控制器文件目录
            $controlfile=APP."/controllers/".$control."Controller.php";

            //拼接控制器路径
            $controlpath="\".MODULE."controllers\".$control."Controller";
            if (is_file($controlfile)) {
                include $controlfile;
                $con=new $controlpath();
                $con->$action();
            }else{
                throw new Exception('找不到控制器'.$control);
            }


        }

        //加载类文件
        static function autoload($class)
        {
            //首先判断该类是否已经调用
            if (isset($classMap[$class])) {
                return true;
            }else{
                //拼接类文件路径
                $class=str_replace("\", "/", $class);
                $file=ROOT."/".$class.".php";
                if (is_file($file)) {
                    include $file;
                    self::$classMap[$class]=$class;
                }else{
                    return false;
                }
            }

        }
    }

    4.通过以上操作就可以简单的完成一个控制器方法的访问

  • 相关阅读:
    数据透视表快速按年月分组
    会计-汇兑损益账务处理
    vs Mvc晋级
    sql语句建立新表SMFIELD
    access左侧导航栏拉窄后,鼠标悬停时无法拉宽。
    SQL函数min和max用法
    转发一个很齐全的gridview应用帖子
    循环
    JavaScript的进阶学习
    JavaScript的学习
  • 原文地址:https://www.cnblogs.com/quanzhiguo/p/7363342.html
Copyright © 2011-2022 走看看