构建自己的PHP框架(MVC)

完整项目地址:https://github.com/Evai/Aier

 

规划文件夹

新建 MFFC/app 文件夹,在 app 中创建 controllers、models、views 三个文件夹,开始正式开始踏上 MVC 的征程。

使用命名空间

新建 controllers/BaseController.php 文件:

<?php

class BaseController { public function __construct() { } }

 

新建 controllers/HomeController.php 文件:

<?php

class HomeController extends BaseController
{

    public function home()
    {
        echo 'home';
    }

}

 

增加一条路由: Macaw::get('/home', 'HomeController@home');,打开浏览器直接访问 http://127.0.0.1:80/,出现以下提示:

Fatal error: Class 'HomeController' not found in /Library/WebServer/Documents/wwwroot/MFFC/vendor/codingbean/macaw/Macaw.php on line 93

为什么没找到 HomeController 类?因为我们没有让他自动加载,修改 composer.json 为:

{
  "require": {
    "codingbean/macaw": "dev-master"
  },
  "autoload": {
    "classmap": [
      "app/controllers",
      "app/models"
    ]
  }
}

 

运行 composer dump-autoload,稍等片刻,刷新,你将看到以下内容:

 

恭喜你,命名空间使用成功!

连接数据库

新建 models/Article.php 文件,内容为(数据库密码和数据库名称请自行更改):

class Articles
{
    public static function first()
    {
        $servername = "localhost";
        $username = "root";
        $password = "admin123";
        // 创建连接
        $conn = mysqli_connect($servername, $username, $password);
        // 检测连接
        if (!$conn) {
            die("Connection failed: " . mysqli_connect_error());
        }

        $conn->set_charset('utf8');
        $conn->select_db('articles');

        $result = $conn->query("SELECT * FROM article limit 1");

        if ($row = $result->fetch_assoc()) {
            var_dump($row);
        }

        $conn->close();
    }
}

 

修改 controllers/HomeController.php 文件:

<?php

class HomeController extends BaseController
{

    public function home()
    {
        Articles::first();
    }

}

 

刷新,这时候会得到 Article 类未找到的信息,因为我们没有更新自动加载配置:

composer dump-autoload

然后,刷新!你将看到结果。

恭喜你!MVC 中的 M 和 C 都已经实现!接下来我们开始调用 V (视图)。


调用视图

修改 HomeController:

<?php

class HomeController extends BaseController
{
  
  public function home()
  {
    require dirname(__FILE__).'/../views/home.php';
  }
}
posted @ 2016-12-22 15:45  Evai  阅读(606)  评论(0编辑  收藏  举报