当前位置:首页 > PHP

php 实现mvc

2026-02-13 14:07:25PHP

PHP 实现 MVC 架构

MVC(Model-View-Controller)是一种设计模式,用于分离应用程序的业务逻辑、用户界面和用户输入。以下是 PHP 实现 MVC 架构的关键步骤。

目录结构

创建以下目录结构以组织代码:

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

入口文件 (index.php)

public/index.php 中处理所有请求并初始化 MVC 结构:

<?php
require_once '../app/bootstrap.php';

$router = new Router();
$router->dispatch();

路由类 (Router.php)

创建路由类解析 URL 并调用相应的控制器和方法:

class Router {
    public function dispatch() {
        $url = isset($_GET['url']) ? rtrim($_GET['url'], '/') : 'home';
        $urlParts = explode('/', $url);

        $controllerName = ucfirst($urlParts[0]) . 'Controller';
        $methodName = isset($urlParts[1]) ? $urlParts[1] : 'index';

        $controllerFile = '../app/controllers/' . $controllerName . '.php';

        if (file_exists($controllerFile)) {
            require_once $controllerFile;
            $controller = new $controllerName();
            if (method_exists($controller, $methodName)) {
                $controller->$methodName();
            } else {
                die('Method does not exist');
            }
        } else {
            die('Controller does not exist');
        }
    }
}

基础控制器 (Controller.php)

创建基础控制器类供其他控制器继承:

php 实现mvc

class Controller {
    public function model($model) {
        require_once '../app/models/' . $model . '.php';
        return new $model();
    }

    public function view($view, $data = []) {
        require_once '../app/views/' . $view . '.php';
    }
}

示例控制器 (HomeController.php)

创建示例控制器处理特定页面请求:

class HomeController extends Controller {
    public function index() {
        $data = [
            'title' => 'Home Page',
            'content' => 'Welcome to our MVC framework'
        ];
        $this->view('home/index', $data);
    }
}

模型示例 (User.php)

创建模型处理数据逻辑:

class User {
    private $db;

    public function __construct() {
        $this->db = new Database(); // 假设已实现数据库类
    }

    public function getUsers() {
        return $this->db->query('SELECT * FROM users');
    }
}

视图示例 (index.php)

创建视图文件显示数据:

php 实现mvc

<!DOCTYPE html>
<html>
<head>
    <title><?php echo $title; ?></title>
</head>
<body>
    <h1><?php echo $content; ?></h1>
</body>
</html>

数据库连接 (Database.php)

可选数据库连接类:

class Database {
    private $connection;

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

    public function query($sql) {
        return $this->connection->query($sql);
    }
}

自动加载 (bootstrap.php)

实现自动加载以减少手动包含文件:

spl_autoload_register(function($className) {
    $paths = [
        '../app/controllers/',
        '../app/models/',
        '../app/core/'
    ];

    foreach ($paths as $path) {
        $file = $path . $className . '.php';
        if (file_exists($file)) {
            require_once $file;
        }
    }
});

配置 .htaccess

public/ 目录下创建 .htaccess 文件重写 URL:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

注意事项

  • 确保服务器已启用 URL 重写
  • 所有用户请求都应通过 public/index.php 处理
  • 模型应只包含数据逻辑,不涉及显示逻辑
  • 视图应只负责显示,不包含业务逻辑
  • 控制器协调模型和视图之间的交互

这种实现提供了基本的 MVC 结构,可以根据项目需求进一步扩展和完善。

标签: phpmvc
分享给朋友:

相关文章

php实现分类

php实现分类

PHP实现分类的方法 数据库设计 创建分类表时,通常需要包含id、名称、父级id等字段。父级id用于实现多级分类结构。 CREATE TABLE categories ( id INT AU…

php 函数实现

php 函数实现

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

php 实现面包屑导航

php 实现面包屑导航

实现面包屑导航的方法 面包屑导航(Breadcrumb Navigation)是一种常见的网站导航方式,用于显示用户当前页面的路径。以下是几种在 PHP 中实现面包屑导航的方法。 基于 URL 路径…

php变量的实现

php变量的实现

PHP变量的实现机制 PHP变量的实现基于Zend引擎的底层数据结构。核心结构体zval用于存储变量类型和值,其设计允许动态类型转换和高效内存管理。 zval结构体 PHP变量通过zval结构体实现…

排序算法 php实现

排序算法 php实现

以下是用PHP实现的常见排序算法,每种算法均附示例代码和简要说明: 冒泡排序 通过重复比较相邻元素并交换位置实现排序: function bubbleSort($arr) { $n = c…

php实现扫码登录

php实现扫码登录

PHP 实现扫码登录的方案 扫码登录通常基于以下流程:用户访问网页生成二维码(含唯一标识),手机扫码后确认登录,服务器验证并完成登录状态同步。以下是具体实现方法: 生成二维码与唯一标识 使用 PHP…