• 清晰的项目结构:易于理解和维护。
  • 前端与后端分离:PHP 负责业务逻辑和数据,HTML/CSS/JS 负责展示。
  • 模板引擎 (推荐使用):将 PHP 逻辑与 HTML 分离,使设计师和开发者可以并行工作。
  • 简单的路由系统:实现 URL 到页面的映射。
  • 自动加载类:遵循 PSR-4 标准,无需手动 includerequire
  • 配置文件分离:将数据库、网站信息等配置与代码分离。

最终项目结构

my-php-app/
├── app/                    # 应用核心目录
│   ├── Controllers/        # 控制器目录
│   │   └── PageController.php
│   ├── Models/             # 模型目录
│   │   └── ExampleModel.php
│   └── Views/              # 视图目录 (存放模板文件)
│       ├── layouts/        # 布局模板
│       │   └── main.php
│       ├── pages/          # 页面模板
│       │   └── home.php
│       └── errors/         # 错误页面模板
│           └── 404.php
│
├── config/                 # 配置文件目录
│   └── database.php
│
├── public/                 # Web 根目录 (对外可访问)
│   ├── index.php           # 前端控制器 (唯一入口)
│   ├── css/
│   │   └── style.css
│   ├── js/
│   │   └── app.js
│   └── images/
│
├── vendor/                 # Composer 依赖库目录
│
├── composer.json           # Composer 项目配置文件
└── .htaccess               # Apache URL 重写规则

第一步:安装和配置基础工具

  1. 安装 PHP: 确保你的系统已安装 PHP 7.4 或更高版本。
  2. 安装 Composer: Composer 是 PHP 的依赖管理工具,请务必在你的系统上安装它,访问 getcomposer.org 下载安装。

第二步:使用 Composer 初始化项目并安装依赖

在你的项目根目录 (my-php-app/) 下,运行以下命令:

php主网页结构框架模板代码
(图片来源网络,侵删)
# 1. 初始化 Composer 项目
composer init
# 按照提示输入项目信息,或者直接按回车使用默认值。
# 这会生成一个基本的 composer.json 文件。
# 2. 安装必要的依赖
# a) 自动加载工具 (推荐)
composer require --dev psr/psr-4
# b) 一个简单易用的模板引擎 (我们选择 Plates)
# Plates 是原生 PHP 模板引擎,学习成本低,功能强大。
composer require league/plates

安装完成后,你的 composer.json 文件会自动更新,vendor 目录也会被创建。composer.json 会自动添加 autoload 配置。


第三步:创建项目目录结构

根据上面的结构图,手动创建所有必要的目录和文件。


第四步:编写 .htaccess 文件 (用于 URL 重写)

public/ 目录下创建 .htaccess 文件,这个文件的作用是:将所有非文件/目录的请求都重写给 public/index.php 处理,从而实现美观的 URL。

# public/.htaccess
# 开启重写引擎
RewriteEngine On
# 如果请求的文件或目录存在,则直接访问
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# 否则,将所有请求重写到 index.php
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

重要提示:确保你的 Apache 服务器开启了 mod_rewrite 模块。

php主网页结构框架模板代码
(图片来源网络,侵删)

第五步:编写配置文件

config/ 目录下创建 database.php,用于存储数据库连接信息等敏感数据。

<?php
// config/database.php
return [
    'db_host' => 'localhost',
    'db_name' => 'my_database',
    'db_user' => 'root',
    'db_pass' => '',
];

第六步:编写核心 PHP 文件

public/index.php - 前端控制器

这是整个应用的唯一入口点,所有请求都会先到这里,它的职责是:加载配置、初始化核心组件、处理路由、调用控制器。

<?php
// public/index.php
// 1. 定义应用根目录
define('ROOT_PATH', dirname(__DIR__));
// 2. 加载 Composer 自动加载器
require_once ROOT_PATH . '/vendor/autoload.php';
// 3. 加载配置文件
$config = require_once ROOT_PATH . '/config/database.php';
// 4. 初始化 Plates 模板引擎
$templates = new League\Plates\Engine(ROOT_PATH . '/app/Views');
// 5. 获取请求的 URL ( /home -> home)
$url = $_GET['url'] ?? 'home';
$url = rtrim($url, '/');
$url = filter_var($url, FILTER_SANITIZE_URL);
// 6. 简单的路由处理
switch ($url) {
    case 'home':
        // 实际应用中,这里会调用控制器和方法
        //  (new PageController())->home();
        echo $templates->render('pages/home', ['title' => '欢迎来到首页']);
        break;
    case 'about':
        echo $templates->render('pages/about', ['title' => '关于我们']);
        break;
    case 'contact':
        echo $templates->render('pages/contact', ['title' => '联系我们']);
        break;
    default:
        // 如果路由不存在,显示 404 页面
        http_response_code(404);
        echo $templates->render('errors/404', ['title' => '页面未找到']);
        break;
}

app/Controllers/PageController.php - 示例控制器

控制器负责接收请求、调用模型、处理数据,并选择视图进行渲染。

<?php
// app/Controllers/PageController.php
// 为了让自动加载器找到这个类,我们需要在 composer.json 中配置命名空间
// "autoload": { "psr-4": { "App\\": "app/" } }
namespace App\Controllers;
class PageController
{
    /**
     * 渲染首页
     */
    public function home()
    {
        // 这里可以调用模型获取数据
        // $data = ExampleModel::getSomeData();
        // 将数据传递给视图
        // $templates->render('pages/home', ['title' => '首页', 'data' => $data]);
        echo "这是首页的控制器方法";
    }
    /**
     * 渲染关于页面
     */
    public function about()
    {
        echo "这是关于页面的控制器方法";
    }
}

app/Models/ExampleModel.php - 示例模型

模型负责与数据库交互,处理数据逻辑。

<?php
// app/Models/ExampleModel.php
namespace App\Models;
class ExampleModel
{
    public static function getSomeData()
    {
        // 这里是数据库查询逻辑
        //  return DB::table('users')->get();
        return ['示例数据1', '示例数据2'];
    }
}

第七步:编写视图文件 (HTML 模板)

app/Views/layouts/main.php - 主布局模板

这个文件定义了网站的通用结构,其他页面模板会嵌入到这里。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0"><?php echo $title ?? '默认标题'; ?></title>
    <link rel="stylesheet" href="/css/style.css">
</head>
<body>
    <header>
        <nav>
            <a href="/">首页</a>
            <a href="/about">lt;/a>
            <a href="/contact">联系</a>
        </nav>
    </header>
    <main>
        <?php echo $this->section('content'); ?>
    </main>
    <footer>
        <p>&copy; <?php echo date('Y'); ?> 我的 PHP 网站. All rights reserved.</p>
    </footer>
    <script src="/js/app.js"></script>
</body>
</html>

app/Views/pages/home.php - 首页模板

这个文件只包含首页特有的内容,并继承主布局。

<?php $this->layout('layouts/main', ['title' => '欢迎来到首页']); ?>
<?php $this->start('content'); ?>
    <h1>你好,世界!</h1>
    <p>这是一个使用 PHP 和 Plates 模板引擎构建的现代化网站框架。</p>
    <p>你可以在这里放置首页的内容。</p>
<?php $this->stop(); ?>

app/Views/errors/404.php - 404 错误页面

<?php $this->layout('layouts/main', ['title' => '404 - 页面未找到']); ?>
<?php $this->start('content'); ?>
    <h1>哎呀!页面不见了。</h1>
    <p>您访问的页面不存在或已被移除。</p>
    <a href="/">返回首页</a>
<?php $this->stop(); ?>

第八步:完善 composer.json 自动加载

为了让 App\ControllersApp\Models 命名空间下的类能够被自动加载,你需要修改 composer.json 文件。

{
    "name": "yourname/my-php-app",
    "description": "A modern PHP web application template.",
    "type": "project",
    "require": {
        "league/plates": "^3.5"
    },
    "require-dev": {
        "psr/psr-4": "^1.0"
    },
    "autoload": {
        "psr-4": {
            "App\\": "app/"
        }
    }
}

修改后,在项目根目录运行 composer dump-autoload,让 Composer 生出新的自动加载文件。


第九步:添加一些 CSS 和 JS

public/css/style.css 中添加一些基本样式:

/* public/css/style.css */
body { font-family: Arial, sans-serif; margin: 0; padding: 0; background-color: #f4f4f4; }
header { background: #333; color: #fff; padding: 1rem 0; }
nav a { color: #fff; text-decoration: none; margin: 0 15px; }
nav a:hover { text-decoration: underline; }
main { padding: 20px; max-width: 800px; margin: auto; background: #fff; border-radius: 5px; box-shadow: 0 0 10px rgba(0,0,0,0.1); }
footer { text-align: center; padding: 1rem; background: #333; color: #fff; position: absolute; bottom: 0; width: 100%; }

总结与如何使用

  1. 启动开发服务器:在 public/ 目录下运行 php -S localhost:8000
  2. 访问网站:打开浏览器访问 http://localhost:8000,你会看到首页。
  3. 访问其他页面:尝试访问 http://localhost:8000/abouthttp://localhost:8000/contact
  4. 访问不存在的页面:尝试访问 http://localhost:8000/abc,你会看到 404 错误页面。

这个模板为你提供了一个坚实的基础,你可以基于它进行扩展:

  • 更强大的路由:使用 nikic/fast-routesymfony/routing 等库。
  • 数据库抽象层:使用 illuminate/database (Laravel 的数据库组件) 或 medoo
  • 依赖注入容器:使用 php-di/php-di 来管理类之间的依赖关系,使代码更解耦。
  • MVC 架构:将 index.php 中的 switch 逻辑完全移到控制器中,实现更标准的 MVC 流程。

这个模板从简单开始,同时遵循了现代 PHP 开发的最佳实践,是一个非常好的起点。