当前位置:首页 > PHP

php mcv 实现

2026-01-29 14:11:45PHP

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();

路由类 (核心组件)

class Router {
    public function dispatch() {
        $url = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
        $url = trim($url, '/');
        $parts = explode('/', $url);

        $controllerName = ucfirst($parts[0] ?? 'home') . 'Controller';
        $action = $parts[1] ?? 'index';

        require_once "../app/controllers/$controllerName.php";

        if (class_exists($controllerName)) {
            $controller = new $controllerName();
            if (method_exists($controller, $action)) {
                $controller->$action();
            } else {
                http_response_code(404);
                echo "Action not found";
            }
        } else {
            http_response_code(404);
            echo "Controller not found";
        }
    }
}

控制器示例

class HomeController {
    public function index() {
        $model = new HomeModel();
        $data = $model->getData();

        require '../app/views/home/index.php';
    }
}

模型示例

class HomeModel {
    public function getData() {
        return [
            'title' => 'Welcome to MVC',
            'content' => 'This is a simple PHP MVC implementation'
        ];
    }
}

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

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

数据库连接封装

class Database {
    private $connection;

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

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

进阶实现建议

使用 Composer 管理依赖 创建 composer.json 文件并添加自动加载配置:

{
    "autoload": {
        "psr-4": {
            "App\\": "app/"
        }
    }
}

实现基类控制器

abstract class BaseController {
    protected function render($view, $data = []) {
        extract($data);
        require "../app/views/$view.php";
    }

    protected function redirect($url) {
        header("Location: $url");
        exit;
    }
}

添加中间件支持

trait Middleware {
    protected $middlewares = [];

    public function middleware($name) {
        $this->middlewares[] = $name;
        return $this;
    }

    protected function runMiddlewares() {
        foreach ($this->middlewares as $middleware) {
            $middlewareClass = new $middleware();
            $middlewareClass->handle();
        }
    }
}

安全注意事项

验证所有用户输入

$cleanInput = filter_input(INPUT_GET, 'param', FILTER_SANITIZE_STRING);

使用预处理语句防止 SQL 注入

$stmt = $db->prepare("SELECT * FROM users WHERE id = :id");
$stmt->execute([':id' => $userId]);

实现 CSRF 保护

php mcv 实现

session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
        die('CSRF validation failed');
    }
}
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));

标签: phpmcv
分享给朋友:

相关文章

php实现递归

php实现递归

递归的基本概念 递归是一种函数调用自身的技术,适用于解决可以分解为相同子问题的问题。在PHP中,递归需要明确的终止条件(基线条件),否则会导致无限循环。 递归实现阶乘 阶乘是经典的递归案例,n! =…

php 实现秒杀

php 实现秒杀

PHP 实现秒杀的关键技术 秒杀系统需要解决高并发、超卖、性能瓶颈等问题。以下是实现秒杀的核心方案: 使用 Redis 预减库存 将商品库存提前加载到 Redis 中,通过原子操作保证库存准确性:…

php 实现下载

php 实现下载

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

php 队列的实现

php 队列的实现

PHP 队列的实现方法 使用数据库实现队列 创建一个数据表存储队列任务,包含任务ID、状态、创建时间等字段。通过SQL语句实现任务的入队和出队操作。 // 入队操作 INSERT INTO queu…

php 实现mvc

php 实现mvc

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

php 实现无限分类

php 实现无限分类

无限分类的实现方法 无限分类通常用于构建多层级结构的数据,如商品分类、菜单管理等。以下是几种常见的实现方式: 邻接列表模型(Adjacency List) 这是最简单的实现方式,每个分类记录存储其父…