当前位置:首页 > PHP

php 实现mvc

2026-02-27 12:48:53PHP

PHP 实现 MVC 架构

MVC(Model-View-Controller)是一种常见的软件设计模式,用于分离业务逻辑、用户界面和用户输入。以下是 PHP 实现 MVC 的基本方法:

目录结构

典型的 MVC 目录结构如下:

app/
    controllers/
    models/
    views/
public/
    index.php

入口文件 (public/index.php)

负责初始化应用并路由请求:

<?php
require '../app/bootstrap.php';
$router = new Router();
$router->dispatch($_SERVER['REQUEST_URI']);

路由类 (Router.php)

解析 URL 并调用相应控制器:

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

        if (class_exists($controllerName)) {
            $controller = new $controllerName();
            if (method_exists($controller, $action)) {
                $controller->$action();
            }
        }
    }
}

控制器示例 (HomeController.php)

处理业务逻辑并协调模型与视图:

class HomeController {
    public function index() {
        $model = new HomeModel();
        $data = $model->getData();
        require '../app/views/home/index.php';
    }
}

模型示例 (HomeModel.php)

处理数据逻辑:

php 实现mvc

class HomeModel {
    public function getData() {
        return ['title' => 'Welcome', 'content' => 'This is MVC example'];
    }
}

视图示例 (views/home/index.php)

显示用户界面:

<!DOCTYPE html>
<html>
<head>
    <title><?= $data['title'] ?></title>
</head>
<body>
    <h1><?= $data['content'] ?></h1>
</body>
</html>

自动加载

使用 spl_autoload_register 实现类自动加载:

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

配置管理

创建配置文件 (config.php):

return [
    'database' => [
        'host' => 'localhost',
        'user' => 'root',
        'pass' => '',
        'name' => 'test'
    ]
];

数据库连接

封装数据库操作 (Database.php):

php 实现mvc

class Database {
    private $connection;

    public function __construct($config) {
        $this->connection = new PDO(
            "mysql:host={$config['host']};dbname={$config['name']}",
            $config['user'],
            $config['pass']
        );
    }

    public function query($sql, $params = []) {
        $stmt = $this->connection->prepare($sql);
        $stmt->execute($params);
        return $stmt;
    }
}

改进路由

支持参数传递:

public function dispatch($url) {
    $urlParts = explode('/', trim($url, '/'));
    $controllerName = ucfirst($urlParts[0] ?? 'home') . 'Controller';
    $action = $urlParts[1] ?? 'index';
    $params = array_slice($urlParts, 2);

    if (class_exists($controllerName)) {
        $controller = new $controllerName();
        if (method_exists($controller, $action)) {
            call_user_func_array([$controller, $action], $params);
        }
    }
}

使用 Composer

集成现代 PHP 开发工具:

  1. 安装 Composer
  2. 创建 composer.json 管理依赖
  3. 使用 PSR-4 自动加载标准

安全考虑

实现基础安全措施:

// 输入过滤
function sanitize($input) {
    return htmlspecialchars(strip_tags(trim($input)));
}

// CSRF 防护
session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
        die('Invalid CSRF token');
    }
}

错误处理

自定义错误处理:

set_error_handler(function($errno, $errstr, $errfile, $errline) {
    throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
});

set_exception_handler(function($exception) {
    error_log($exception);
    http_response_code(500);
    echo 'An error occurred';
});

这个实现提供了 MVC 架构的基础框架,可根据项目需求进行扩展和优化。

标签: phpmvc
分享给朋友:

相关文章

php 实现自动收货

php 实现自动收货

PHP 实现自动收货功能 自动收货功能通常用于电商系统,在订单超过一定时间未手动确认收货时自动完成订单。以下是实现方法: 数据库设计 需要订单表包含以下关键字段: CREATE TABLE…

php实现socket

php实现socket

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

php实现即时通讯

php实现即时通讯

PHP 实现即时通讯的方案 即时通讯(IM)可以通过多种方式实现,PHP 作为服务器端语言,通常需要结合前端技术(如 WebSocket、AJAX)或第三方服务来实现实时通信。以下是几种常见的实现方式…

php搜索功能实现

php搜索功能实现

实现基本的PHP搜索功能 使用MySQL数据库和PHP实现简单的关键词搜索功能。需要确保数据库中有可供搜索的表和数据。 // 连接数据库 $conn = new mysqli('localhost'…

php实现统计

php实现统计

PHP 实现统计功能 在 PHP 中实现统计功能通常涉及数据的收集、处理和展示。以下是一些常见的统计实现方法: 数据库数据统计 通过 SQL 查询可以直接从数据库中获取统计结果: $conn =…

php数组实现

php数组实现

PHP 数组的基本实现 PHP 数组是一种非常灵活的数据结构,可以存储多个值,并且支持多种类型的键(整数或字符串)。PHP 数组实际上是有序映射(ordered map),可以看作是列表(vector…