当前位置:首页 > PHP

php mvc实现

2026-01-14 13:17:33PHP

PHP MVC 实现步骤

模型(Model)层

模型负责数据处理和业务逻辑,通常与数据库交互。创建一个基类模型,其他具体模型继承它。

class Model {
    protected $db;

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

class UserModel extends Model {
    public function getUsers() {
        $stmt = $this->db->query("SELECT * FROM users");
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }
}

视图(View)层

视图负责展示数据,通常是HTML模板文件。通过简单的变量替换实现数据渲染。

class View {
    public function render($template, $data = []) {
        extract($data);
        include "views/$template.php";
    }
}

// 使用示例
$view = new View();
$view->render('user_list', ['users' => $users]);

控制器(Controller)层

控制器处理用户请求,协调模型和视图。创建基础控制器类,其他控制器继承它。

class Controller {
    protected $model;
    protected $view;

    public function __construct() {
        $this->view = new View();
    }
}

class UserController extends Controller {
    public function __construct() {
        parent::__construct();
        $this->model = new UserModel();
    }

    public function index() {
        $users = $this->model->getUsers();
        $this->view->render('user_list', ['users' => $users]);
    }
}

路由处理

创建路由机制将URL映射到对应的控制器和方法。

class Router {
    public function route() {
        $uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
        $segments = explode('/', trim($uri, '/'));

        $controllerName = !empty($segments[0]) ? ucfirst($segments[0]) . 'Controller' : 'HomeController';
        $action = !empty($segments[1]) ? $segments[1] : 'index';

        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";
        }
    }
}

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

目录结构

典型的MVC目录结构如下:

app/
    controllers/
        UserController.php
    models/
        UserModel.php
    views/
        user_list.php
public/
    index.php

入口文件

public/index.php 是应用的单一入口点:

require_once '../app/bootstrap.php';
$router = new Router();
$router->route();

自动加载

使用Composer的自动加载功能或实现简单的自动加载:

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

php mvc实现

标签: phpmvc
分享给朋友:

相关文章

php实现打印功能

php实现打印功能

PHP实现打印功能的方法 在PHP中实现打印功能可以通过多种方式完成,包括直接输出到浏览器、生成PDF文件、调用打印机接口等。以下是几种常见的方法: 直接输出HTML内容 PHP可以通过echo或…

php实现文件上传

php实现文件上传

文件上传的基本实现 在PHP中实现文件上传需要使用$_FILES超全局数组处理上传的文件数据。表单必须设置enctype="multipart/form-data"属性,并采用POST方法提交。 创…

php实现搜索功能

php实现搜索功能

实现基础搜索功能 使用PHP和MySQL实现基础的搜索功能需要结合表单提交与数据库查询。创建一个HTML表单用于接收用户输入的搜索关键词,通过PHP处理表单数据并查询数据库。 // 搜索表单 (HT…

vue实现mvc

vue实现mvc

Vue 实现 MVC 模式的方法 Vue 本身是一个 MVVM(Model-View-ViewModel)框架,但可以通过合理的架构设计模拟 MVC(Model-View-Controller)模式。…

php实现打印功能

php实现打印功能

PHP 实现打印功能的方法 PHP 可以通过多种方式实现打印功能,具体取决于打印的目标(如打印机、PDF、网页等)和需求(如直接打印、生成打印预览等)。以下是几种常见的实现方式: 使用 JavaS…

php实现文件上传

php实现文件上传

PHP 文件上传实现方法 在 PHP 中实现文件上传需要处理 HTML 表单和服务器端脚本。以下是详细步骤: 创建 HTML 表单 使用 enctype="multipart/form-data"…