您的位置:首页 > 其它

如何封装一个自己的mvc框架(二)

2016-12-24 17:05 323 查看
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("\core\mymvc::autoload");

//启动框架

\core\mymvc::run();

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

<?php

namespace core\lib;

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 \core\lib\route();

        //加载控制器方法

        $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.通过以上操作就可以简单的完成一个控制器方法的访问

欲知后事如何,请听下回分解......
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: