本文目录导读:

- 什么是 PHP Skeleton
- 常见 Skeleton 类型
- 使用 Composer 创建 Skeleton
- 创建自己的 Skeleton 包
- Usage
- Testing
- 配置 .gitignore
- 添加 PHPStan 配置
- 添加 PHPUnit 配置
- Docker 配置(可选)
- 完成项目的辅助脚本
我来详细讲解 PHP Skeleton(项目骨架)的创建和使用方法:
什么是 PHP Skeleton
PHP Skeleton 是一个项目模板,包含了项目的标准目录结构、基础配置和常用组件,帮助快速启动新项目。
常见 Skeleton 类型
Composer 项目骨架(最常用)
# 创建标准 PHP 项目 composer create-project symfony/skeleton my-project # 或 composer create-project laravel/laravel my-project # 或 composer create-project slim/slim-skeleton my-app
自定义 Skeleton 结构
my-project/ ├── app/ │ ├── Controllers/ │ ├── Models/ │ └── Views/ ├── config/ ├── database/ │ └── migrations/ ├── public/ │ └── index.php ├── src/ ├── tests/ ├── vendor/ ├── .env.example ├── .gitignore ├── composer.json ├── README.md └── phpunit.xml
使用 Composer 创建 Skeleton
创建基础 PHP Skeleton
# 创建目录 mkdir my-php-project cd my-php-project # 初始化 composer composer init
标准 composer.json 配置
{
"name": "yourname/my-project",
"description": "A PHP project skeleton",
"type": "project",
"require": {
"php": "^8.0",
"symfony/console": "^6.0",
"symfony/dotenv": "^6.0"
},
"require-dev": {
"phpunit/phpunit": "^9.5",
"phpstan/phpstan": "^1.0"
},
"autoload": {
"psr-4": {
"App\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
},
"scripts": {
"test": "phpunit",
"analyse": "phpstan analyse src"
},
"minimum-stability": "stable",
"prefer-stable": true
}
创建自己的 Skeleton 包
示例:创建自定义 Skeleton
// skeleton/init.php
<?php
class ProjectSkeleton
{
private string $projectName;
private string $projectPath;
public function __construct(string $name, string $path)
{
$this->projectName = $name;
$this->projectPath = rtrim($path, '/') . '/' . $name;
}
public function create(): void
{
$this->createDirectoryStructure();
$this->createComposerFile();
$this->createCoreFiles();
$this->createReadme();
}
private function createDirectoryStructure(): void
{
$dirs = [
'app/Controllers',
'app/Models',
'app/Views',
'config',
'database/migrations',
'public',
'src',
'tests',
'vendor'
];
foreach ($dirs as $dir) {
$path = $this->projectPath . '/' . $dir;
if (!is_dir($path)) {
mkdir($path, 0755, true);
}
}
}
private function createComposerFile(): void
{
$composer = <<<JSON
{
"name": "{$this->projectName}",
"type": "project",
"require": {
"php": "^8.0"
},
"autoload": {
"psr-4": {
"App\\\\": "src/"
}
}
}
JSON;
file_put_contents($this->projectPath . '/composer.json', $composer);
}
private function createCoreFiles(): void
{
// 创建入口文件
$index = <<<PHP
<?php
require __DIR__ . '/../vendor/autoload.php';
echo "Hello from {$this->projectName}!";
PHP;
file_put_contents($this->projectPath . '/public/index.php', $index);
// 创建配置文件
file_put_contents(
$this->projectPath . '/config/config.php',
"<?php\nreturn [\n 'app_name' => '{$this->projectName}'\n];\n"
);
// 创建环境文件
file_put_contents(
$this->projectPath . '/.env.example',
"APP_NAME={$this->projectName}\nAPP_ENV=local\nAPP_DEBUG=true\n"
);
}
private function createReadme(): void
{
$readme = <<<MD
# {$this->projectName}
## Installation
```bash
composer install
Usage
php -S localhost:8000 -t public
Testing
composer test
MD;
file_put_contents($this->projectPath . '/README.md', $readme);
}
// 使用示例 $skeleton = new ProjectSkeleton('my-first-project', './projects'); $skeleton->create(); echo "Project skeleton created successfully!\n";
## 5. 使用 Symfony Skeleton
### 安装 Symfony Skeleton
```bash
# 创建 Symfony 项目
composer create-project symfony/skeleton my-symfony-app
# 启动开发服务器
cd my-symfony-app
php bin/console server:run
Symfony 常用命令
# 查看所有命令 php bin/console list # 创建控制器 php bin/console make:controller HomeController # 创建实体 php bin/console make:entity Product # 创建迁移 php bin/console make:migration # 创建表单 php bin/console make:form ProductType
配置 .gitignore
# Dependencies /vendor/ # Environment .env .env.local .env.*.local # Logs var/log/*.log # Cache var/cache/* !.gitkeep # Builds /build/ # IDE .idea/ .vscode/ *.swp # OS .DS_Store Thumbs.db
添加 PHPStan 配置
<!-- phpstan.neon -->
parameters:
level: 6
paths:
- src
tmpDir: var/phpstan
bootstrapFiles:
- vendor/autoload.php
excludes_analyse:
- src/Migrations/*
添加 PHPUnit 配置
<!-- phpunit.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
bootstrap="vendor/autoload.php"
colors="true">
<testsuites>
<testsuite name="Project Test Suite">
<directory>tests</directory>
</testsuite>
</testsuites>
<php>
<env name="APP_ENV" value="testing"/>
</php>
</phpunit>
Docker 配置(可选)
# Dockerfile
FROM php:8.2-fpm
RUN apt-get update && apt-get install -y \
git \
unzip \
libpq-dev
RUN docker-php-ext-install pdo_mysql
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
WORKDIR /var/www/html
EXPOSE 9000
CMD ["php-fpm"]
完成项目的辅助脚本
// setup.php
<?php
// 自动安装依赖
echo "Installing dependencies...\n";
passthru('composer install');
// 创建 .env 文件
if (!file_exists('.env')) {
copy('.env.example', '.env');
echo "Created .env file\n";
}
// 初始化 Git
if (!is_dir('.git')) {
passthru('git init');
echo "Initialized Git repository\n";
}
// 生成数据库
if (file_exists('bin/console')) {
passthru('php bin/console doctrine:database:create');
passthru('php bin/console make:migration');
passthru('php bin/console doctrine:migrations:migrate');
}
echo "Project setup completed!\n";
-
单行命令创建:
composer create-project yourname/your-skeleton project-name
-
或手动创建:
mkdir my-project && cd my-project composer init # 添加依赖、配置 autoload 等
-
安装依赖:
composer install
-
创建 .env 配置:
cp .env.example .env
-
启动开发服务器:
php -S localhost:8000 -t public
-
运行测试:
php vendor/bin/phpunit
这样你就有了一个完整的、可复用的 PHP 项目骨架,可以快速开始新项目开发。