PHP 怎么PHP Skeleton

wen PHP项目 1

本文目录导读:

PHP 怎么PHP Skeleton

  1. 什么是 PHP Skeleton
  2. 常见 Skeleton 类型
  3. 使用 Composer 创建 Skeleton
  4. 创建自己的 Skeleton 包
  5. Usage
  6. Testing
  7. 配置 .gitignore
  8. 添加 PHPStan 配置
  9. 添加 PHPUnit 配置
  10. Docker 配置(可选)
  11. 完成项目的辅助脚本

我来详细讲解 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";
  1. 单行命令创建

    composer create-project yourname/your-skeleton project-name
  2. 或手动创建

    mkdir my-project && cd my-project
    composer init
    # 添加依赖、配置 autoload 等
  3. 安装依赖

    composer install
  4. 创建 .env 配置

    cp .env.example .env
  5. 启动开发服务器

    php -S localhost:8000 -t public
  6. 运行测试

    php vendor/bin/phpunit

这样你就有了一个完整的、可复用的 PHP 项目骨架,可以快速开始新项目开发。

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