• 构建自己的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';
      }
    }
  • 相关阅读:
    名字对战,看看你名字里蕴藏的力量
    趣味小游戏,测试你们做过的傻事
    贪吃蛇小游戏的初步尝试制作
    实现成绩表的初步想法
    结构体的一些小知识点
    慢慢完善-小游戏之推箱子
    よんにち
    さんか表单 框架 样式表和样式表选择器
    Two Day
    One day
  • 原文地址:https://www.cnblogs.com/evai/p/6211574.html
Copyright © 2020-2023  润新知