当前位置:首页 > PHP

php简单实现 mvc

2026-02-15 06:30:52PHP

实现MVC的基本结构

在PHP中实现MVC(Model-View-Controller)模式,需要将应用程序分为三个核心部分:模型(Model)处理数据逻辑,视图(View)负责展示,控制器(Controller)协调模型和视图。

目录结构示例

app/
    controllers/
        HomeController.php
    models/
        UserModel.php
    views/
        home.php
index.php

创建控制器

控制器负责处理用户请求并调用相应的模型和视图。以下是一个简单的控制器示例:

// app/controllers/HomeController.php
class HomeController {
    public function index() {
        $model = new UserModel();
        $users = $model->getUsers();
        require 'app/views/home.php';
    }
}

创建模型

模型负责与数据库交互并处理业务逻辑。以下是一个简单的模型示例:

// app/models/UserModel.php
class UserModel {
    public function getUsers() {
        // 模拟数据库查询
        return [
            ['id' => 1, 'name' => 'Alice'],
            ['id' => 2, 'name' => 'Bob']
        ];
    }
}

创建视图

视图负责展示数据。以下是一个简单的视图示例:

php简单实现 mvc

// app/views/home.php
<!DOCTYPE html>
<html>
<head>
    <title>User List</title>
</head>
<body>
    <h1>Users</h1>
    <ul>
        <?php foreach ($users as $user): ?>
            <li><?php echo $user['name']; ?></li>
        <?php endforeach; ?>
    </ul>
</body>
</html>

入口文件

入口文件负责初始化应用程序并路由请求:

// index.php
require 'app/controllers/HomeController.php';
require 'app/models/UserModel.php';

$action = isset($_GET['action']) ? $_GET['action'] : 'index';

$controller = new HomeController();
$controller->$action();

路由改进

可以通过更灵活的路由机制来处理不同的控制器和动作:

php简单实现 mvc

// index.php
$controllerName = isset($_GET['controller']) ? $_GET['controller'] : 'Home';
$actionName = isset($_GET['action']) ? $_GET['action'] : 'index';

$controllerClass = $controllerName . 'Controller';
require "app/controllers/$controllerClass.php";

$controller = new $controllerClass();
$controller->$actionName();

自动加载类

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

// index.php
spl_autoload_register(function ($className) {
    $file = 'app/' . str_replace('\\', '/', $className) . '.php';
    if (file_exists($file)) {
        require $file;
    }
});

$controllerName = isset($_GET['controller']) ? $_GET['controller'] : 'Home';
$actionName = isset($_GET['action']) ? $_GET['action'] : 'index';

$controllerClass = $controllerName . 'Controller';
$controller = new $controllerClass();
$controller->$actionName();

数据库连接

在模型中添加数据库连接逻辑:

// app/models/UserModel.php
class UserModel {
    private $db;

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

    public function getUsers() {
        $stmt = $this->db->query('SELECT * FROM users');
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }
}

错误处理

添加基本的错误处理机制:

// index.php
set_exception_handler(function ($e) {
    error_log($e->getMessage());
    header('HTTP/1.1 500 Internal Server Error');
    echo 'An error occurred';
});

try {
    // 原有的路由代码
} catch (Exception $e) {
    throw $e;
}

标签: 简单php
分享给朋友:

相关文章

php实现打印功能

php实现打印功能

PHP 实现打印功能的方法 PHP 可以通过多种方式实现打印功能,具体取决于打印的目标(如打印机、PDF、网页等)和需求(如直接打印、生成打印预览等)。以下是几种常见的实现方式: 使用 JavaS…

php实现文件上传

php实现文件上传

PHP 文件上传实现方法 在 PHP 中实现文件上传需要处理 HTML 表单和服务器端脚本。以下是详细步骤: 创建 HTML 表单 使用 enctype="multipart/form-data"…

php实现增删改查

php实现增删改查

以下是在PHP中实现增删改查(CRUD)操作的详细方法,以MySQL数据库为例: 数据库连接配置 创建config.php文件存储数据库连接信息: <?php $host = 'loca…

php 实现登录

php 实现登录

PHP 登录功能实现 使用 PHP 实现登录功能通常需要结合数据库验证和会话管理。以下是一个基本的登录实现流程: 数据库准备 创建用户表存储用户名和密码(建议使用哈希加密): CREATE TAB…

php实现排序

php实现排序

PHP 数组排序方法 PHP 提供了多种内置函数用于数组排序,适用于不同的排序需求。以下是常见的排序方法: 按值升序排序 sort() 函数对数组按值升序排序,重置键名(索引数组适用): $n…

php 实现文件下载

php 实现文件下载

实现文件下载的基本方法 使用 PHP 实现文件下载的核心是通过设置 HTTP 头部信息,强制浏览器将文件作为附件下载而非直接显示。以下是一个基础实现示例: $file_path = '/path/…