当前位置:首页 > 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 自动加载类文件:

php实现mvc框架

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

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

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

相关文章

实现vue框架

实现vue框架

Vue 框架的实现步骤 安装 Vue.js 最新版本,推荐通过 npm 或 yarn 进行安装。确保 Node.js 环境已配置完成。 npm install vue 创建 Vue 实例,通过 ne…

php实现验证码

php实现验证码

PHP实现验证码的方法 使用GD库生成验证码 GD库是PHP中处理图像的扩展,可用于生成验证码图片。 <?php session_start(); $width = 120; $height…

php实现异步

php实现异步

PHP 实现异步的方法 PHP 本身是同步执行的脚本语言,但可以通过以下方法模拟异步操作或实现异步效果: 使用多进程(pcntl_fork) 通过 pcntl_fork 创建子进程实现异步,适用于…

php实现即时通讯

php实现即时通讯

PHP 实现即时通讯的方案 即时通讯(IM)可以通过多种方式实现,PHP 作为服务器端语言,通常需要结合前端技术(如 WebSocket、AJAX)或第三方服务来实现实时通信。以下是几种常见的实现方式…

php实现域名

php实现域名

PHP实现域名操作的方法 获取当前域名 使用$_SERVER['HTTP_HOST']可以获取当前访问的域名: $currentDomain = $_SERVER['HTTP_HOST']; ech…

php实现单例模式

php实现单例模式

单例模式的概念 单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供一个全局访问点。这种模式常用于数据库连接、日志记录器等需要全局唯一实例的场景。 PHP实现单例模式的关键步骤 私有化构造函…