当前位置:首页 > 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' => ''
];

错误处理

添加基本错误处理机制:

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

扩展建议

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

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

php实现mvc框架

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

相关文章

php实现文件下载

php实现文件下载

PHP 实现文件下载的方法 使用 header() 函数强制下载 设置正确的 HTTP 头信息,强制浏览器下载文件而不是直接打开。 $file = 'path/to/file.pdf'; if (f…

vue实现框架

vue实现框架

Vue 框架实现核心要素 Vue.js 是一个渐进式 JavaScript 框架,其核心实现围绕响应式系统、虚拟 DOM、组件化等概念展开。以下是关键实现要点: 响应式系统 Vue 2.x 使用…

php实现socket

php实现socket

PHP 实现 Socket 通信 PHP 可以通过 socket 扩展实现网络通信,支持 TCP/UDP 协议。以下是实现 Socket 通信的核心步骤和代码示例。 创建 TCP 服务器 // 创建…

php记住密码怎么实现

php记住密码怎么实现

使用Cookie实现记住密码功能 在PHP中,可以通过设置Cookie来记住用户的登录状态。以下是一个简单的实现方式: // 用户登录验证成功后 if ($login_success) {…

php长连接实现

php长连接实现

PHP 长连接实现方法 长连接(Keep-Alive)允许客户端与服务器在一次TCP连接中发送和接收多个HTTP请求/响应,减少重复建立连接的开销。以下是PHP中实现长连接的几种方式: 配置HTTP…

php实现登录

php实现登录

PHP 登录功能实现 数据库连接与用户表创建 创建一个数据库连接文件 db.php,用于管理数据库连接。MySQL 示例代码如下: <?php $host = 'localhost'; $d…