当前位置:首页 > 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)

处理数据逻辑:

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):

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');
    }
}

错误处理

自定义错误处理:

php 实现mvc

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实现栈

栈的基本概念 栈(Stack)是一种遵循后进先出(LIFO)原则的数据结构。核心操作包括: push:元素入栈。 pop:元素出栈(返回并移除栈顶元素)。 peek:查看栈顶元素…

php搜索功能实现

php搜索功能实现

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

php实现统计

php实现统计

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

php 伪静态实现

php 伪静态实现

PHP 伪静态实现方法 伪静态(URL Rewrite)是一种通过服务器配置将动态URL转换为静态URL的技术,提升URL的可读性和SEO效果。以下是几种常见的实现方式: 使用Apache的mod_…

php https实现

php https实现

PHP 中实现 HTTPS 的方法 在 PHP 中实现 HTTPS 主要通过配置服务器和编写代码来确保通信的安全性。以下是几种常见的方法: 配置服务器支持 HTTPS 确保服务器已安装 SSL/T…

php 实现聊天功能

php 实现聊天功能

PHP 实现聊天功能的方法 使用 WebSocket 和 Ratchet 库 WebSocket 是实现实时聊天的理想选择。Ratchet 是一个 PHP 库,用于处理 WebSocket 连接。…