PHP 怎么PHP项目脚手架

wen PHP项目 2

本文目录导读:

PHP 怎么PHP项目脚手架

  1. 使用 Composer 创建项目
  2. 手动创建基础脚手架
  3. 使用框架提供的CLI工具
  4. 使用PHP脚手架生成器
  5. 自定义脚手架模板
  6. 在线脚手架生成器
  7. 最佳实践建议
  8. 使用Makefile自动化

我来介绍几种创建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"

选择哪种方式取决于你的具体需求:

  • 使用框架:快速开发,内置功能多
  • 手动搭建:灵活控制,轻量级
  • 自定义脚手架:可复用,团队规范统一

抱歉,评论功能暂时关闭!