当前位置:首页 > PHP

php实现mvc框架

2026-01-29 03:05:23PHP

理解MVC架构

MVC(Model-View-Controller)是一种设计模式,将应用程序分为三个核心组件:模型(Model)处理数据和业务逻辑,视图(View)负责展示数据,控制器(Controller)接收用户输入并协调模型和视图。

目录结构设计

典型的MVC框架目录结构如下:

app/
    controllers/
    models/
    views/
public/
    index.php
    assets/
core/
    Router.php
    Database.php
    Controller.php
    Model.php

实现核心组件

路由(Router)
路由解析URL并调用对应的控制器和方法:

class Router {
    public static function route($url) {
        $urlParts = explode('/', trim($url, '/'));
        $controllerName = isset($urlParts[0]) ? ucfirst($urlParts[0]) . 'Controller' : 'HomeController';
        $action = isset($urlParts[1]) ? $urlParts[1] : 'index';

        if (class_exists($controllerName)) {
            $controller = new $controllerName();
            if (method_exists($controller, $action)) {
                call_user_func_array([$controller, $action], array_slice($urlParts, 2));
            } else {
                throw new Exception("Method $action not found");
            }
        } else {
            throw new Exception("Controller $controllerName not found");
        }
    }
}

基础控制器
提供视图渲染和公共方法:

class Controller {
    protected function render($view, $data = []) {
        extract($data);
        require_once "../app/views/$view.php";
    }
}

基础模型
封装数据库操作:

class Model {
    protected $db;

    public function __construct() {
        $this->db = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
    }
}

入口文件配置

public/index.php 作为单一入口:

require_once '../core/Router.php';
$url = isset($_GET['url']) ? $_GET['url'] : '';
Router::route($url);

示例控制器实现

class UserController extends Controller {
    public function index() {
        $userModel = new UserModel();
        $users = $userModel->getAllUsers();
        $this->render('user/index', ['users' => $users]);
    }
}

示例模型实现

class UserModel extends Model {
    public function getAllUsers() {
        $stmt = $this->db->query("SELECT * FROM users");
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }
}

视图文件示例

app/views/user/index.php

<!DOCTYPE html>
<html>
<body>
    <?php foreach ($users as $user): ?>
        <p><?= htmlspecialchars($user['name']) ?></p>
    <?php endforeach ?>
</body>
</html>

自动加载类

使用spl_autoload_register避免手动包含文件:

spl_autoload_register(function ($className) {
    $paths = [
        '../app/controllers/',
        '../app/models/',
        '../core/'
    ];

    foreach ($paths as $path) {
        $file = $path . $className . '.php';
        if (file_exists($file)) {
            require_once $file;
        }
    }
});

数据库配置分离

建议将数据库配置放在单独文件(如config/database.php):

return [
    'host' => 'localhost',
    'dbname' => 'test',
    'username' => 'root',
    'password' => ''
];

错误处理

添加基本错误处理机制:

php实现mvc框架

set_exception_handler(function ($e) {
    echo "Error: " . $e->getMessage();
});

扩展建议

  • 添加中间件支持
  • 实现依赖注入容器
  • 增加模板引擎集成
  • 添加RESTful路由支持
  • 实现ORM功能

通过以上步骤可以构建一个基础的PHP MVC框架,实际项目中可根据需求进一步扩展功能。

标签: 框架php
分享给朋友:

相关文章

php实现文件上传

php实现文件上传

文件上传的基本实现 在PHP中实现文件上传需要使用$_FILES超全局数组处理上传的文件数据。表单必须设置enctype="multipart/form-data"属性,并采用POST方法提交。 创…

php实现异步

php实现异步

PHP 实现异步的方法 PHP 本身是同步执行的脚本语言,但可以通过以下方法模拟异步操作或实现异步效果: 使用多进程(pcntl_fork) 通过 pcntl_fork 创建子进程实现异步,适用于…

php 实现队列

php 实现队列

PHP 实现队列的方法 PHP 可以通过多种方式实现队列功能,以下是几种常见的实现方法: 使用数组实现队列 PHP 数组可以通过 array_push 和 array_shift 函数模拟队列的先进…

php实现过程

php实现过程

PHP 实现过程 PHP 是一种广泛使用的服务器端脚本语言,特别适合 Web 开发。以下是 PHP 实现过程的关键步骤和注意事项。 安装与配置 下载并安装 PHP,可以从官方 PHP 网站获取最新版…

php 路由实现的

php 路由实现的

PHP 路由实现方法 基于原生 PHP 实现路由 创建一个简单的路由解析器,通过解析 URL 路径来调用对应的控制器或函数。 // 定义路由表 $routes = [ '/' => '…

排序算法 php实现

排序算法 php实现

以下是用PHP实现的常见排序算法,每种算法均附示例代码和简要说明: 冒泡排序 通过重复比较相邻元素并交换位置实现排序: function bubbleSort($arr) { $n…