mvc 从0打造自己的框架

本文介绍了一个简单的MVC框架实现过程,包括入口文件设置、常量定义、类的自动加载、路由解析、控制器加载及视图展示等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

入口文件->定义常量->引入函数库->自动加载类->启动框架->路由解析->加载控制器->返回结果



01先从入口文件开始;
<pre>1:定义常量,
当前框架的根目录
核心文件在的目录
项目在的目录
define('mvc',realpath('./'));

define('core',mvc.'/core');

define('app',mvc.'/app');

define('MODULE','app');

<pre name="code" class="html"><pre>2:加载函数库
3:启动框架

02:自动加载类
当我们new的类不存在的时候,会自动加载。

     static public function load($class)
     {

       if(isset($classMap[$class]))
        {
            return true;
        }
       else
       {
           $class=str_replace('\\','/',$class);

           $file=mvc.'/'.$class.'.php';

           if(is_file($file))
           {
               include $file;
               self::$classMap['class']=$class;
           }
           else
           {
               return false;
           }
       }


    }

使用方法:
spl_autoload_register('\core\imooc::load');

03:路由类
1:隐藏index.php
2:获取URL  参数部分
3:返回对应的控制器方法名

 if(isset($_SERVER['REQUEST_URI']) && $_SERVER['REQUEST_URI'] != '/')
        {
            $path=$_SERVER['REQUEST_URI'];
            $patharr = explode('/',trim($path,'/'));
            //p($patharr);die;
            if(isset($patharr[0]))
            {
                $this->ctrl =$patharr[0];
            }
            unset($patharr[0]);
            if(isset($patharr[1]))
            {
                $this->action =$patharr[1];
                unset($patharr[1]);
            }
            else
            {
                $this->action=conf::get('ACTION','route');
            }

            //p($patharr);die;
            //url多余部分转成get请求
            //id/1

            $count=count($patharr)+2;

            $i=2;

            while($i < $count)
            {
                if(isset($patharr[$i+1]))
                {
                    $_GET[$patharr[$i]] = $patharr[$i + 1];
                }

                $i = $i + 2;
            }
            unset($_GET['url']);
            //p($_GET);

        }
        else
        {
             $this->ctrl=conf::get('CTRL','route');
             $this->action=conf::get('ACTION','route');
        }


04:路由解析 
根据路由类返回对应的控制器方法名,来进行包含相应的控制器方法名。

05:模型类
继承 \PDO来连接数据库
class model extends \PDO
{
    function  __construct()
    {
        $database = conf::all('database');

        try{
          parent::__construct($database['DSN'],$database['USERNAME'],$database['PASSWD']);
        }
        catch(\PDOException $e)
        {
            p($e->getMessage());
        }


    }


}

06:视图类

用 assign ,display 两个方法;
$data="Hello World";
$title="视图文件";
$this->assign('data',$data);
$this->assign('title',$title);
$this->display('index.html');








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值