本文目录导读:

我来介绍几种创建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"
选择哪种方式取决于你的具体需求:
- 使用框架:快速开发,内置功能多
- 手动搭建:灵活控制,轻量级
- 自定义脚手架:可复用,团队规范统一
版权声明: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直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播