six-shop/maker-bundle

A powerful CLI tool for generating SixShop extension boilerplate code

dev-main 2025-09-24 17:48 UTC

This package is auto-updated.

Last update: 2025-09-24 16:15:52 UTC


README

A powerful command-line tool for generating SixShop extension boilerplate code, designed to streamline the development process within the SixShop ecosystem.

License: MIT PHP Version ThinkPHP

🚀 Features

🔧 Extension Generation

  • Automated Code Generation: Generates complete SixShop extension structure with zero manual coding
  • Intelligent Detection: Automatically detects existing extensions and pre-fills configuration values
  • Smart Path Management: Flexible target path selection with validation and confirmation
  • Template-Based: Uses configurable PHP templates for consistent code generation
  • PSR-4 Compliant: Generates proper namespace structure and autoloading configuration
  • Interactive CLI: User-friendly command-line interface with helpful prompts and validation

📊 Database Migration Generation

  • Extension-Aware Migration Generation: Automatically detects SixShop extension context and configuration
  • Complete Code Generation Workflow: Generates migration files, ThinkPHP models, and entity classes
  • Interactive Workflow: Step-by-step prompts for extension path, table details, and field definitions
  • CakePHP Migrations Integration: Uses the robust CakePHP migrations library for database schema management
  • Rich Field Types: Support for string, integer, text, decimal, boolean, datetime, and more
  • Advanced Options: Field length, nullability, default values, comments, indexes, and unique constraints
  • Template-Based Models: Generated models include validation rules, type casting, and relationship methods

📋 Requirements

  • PHP: >= 8.0
  • Composer: Latest version recommended
  • ThinkPHP Framework: ^8.1
  • Symfony Console: ^7.3

🛠 Installation

Via Composer (Recommended)

# Install as development dependency
composer require six-shop/maker-bundle --dev

# Or install globally
composer global require six-shop/maker-bundle

Manual Installation

# Clone the repository
git clone https://github.com/sixshop/maker-bundle.git
cd maker-bundle

# Install dependencies
composer install

🎯 Usage

Extension Generation

Quick Start

# If installed locally
php vendor/bin/sixshop-maker create_extension

# If installed globally
sixshop-maker create_extension

# Or directly
php bin/sixshop-maker create_extension

# To see all available commands
php vendor/bin/sixshop-maker list

Interactive Workflow

The tool guides you through a step-by-step process:

  1. Target Path Selection: Choose where to generate your extension
  2. Package Configuration: Set package name, namespace, and description
  3. Extension Settings: Configure extension ID and metadata
  4. File Generation: Automatic creation of all necessary files

Example Session

$ php vendor/bin/sixshop-maker create_extension

请输入扩展生成的目标路径 [/current/path]: ./my-extension
将在以下路径生成扩展: /full/path/to/my-extension
确认使用此路径? [yes]

请输入Composer包名 (例如: six-shop/hello): my-vendor/awesome-extension
请输入包描述 [A SixShop extension package]: My awesome SixShop extension
请输入命名空间 (例如: SixShop\Hello\) [MyVendor\AwesomeExtension\]: 
请输入扩展ID [my-vendor-awesome-extension]: 

✅ 扩展创建完成!

Database Migration Generation

Quick Start

# Create migration with models (fully interactive)
php vendor/bin/sixshop-maker create_migration

# Add columns to existing table
php vendor/bin/sixshop-maker create_migration --action=add_column

# Drop columns from table
php vendor/bin/sixshop-maker create_migration --action=drop_column

Interactive Migration Creation

$ php vendor/bin/sixshop-maker create_migration users

📏 生成数据库迁移文件

请输入项目目标路径 (绝对路径或相对路径) [/current/path]: ./my-project
将在以下路径生成迁移文件: /full/path/to/my-project/database/migrations
确认使用此路径? [yes]

== 表名: users ==
== 操作类型: create ==
迁移文件将保存在: /full/path/to/my-project/database/migrations

🗒 定义表字段
支持的字段类型: integer, biginteger, string, text, boolean, datetime, timestamp, date, time, decimal, float, binary, json

字段名 (回车结束字段定义): username
字段类型 [string]: string
字段长度 (可选): 100
允许为空? [yes]: no
默认值 (可选): 
字段备注 (可选): User login name
创建索引? [no]: no
创建唯一索引? [no]: yes

✓ 已添加字段: username (string)

字段名 (回车结束字段定义): email
字段类型 [string]: string
字段长度 (可选): 255
允许为空? [yes]: no
默认值 (可选): 
字段备注 (可选): User email address
创建索引? [no]: no
创建唯一索引? [no]: yes

✓ 已添加字段: email (string)

字段名 (回车结束字段定义): 

✅ Migration created: 20231201120000_create_users_table.php
✅ 迁移文件生成完成!

Supported Field Types

TypeDescriptionOptions
integer32-bit integerlength, null, default, comment, index
biginteger64-bit integernull, default, comment, index
stringVariable-length stringlength (default: 255), null, default, comment, index, unique
textLong text fieldnull, default, comment
booleanTrue/false valuenull, default, comment, index
decimalFixed-point numberprecision, scale, null, default, comment
floatFloating-point numbernull, default, comment
datetimeDate and timenull, default, comment
timestampUnix timestampnull, default, comment
dateDate onlynull, default, comment
timeTime onlynull, default, comment
binaryBinary datalength, null, comment
jsonJSON datanull, default, comment

Programmatic Usage

use SixShop\MakerBundle\Generator\MigrationGenerator;

$generator = new MigrationGenerator('/path/to/migrations');

// Define table fields
$fields = [
    [
        'name' => 'username',
        'type' => 'string',
        'length' => 100,
        'null' => false,
        'unique' => true,
        'comment' => 'User login name'
    ],
    [
        'name' => 'email',
        'type' => 'string', 
        'length' => 255,
        'null' => false,
        'unique' => true,
        'comment' => 'User email address'
    ]
];

// Generate migration
$success = $generator->generateMigration('users', $fields, 'create');

📁 Generated Structure

The tool creates a complete extension structure:

my-extension/
├── composer.json          # Package configuration
├── .gitignore            # Git ignore rules
├── src/
│   └── Extension.php     # Main extension class
├── route/
│   ├── api.php          # API routes
│   └── admin.php        # Admin routes
├── config.php           # Extension configuration
└── info.php            # Extension metadata

🧪 Testing

Unit Test Suite

The SixShop Maker Bundle includes a comprehensive unit test suite covering all major functionality:

Test Coverage

ComponentTestsDescription
ComposerGeneratorTest11 testsComposer.json generation and validation
ControllerGeneratorTest10 testsAPI and Admin controller generation
EntityGeneratorTest8 testsEntity class generation with validation
ModelGeneratorTest6 testsThinkPHP model generation
MigrationGeneratorTest8 testsDatabase migration generation
RouteUpdaterTest10 testsRoute file updating functionality

Running Tests

# Run all tests
vendor/bin/phpunit

# Run with detailed output
vendor/bin/phpunit --testdox

# Run specific test class
vendor/bin/phpunit tests/Unit/Generator/ComposerGeneratorTest.php

# Run with coverage (requires Xdebug)
vendor/bin/phpunit --coverage-html coverage/

Test Categories

Composer Generator Tests:

  • ✅ Content generation with proper JSON structure
  • ✅ PSR-4 autoloading configuration
  • ✅ SixShop extension metadata
  • ✅ File saving and directory creation
  • ✅ Package validation and error handling

Controller Generator Tests:

  • ✅ API and Admin controller generation
  • ✅ RESTful method implementation
  • ✅ Namespace and import handling
  • ✅ Validation rule generation
  • ✅ Entity method integration

Entity Generator Tests:

  • ✅ Entity class structure generation
  • ✅ Method parameter validation
  • ✅ Namespace and directory handling
  • ✅ BaseEntity inheritance
  • ✅ Type safety implementation

Model Generator Tests:

  • ✅ ThinkPHP model generation
  • ✅ Field type mapping
  • ✅ Validation rules
  • ✅ Relationship definitions
  • ✅ Configuration options

Migration Generator Tests:

  • ✅ Create table migrations
  • ✅ Add/drop column operations
  • ✅ Field type support
  • ✅ Index and constraint handling
  • ✅ CakePHP integration

Route Updater Tests:

  • ✅ Route file updating
  • ✅ Resource route generation
  • ✅ Namespace handling
  • ✅ Existing route detection
  • ✅ Error handling

Test Environment

  • Framework: PHPUnit 10.5+
  • PHP Version: 8.0+
  • Test Coverage: 90%+ code coverage
  • Isolated Testing: Each test uses temporary directories
  • Mock Objects: Symfony Console components mocked

🔧 Smart Features

Existing Extension Detection

The tool automatically detects existing composer.json files and offers:

  • One-click regeneration with existing configuration
  • Pre-filled prompts with current values
  • Seamless updates for existing extensions

Path Intelligence

  • Automatic validation of target paths
  • Permission checking before generation
  • Directory creation if paths don't exist
  • Confirmation prompts for safety

Namespace Handling

  • Consistent formatting across all generated files
  • PSR-4 compliance with proper autoloading
  • JSON-safe escaping in configuration files
  • User-friendly display in terminal interfaces

🎨 Customization

Templates

All generated files use PHP templates located in /templates/:

  • composer.json.tpl.php - Package configuration
  • src/Extension.php.tpl.php - Main extension class
  • .gitignore.tpl.php - Git ignore rules
  • route/api.php.tpl.php - API routes
  • route/admin.php.tpl.php - Admin routes
  • config.php.tpl.php - Configuration file
  • info.php.tpl.php - Metadata file

Available Variables

Templates have access to these variables:

  • $name - Package name (e.g., "vendor/package")
  • $namespace - PHP namespace (e.g., "Vendor\Package\")
  • $id - Extension ID (e.g., "vendor-package")
  • $description - Package description

🏗 Architecture

Components

Extension Generation

  • Maker - Main command controller and user interaction for extension creation
  • ComposerGenerator - Handles composer.json generation and detection
  • DirectoryGenerator - Creates directory structure
  • GitignoreGenerator - Generates .gitignore files
  • PhpCodeGenerator - Creates PHP source files from templates

Migration Generation

  • MigrationMaker - Enhanced CLI command for database migration generation with full SixShop integration
  • MigrationGenerator - Core migration file generator using CakePHP Migrations
  • ModelGenerator - ThinkPHP model generator using templates with validation and relationships
  • EntityGenerator - Entity class generator using templates with type safety and data validation
  • Interactive Field Builder - Step-by-step field definition interface
  • Extension Context Detection - Automatic detection and parsing of composer.json for extension metadata

Design Patterns

  • Generator Pattern: Specialized classes for each artifact type
  • Template Method: Consistent generation workflow
  • Single Responsibility: Each generator handles one concern
  • Command Pattern: CLI interface implementation

🔄 Workflow Examples

Creating a New Extension

# Start the maker
php vendor/bin/sixshop-maker create_extension

# Follow prompts
Target Path: ./my-new-extension
Package Name: sixshop/payment-gateway
Namespace: SixShop\PaymentGateway\
Extension ID: sixshop-payment-gateway

# Result: Complete extension ready for development

Regenerating an Existing Extension

# Run in directory with existing composer.json
php vendor/bin/sixshop-maker create_extension

# Tool detects existing configuration
Found existing composer.json: ./composer.json
Package: sixshop/payment-gateway
Namespace: SixShop\PaymentGateway\

# Confirm regeneration
Use existing configuration? [yes]

# Files updated with current templates

🐛 Troubleshooting

Common Issues

Permission Errors

Error: Target path not writable

Solution: Ensure write permissions on target directory

Missing Dependencies

Error: Composer autoload not found

Solution: Run composer install first

Invalid Package Names

Error: Package name format incorrect

Solution: Use format "vendor/package" with lowercase and hyphens

Debug Mode

For verbose output, use PHP's built-in debugging:

# Enable error reporting
php -d display_errors=1 vendor/bin/sixshop-maker

🤝 Contributing

We welcome contributions! Please see our contributing guidelines:

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests if applicable
  5. Submit a pull request

Development Setup

# Clone and setup
git clone https://github.com/sixshop/maker-bundle.git
cd maker-bundle
composer install

# Run the tool locally
php bin/sixshop-maker list

📄 License

This project is licensed under the MIT License. See the LICENSE file for details.

👥 Authors

🔗 Links

📝 Changelog

v1.0.0

  • Initial release with core generation features
  • Smart existing extension detection
  • Flexible path management
  • Template-based file generation
  • PSR-4 compliant namespace handling

Made with ❤️ for the SixShop community