第一个MVC框架

一、MVC基础知识
1、MVC 是单入口,单入口文件index.php, 引入大量类文件,定义一些常量。
2、通过入口文件,实例化一个控制器类,调用控制器类中的方法。
3、运行过程:通过在访问的控制器中的方法里面,去拿数据(访问Model层中方法),然后把数据传给视图层(模板引擎,view层), 最终通过控制器调用显示(show)的方法。

index.php?controller=控制器名&method=方法名

\index.php

Select Code
1
2
3
4
5
6
7
<?php
require_once('testModel.class.php');	// 引入模型
require_once('testView.class.php');		// 引入视图
require_once('testController.class.php');	// 引入控制器

$obj = new testController();
$obj->show();

\testModel.class.php

Select Code
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
class testModel
{
    public function get()
    {
        return 'hello mvc';
    }

    public function delete()
    {
//
    }
}

\testView.class.php

Select Code
1
2
3
4
5
6
7
8
<?php
class testView
{
    public function display($data)
    {
    	echo $data;
    }
}

\testController.class.php

Select Code
1
2
3
4
5
6
7
8
9
10
11
12
<?php
class testController
{
    public function show()
    {
        $model = new testModel();
        $data = $model->get();

        $view = new testView();
        $view->display($data);
    }
}

二、第一个MVC框架
\functions.php

Select Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
function C($name, $method)
{
    require_once('./libs/Controller/' . $name . 'Controller.class.php');
    eval('$obj = new ' . $name . 'Controller(); $obj->' . $method . '();');
}

function M($name)
{
    require_once('./libs/Model/' . $name . 'Model.class.php');
    eval('$obj = new ' . $name . 'Model();');
    return $obj;
}

function V($name)
{
    require_once('./libs/View/' . $name . 'View.class.php');
    eval('$obj = new ' . $name . 'View();');
    return $obj;
}

\index.php

Select Code
1
2
3
4
5
6
7
8
9
10
<?php
include('./functions.php');

// index.php?controller=控制器&method=方法
// index.php?controller=test&method=list

$controller = $_GET['controller'] ? $_GET['controller'] : 'index';
$method = $_GET['method'] ? $_GET['method'] : 'index';

C($controller, $method);

\libs\Controller\testController.class.php

Select Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
class testController
{
    public function show()
    {
        $model = M('test');
        $data = $model->get();

        $view = V('test');
        $view->display($data);
    }

    public function list()
    {
        echo 'list方法';
    }

    public function detail()
    {
        echo '详情页面';
    }
}

\libs\Model\testModel.class.php

Select Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
class testModel extends \PDO
{
    public function __construct()
    {
        $dsn = 'mysql:dbname=web;host=localhost;charset=UTF8';
        $username = 'root';
        $passwd = 'root';
        parent::__construct($dsn, $username, $passwd);
    }

    public function get()
    {
        $sql = "SELECT * FROM `cat`";
        $data = $this->query($sql);
        return $data->fetchAll();
    }

    public function delete()
    {
//
    }
}

\libs\View\testView.class.php

Select Code
1
2
3
4
5
6
7
8
<?php
class testView
{
    public function display($data)
    {
        var_dump($data);
    }
}