当前位置:首页 > 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中,递归需要明确的终止条件(基线条件),否则会导致无限循环。 递归实现阶乘 阶乘是经典的递归案例,n! =…

php实现即时通讯

php实现即时通讯

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

php 实现下载

php 实现下载

PHP 实现文件下载的方法 使用 PHP 实现文件下载可以通过设置 HTTP 头信息,强制浏览器将文件作为附件下载而非直接打开。 基本下载实现 $file_path = 'path/to/your…

php 函数实现

php 函数实现

PHP 函数实现基础 PHP 函数的定义使用 function 关键字,后跟函数名和参数列表。函数名不区分大小写,但建议保持一致。 function functionName($param1, $…

php实现的进度条

php实现的进度条

PHP 实现的进度条方法 在 PHP 中实现进度条通常可以通过命令行脚本(CLI)或 Web 页面两种方式完成。以下是几种常见的实现方法: 命令行进度条 使用 PHP CLI 实现进度条,可以通过不…

php实现mvc

php实现mvc

PHP 实现 MVC 架构 MVC(Model-View-Controller)是一种常用的软件设计模式,将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller…