当前位置: 首页 > news >正文

用deepseek创建可运行的简单的php框架

用deepseek创建可运行的简单的php框架

构建一个简单的PHP MVC框架(从零开始)

本文将手把手教你构建一个精简的PHP MVC框架,适合学习框架原理和快速开发小型项目。以下是完整实现步骤:


一、框架结构

创建以下目录结构:

/myframework
├── app/
│   ├── controllers/
│   ├── models/
│   └── views/
├── core/
│   ├── Router.php
│   ├── Controller.php
│   └── Model.php
├── public/
│   └── index.php
└── config.php

二、核心组件实现

1. 路由系统 (core/Router.php)

class Router {
    protected $controller = 'Home';
    protected $method = 'index';
    protected $params = [];

    public function __construct() {
        $url = $this->parseUrl();
        
        // 控制器处理
        if (isset($url[0]) && file_exists("../app/controllers/{$url[0]}.php")) {
            $this->controller = $url[0];
            unset($url[0]);
        }
        
        require_once "../app/controllers/{$this->controller}.php";
        $this->controller = new $this->controller;

        // 方法处理
        if (isset($url[1])) {
            if (method_exists($this->controller, $url[1])) {
                $this->method = $url[1];
                unset($url[1]);
            }
        }

        // 参数处理
        $this->params = $url ? array_values($url) : [];
        
        // 调用控制器方法
        call_user_func_array(
            [$this->controller, $this->method], 
            $this->params
        );
    }

    private function parseUrl() {
        if (isset($_GET['url'])) {
            return explode('/', filter_var(
                rtrim($_GET['url'], '/'), 
                FILTER_SANITIZE_URL
            ));
        }
    }
}

2. 基础控制器 (core/Controller.php)

class Controller {
    protected function view($view, $data = []) {
        extract($data);
        require_once "../app/views/$view.php";
    }
}

3. 基础模型 (core/Model.php)

class Model {
    protected $db;

    public function __construct() {
        $this->db = new PDO(
            'mysql:host='.DB_HOST.';dbname='.DB_NAME,
            DB_USER, 
            DB_PASS
        );
    }

    // 基础查询方法
    public function query($sql) {
        return $this->db->query($sql);
    }
}

三、配置文件 (config.php)

<?php
// 数据库配置
define('DB_HOST', 'localhost');
define('DB_NAME', 'test');
define('DB_USER', 'root');
define('DB_PASS', '');

// 框架配置
define('BASE_URL', 'http://localhost/myframework/public/');

四、入口文件 (public/index.php)

<?php
// 初始化配置
require_once '../../config.php';

// 自动加载核心类
spl_autoload_register(function ($class) {
    require_once '../core/' . $class . '.php';
});

// 启动路由
new Router();

五、创建示例功能

1. 创建首页控制器 (app/controllers/Home.php)

class Home extends Controller {
    public function index() {
        $data = [
            'title' => '欢迎使用MyFramework',
            'content' => '这是一个简单的PHP MVC框架示例'
        ];
        $this->view('home/index', $data);
    }
}

2. 创建视图文件 (app/views/home/index.php)

<!DOCTYPE html>
<html>
<head>
    <title><?= $title ?></title>
</head>
<body>
    <h1><?= $title ?></h1>
    <p><?= $content ?></p>
</body>
</html>

3. 创建模型示例 (app/models/User.php)

class User extends Model {
    public function getAll() {
        return $this->query("SELECT * FROM users");
    }
}

六、运行与测试

  1. 配置虚拟主机指向 public/ 目录
  2. 访问 http://localhost/ 查看首页
  3. 尝试创建新路由:http://localhost/user/list

七、扩展建议

  1. 添加.htaccess实现友好URL:

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
    
  2. 添加以下功能增强框架:

    • 中间件系统
    • 表单验证器
    • ORM功能
    • 模板引擎
    • 错误处理机制

相关文章:

  • 如何在k8s中对接s3存储
  • 多线程 - wait notify
  • Apache Commons Lang3 常用方法详解
  • 大数据(4.3)Hive基础查询完全指南:从SELECT到复杂查询的10大核心技巧
  • 【超分辨率】基于DDIM+SwinUnet实现超分辨率
  • 深入理解pthread多线程编程:从基础到生产者-消费者模型
  • Android: Handler 的用法详解
  • 【工具】在 Visual Studio 中使用 Dotfuscator 对“C# 类库(DLL)或应用程序(EXE)”进行混淆
  • 关于 Nginx 配置中 proxy_set_header Host $host 的作用及其对 HTTP 请求头影响的详细说明,结合示例展示设置前后的差异
  • 【VSCode SSH 连接远程服务器】:身份验证时,出现 key: invalid format 的问题
  • 服务端向客户端推送数据的实现方案
  • Linux | I.MX6ULL 终结者底板原理图讲解完(第六天)
  • 关于亚马逊TTS的笔记
  • 银行回单识别技术应用与API服务解析
  • 1 分钟掌握 PlantUML,快速绘制 UML 类图!
  • Docker学习--本地镜像管理相关命令--docker history 命令
  • 在Windows下使用Docker部署Nacos注册中心(基于MySQL容器)
  • 初识C++(入门)
  • kubernetes》》k8s》》Deployment》》ClusterIP、LoadBalancer、Ingress 内部访问、外边访问
  • 31天Python入门——第20天:魔法方法详解
  • 工人日报:应对“职场肥胖”,健康与减重同受关注
  • 受关税政策影响,沃尔玛将上调部分商品在美售价
  • 贵州仁怀通报“正新鸡排鸡腿里全是蛆”:已对同类产品封存送检
  • 鄂州交警通报致1死2伤车祸:女子操作不当引发,已被刑拘
  • 乌总统:若与普京会谈,全面停火和交换战俘是主要议题
  • 费高云不再担任安徽省人民政府副省长