《php从零开始开发属于自己的php框架》课程笔记5——将项目改造成实用框架

项目改造及优化。

1.新建项目,命名为mvc1,项目结构如下:

在这里插入图片描述
目录简述:

  • application目录中主要是前台、后台模块及配置文件(home对应前台、admin对应后台);
  • framework才是真正的框架目录,内置数据库操作类和一些公共模型;
  • config目录用于放置用户的自定义配置文件。

2.项目整理。

  • 将Db.php和Model.php复制到framework目录下;
  • 将StudentModel.php复制到application/home/model文件夹;
  • 将StudentController.php复制到application/home/controller文件夹;
  • 将student_info.php和student_list.php复制到application/home/view目录下;

3.创建应用的公共配置文件

修改StudentController.php。为方便自动加载,在方法名后加Action作为后缀,同时修改视图模板路径。

    /**
     * 获取所有数据
     * @return mixed
     */
    public function listAllAction()
    {
        // 实例化模型,获取数据
        $stu = new StudentModel();
        $data = $stu->getAll();
        require_once './application/home/view/student_list.php'; // 渲染模板
    }

    /**
     * 获取单条数据
     * @return mixed
     */
    public function infoAction($id=1)
    {
        $id = isset($_GET['id']) ? $_GET['id'] : $id;
        // 实例化模型,获取数据
        $stu = new StudentModel();
        $data = $stu->get($id);
        require_once './application/home/view/student_info.php'; // 渲染模板
    }

在config目录下新建config.php,作为公共配置文件。

config.php:

<?php
/**
 * 应用配置文件
 * 使用数组方式
 */
return [
  // 数据库连接参数配置
  'db' => [
      'user' => 'root', // 用户名
      'pass' => '123456', // 密码
      'dbname' => 'edu', // 默认数据库名称
  ],
    // 应用的整体配置
    'app' => [
        'default_platform' => 'home', // 默认模块
    ],

    // 前台配置
    'home' => [
        'default_controller' => 'Student', // 默认控制器
        'default_action' => 'listAll', // 默认方法
    ],

    // 后台配置
    'admin' => [
        'default_controller' => '', // 默认控制器
        'default_action' => '', // 默认方法
    ],
];

4.创建框架基础类

在framework文件夹下创建Base.php。主要实现读取配置、自动加载类和请求分发的功能。

Base.php:

<?php
/**
 * 框架基础类,引导类,前端控制器
 * 主要完成三个功能:
 * 1.读取配置
 * 2.自动加载类
 * 3.请求分发
 */

class Base
{
    // 创建run方法,完成框架的所有功能
    public function run()
    {
        // 加载配置
        $this->loadConfig();
        // 注册自动加载
        $this->registerAutoLoad();
        // 获取请求参数
        $this->getRequestParams();
        // 请求分发
        $this->dispatch();
    }

    // 加载配置
    private function loadConfig()
    {
        // 使用全局变量保存用户配置
        $GLOBALS['config'] = require './application/config/config.php';
    }

    // 创建用户自定义类的加载方法
    public function userAutoLoad($className)
    {
        // 定义基本类的列表
        $baseClass = [
          'Model' => './framework/Model.php',
          'Db' => './framework/Db.php',
        ];

        // 依次进行判断:基础类?模型类?控制器类?
        if (isset($baseClass[$className])) {
            require $baseClass[$className]; // 加载模型基类
        } elseif (substr($className, -5) == 'Model') {
            require './application/home/model/'.$className.'.php'; // 加载自定义模型基类
        } elseif (substr($className, -10) == 'Controller') {
            require './application/home/controller/'.$className.'.php'; // 加载自定义控制器基类
        }
    }
    // 注册自动加载方法
    private function registerAutoLoad()
    {
        spl_autoload_register([$this, 'userAutoLoad']);
    }

    // 获取请求参数
    private function getRequestParams()
    {
        // 当前模块
        $defPlate = $GLOBALS['config']['app']['default_platform'];
        $p = isset($_GET['p']) ? $_GET['p'] : $defPlate;
        define('PLATFORM', $p);

        // 当前控制器
        $defController = $GLOBALS['config'][PLATFORM]['default_controller'];
        $c = isset($_GET['c']) ? $_GET['c'] : $defController;
        define('CONTROLLER', $c);

        // 当前方法
        $defAction = $GLOBALS['config'][PLATFORM]['default_action'];
        $a = isset($_GET['a']) ? $_GET['a'] : $defAction;
        define('ACTION', $a);
    }

    // 请求分发
    private function dispatch()
    {
        // 实例化控制器类
        $controllerName = CONTROLLER.'Controller';
        $controller = new $controllerName;

        // 调用当前方法
        $actionName = ACTION.'Action';
        $controller->$actionName();
    }
}

5.创建框架入口文件

在根目录下创建入口文件index.php。
index.php:

<?php
/**
 * 入口文件
 */

// 导入框架基础类
require './framework/Base.php';

// 实例化框架类
$app = new Base();

// 让框架跑起来
$app->run();

改造后的项目结构如下:
在这里插入图片描述

6.项目运行测试

查询所有数据:http://localhost/php.cn/mvc1/
在这里插入图片描述

查询单条记录:http://localhost/php.cn/mvc1/?p=home&a=info&id=6
在这里插入图片描述


往期文章

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦里逆天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值