当前位置:首页 > PHP

php实现mvc框架

2026-02-14 01:15:54PHP

PHP 实现 MVC 框架

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

目录结构

一个典型的 MVC 框架目录结构如下:

app/
    controllers/
    models/
    views/
public/
    index.php
    .htaccess
core/
    Router.php
    Controller.php
    Model.php
    View.php

路由实现

路由负责解析 URL 并调用相应的控制器和方法。以下是一个简单的路由类示例:

class Router {
    protected $routes = [];

    public function addRoute($route, $controller, $action) {
        $this->routes[$route] = ['controller' => $controller, 'action' => $action];
    }

    public function dispatch($uri) {
        if (array_key_exists($uri, $this->routes)) {
            $controller = $this->routes[$uri]['controller'];
            $action = $this->routes[$uri]['action'];
            $controller = new $controller();
            $controller->$action();
        } else {
            throw new Exception("No route found for URI: $uri");
        }
    }
}

控制器基类

控制器负责处理用户请求并调用模型和视图:

class Controller {
    protected $model;
    protected $view;

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

    public function setModel($model) {
        $this->model = $model;
    }
}

视图基类

视图负责渲染模板并输出 HTML:

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

模型基类

模型负责数据操作和业务逻辑:

class Model {
    protected $db;

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

入口文件

public/index.php 是框架的入口点:

require_once '../core/Router.php';
require_once '../core/Controller.php';
require_once '../core/Model.php';
require_once '../core/View.php';

$router = new Router();
$router->addRoute('/', 'HomeController', 'index');
$router->addRoute('/about', 'AboutController', 'index');

$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$router->dispatch($uri);

.htaccess 配置

确保所有请求都重定向到 index.php

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

使用示例

创建一个简单的控制器和视图:

// app/controllers/HomeController.php
class HomeController extends Controller {
    public function index() {
        $data = ['title' => 'Home Page'];
        $this->view->render('home/index', $data);
    }
}
<!-- app/views/home/index.php -->
<!DOCTYPE html>
<html>
<head>
    <title><?php echo $title; ?></title>
</head>
<body>
    <h1>Welcome to the Home Page</h1>
</body>
</html>

数据库操作

在模型中实现数据操作:

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

自动加载

使用 spl_autoload_register 自动加载类文件:

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

以上实现提供了一个基础的 PHP MVC 框架结构,可以根据需求进一步扩展功能,如中间件、依赖注入等。

php实现mvc框架

标签: 框架php
分享给朋友:

相关文章

php实现分页

php实现分页

PHP实现分页的基本方法 使用LIMIT和OFFSET进行数据库查询分页。通过计算当前页码和每页显示数量,动态生成SQL语句。 $page = isset($_GET['page']) ? (in…

php实现搜索功能

php实现搜索功能

实现基本的搜索功能 在PHP中实现搜索功能通常涉及数据库查询。以下是一个简单的实现方式,假设使用MySQL数据库: <?php // 连接数据库 $conn = new mysqli('lo…

php实现定时任务

php实现定时任务

PHP 实现定时任务的几种方法 在 PHP 中实现定时任务可以通过多种方式完成,具体选择取决于项目需求和服务器环境。以下是常见的实现方法: 使用 Cron 任务 Cron 是 Linux 系统中常…

php 实现接口

php 实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不包含具体的实现。类可以实现(implement)接口,并必须实现接口中定义的所有方法。 定义接口 接口通…

php 实现验证码

php 实现验证码

使用 PHP 生成验证码 验证码(CAPTCHA)用于防止自动化脚本提交表单,以下是几种常见的 PHP 实现方法。 使用 GD 库生成图片验证码 GD 库是 PHP 的图像处理扩展,可用于生成验证…

php实现聊天

php实现聊天

实现 PHP 聊天功能的方法 使用 WebSocket 和 PHP 实现实时聊天 WebSocket 是一种全双工通信协议,适合实现实时聊天功能。PHP 可以通过 Ratchet 库实现 WebSo…