本文目录导读:

我来介绍几种创建PHP项目脚手架的方法:
使用 Composer 创建项目
基于官方骨架包
# 创建 Slim 项目 composer create-project slim/slim-skeleton my-app # 创建 Laravel 项目 composer create-project laravel/laravel my-app # 创建 Symfony 项目 composer create-project symfony/skeleton my-app
使用自定义脚手架
# 创建一个基础PHP项目 composer create-project php/php-src my-app
手动创建基础脚手架
创建一个基础的目录结构和文件:
#!/bin/bash
# create-php-project.sh
mkdir -p {app,config,public,src,routes,storage,views}
touch index.php
touch .env.example
touch .gitignore
# 创建基础文件
cat > index.php << 'EOF'
<?php
require_once 'vendor/autoload.php';
echo "Hello World";
EOF
cat > .gitignore << 'EOF'
/vendor/
.env
/storage/*.log
EOF
# 创建composer.json
cat > composer.json << 'EOF'
{
"name": "yourname/your-project",
"description": "PHP Project",
"type": "project",
"require": {
"php": "^8.0"
},
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}
EOF
使用框架提供的CLI工具
# Laravel composer global require laravel/installer laravel new my-project # Symfony symfony new my_app --full # Lumen composer create-project laravel/lumen my-app # CodeIgniter composer create-project codeigniter4/appstarter my-app # Yii2 composer create-project yiisoft/yii2-app-basic my-app
使用PHP脚手架生成器
# 安装脚手架工具 composer require --dev php-scaffolder/scaffolder # 使用 scaffold init scaffold create:controller UserController scaffold create:model User
自定义脚手架模板
创建自定义脚手架工具:
<?php
// scaffold.php
class ScaffoldGenerator {
private array $structure = [
'app' => ['Controllers', 'Models', 'Views'],
'config' => [],
'database' => ['migrations', 'seeds'],
'public' => ['css', 'js', 'images'],
'src' => [],
'storage' => ['logs', 'cache', 'uploads'],
'tests' => ['Unit', 'Feature'],
'vendor' => []
];
private array $files = [
'public/index.php' => 'Front Controller',
'config/app.php' => 'Application Config',
'src/App.php' => 'Application Class',
'.env.example' => 'Environment Variables',
'README.md' => 'Project Documentation'
];
public function generate(string $projectName): void {
// 创建目录结构
foreach ($this->structure as $dir => $subdirs) {
if (!is_dir($projectName . '/' . $dir)) {
mkdir($projectName . '/' . $dir, 0755, true);
}
foreach ($subdirs as $subdir) {
mkdir($projectName . '/' . $dir . '/' . $subdir, 0755, true);
}
}
// 创建基础文件
$this->createFiles($projectName);
$this->createPackageJson($projectName);
$this->createPublicIndex($projectName);
}
private function createPublicIndex($projectName): void {
$content = <<<PHP
<?php
/**
* 入口文件
*/
require_once dirname(__DIR__) . '/vendor/autoload.php';
use App\\App;
\$app = new App();
\$app->run();
PHP;
file_put_contents("$projectName/public/index.php", $content);
}
}
// 使用
$scaffold = new ScaffoldGenerator();
$scaffold->generate('my-project');
在线脚手架生成器
- PHP Scaffold Generator:https://php.is/index.php
- Bootstrap Studio:支持PHP导出
- Laravel Boilerplate:https://github.com/rappasoft/laravel-boilerplate
最佳实践建议
推荐的目录结构
my-project/
├── app/ # 核心业务逻辑
│ ├── Controllers/
│ ├── Models/
│ ├── Middleware/
│ └── Providers/
├── config/ # 配置文件
├── database/ # 数据库迁移和种子
├── public/ # 公共资源
├── src/ # 自定义代码
├── storage/ # 存储文件
├── tests/ # 测试代码
├── vendor/ # 依赖包
├── .env.example # 环境变量示例
├── .gitignore # Git忽略文件
├── composer.json # Composer配置
└── README.md # 项目说明
推荐的工具链
{
"require": {
"php": "^8.0",
"vlucas/phpdotenv": "^5.4",
"monolog/monolog": "^3.0"
},
"require-dev": {
"phpunit/phpunit": "^9.6",
"phpstan/phpstan": "^1.10",
"friendsofphp/php-cs-fixer": "^3.0"
}
}
使用Makefile自动化
# Makefile
.PHONY: init install setup
init:
mkdir -p app config public storage src tests
touch .env.example .gitignore README.md
@echo "Project structure created"
install:
composer install
setup:
cp .env.example .env
@echo "Setup complete"
选择哪种方式取决于你的具体需求:
- 使用框架:快速开发,内置功能多
- 手动搭建:灵活控制,轻量级
- 自定义脚手架:可复用,团队规范统一