本文目录导读:

我来详细介绍如何创建PHP项目骨架(Skeleton),包括多种方式和最佳实践。
使用 Composer 创建
从 Packagist 获取骨架包
# 使用官方 skeleton composer create-project symfony/skeleton my-project # 使用 Laravel composer create-project laravel/laravel my-project # 使用 Slim composer create-project slim/slim-skeleton my-project
创建自定义骨架包
# 克隆到本地 git clone git@github.com:yourusername/php-skeleton.git my-project cd my-project composer install
手动创建基础骨架
目录结构
my-project/
├── app/
│ ├── Controllers/
│ ├── Models/
│ ├── Services/
│ └── Middlewares/
├── config/
│ ├── app.php
│ ├── database.php
│ └── routes.php
├── public/
│ └── index.php
├── resources/
│ ├── views/
│ └── assets/
├── storage/
│ ├── logs/
│ └── cache/
├── tests/
├── vendor/
├── .env
├── .env.example
├── .gitignore
├── composer.json
└── README.md
composer.json 示例
{
"name": "yourname/php-skeleton",
"description": "PHP项目骨架",
"type": "project",
"require": {
"php": "^8.1",
"vlucas/phpdotenv": "^5.5",
"monolog/monolog": "^3.0"
},
"require-dev": {
"phpunit/phpunit": "^10.0",
"symfony/var-dumper": "^6.0"
},
"autoload": {
"psr-4": {
"App\\": "app/",
"App\\Tests\\": "tests/"
}
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
},
"scripts": {
"test": "phpunit",
"dev": "php -S localhost:8000 -t public"
}
}
核心文件模板
public/index.php
<?php
declare(strict_types=1);
use Dotenv\Dotenv;
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
require __DIR__ . '/../vendor/autoload.php';
// 加载环境变量
$dotenv = Dotenv::createImmutable(__DIR__ . '/../');
$dotenv->load();
// 错误报告配置
error_reporting(E_ALL);
ini_set('display_errors', $_ENV['APP_DEBUG'] ?? '0');
// 设置时区
date_default_timezone_set($_ENV['APP_TIMEZONE'] ?? 'UTC');
// 初始化日志
$logger = new Logger('app');
$logger->pushHandler(new StreamHandler(__DIR__ . '/../storage/logs/app.log', Logger::DEBUG));
// 简单的路由示例
$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
if ($uri === '/') {
echo "Welcome to PHP Skeleton!";
} else {
http_response_code(404);
echo "404 Not Found";
}
config/database.php
<?php
return [
'host' => $_ENV['DB_HOST'] ?? 'localhost',
'port' => $_ENV['DB_PORT'] ?? '3306',
'database' => $_ENV['DB_DATABASE'] ?? 'app',
'username' => $_ENV['DB_USERNAME'] ?? 'root',
'password' => $_ENV['DB_PASSWORD'] ?? '',
'charset' => 'utf8mb4',
// PDO 配置
'options' => [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
],
];
.env.example
APP_NAME=MyApp APP_ENV=development APP_DEBUG=true APP_TIMEZONE=Asia/Shanghai DB_HOST=localhost DB_PORT=3306 DB_DATABASE=app DB_USERNAME=root DB_PASSWORD=
.gitignore
/vendor/ /node_modules/ .env /storage/logs/*.log /storage/cache/* !storage/logs/.gitkeep !storage/cache/.gitkeep .phpunit.result.cache
使用生成器工具
使用 make:file 命令
创建自定义命令:
# 创建脚手架命令 php bin/console make:controller php bin/console make:model php bin/console make:service
使用脚手架工具
<?php
// scripts/scaffold.php
class ScaffoldGenerator {
public function createController(string $name): void {
$template = <<<EOF
<?php
namespace App\Controllers;
class {$name}Controller
{
public function index(): void
{
echo "{$name} index";
}
}
EOF;
file_put_contents(__DIR__ . "/../app/Controllers/{$name}Controller.php", $template);
}
public function createModel(string $name): void {
$template = <<<EOF
<?php
namespace App\Models;
class {$name} extends BaseModel
{
protected string \$table = '{$name.toLowerCase()}';
protected array \$fillable = [
// 添加字段
];
}
EOF;
file_put_contents(__DIR__ . "/../app/Models/{$name}.php", $template);
}
}
使用容器化开发环境
Docker Compose
version: '3.8'
services:
php:
build: .
ports:
- "8000:80"
volumes:
- .:/var/www/html
environment:
- APP_ENV=development
- XDEBUG_MODE=debug
mysql:
image: mysql:8.0
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: applocal
volumes:
- mysql_data:/var/lib/mysql
volumes:
mysql_data:
常用框架的骨架差异
| 框架 | 骨架特点 | 适合场景 |
|---|---|---|
| Symfony | 完整企业级,组件丰富 | 大型应用 |
| Laravel | 开发效率高,生态好 | 快速开发 |
| Lumen | 轻量级API | 微服务 |
| Slim | 极简,灵活 | REST API |
| 自定义 | 完全控制 | 特殊需求 |
快速开始脚本
#!/bin/bash
# setup.sh - 项目初始化脚本
echo "Creating PHP Skeleton..."
# 创建目录结构
mkdir -p {app/{Controllers,Models,Services},config,public,src,resources/views,storage/{logs,cache},tests}
# 初始化 Composer
composer init --name="my/php-skeleton" --require="php:^8.1" --autoload="psr-4: App\\: app/"
# 安装依赖
composer require vlucas/phpdotenv
composer require --dev phpunit/phpunit
# 复制环境配置
cp .env.example .env
# 创建基础文件
touch public/index.php
touch app/Controllers/.gitkeep
touch app/Models/.gitkeep
echo "Skeleton project created successfully!"
echo "Run 'composer dev' to start development server"
最佳实践
初始化脚本 (composer.json)
{
"scripts": {
"post-create-project-cmd": [
"php scripts/init.php"
]
}
}
自动加载类(示例)
<?php
// app/Services/Database.php
namespace App\Services;
use PDO;
class Database {
private static ?PDO $instance = null;
public static function getInstance(): PDO {
if (self::$instance === null) {
$config = require __DIR__ . '/../../config/database.php';
self::$instance = new PDO(
"mysql:host={$config['host']};dbname={$config['database']}",
$config['username'],
$config['password'],
$config['options']
);
}
return self::$instance;
}
}
使用 PHP 内置服务器
# 开发环境 php -S localhost:8000 -t public # 带路由重写 php -S localhost:8000 -t public router.php
创建PHP项目骨架的最佳方式:
- 生产环境:使用成熟框架的官方骨架
- 学习目的:从零手动创建理解原理
- 团队内部:创建自定义骨架包并发布到私有仓库
- 快速原型:使用 Composer 创建简单骨架
选择符合你需求的方案,创建合适的骨架是PHP项目成功的第一步。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播