本文目录导读:

我来分享一个 PHP 项目代码生成器的完整设计思路:
整体架构设计
// 核心组件结构 ├── src/ │ ├── Generator/ │ │ ├── CodeGenerator.php // 代码生成器主类 │ │ ├── TemplateEngine.php // 模板引擎 │ │ ├── FileManager.php // 文件管理 │ │ └── DatabaseScanner.php // 数据库扫描 │ ├── Templates/ // 模板目录 │ │ ├── Controller/ │ │ ├── Model/ │ │ ├── Service/ │ │ └── View/ │ └── Config/ │ └── generator.php // 生成器配置
核心功能模块
数据库表扫描器
class DatabaseScanner {
public function getTables() {
// 获取所有数据表
}
public function getColumns($tableName) {
// 获取表结构字段
}
public function getForeignKeys($tableName) {
// 获取外键关系
}
}
代码生成器主类
class CodeGenerator {
private $templateEngine;
private $fileManager;
public function generateModel($tableName) {
$columns = $this->databaseScanner->getColumns($tableName);
$template = $this->templateEngine->load('Model');
$code = $this->templateEngine->render($template, [
'tableName' => $tableName,
'columns' => $columns,
'primaryKey' => 'id',
'timestamps' => true,
]);
return $this->fileManager->save($code, $tableName);
}
}
模板设计
Model 模板示例
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class {{ $className }} extends Model
{
protected $table = '{{ $tableName }}';
protected $fillable = [
@foreach($columns as $column)
'{{ $column['name'] }}',
@endforeach
];
@foreach($relations as $relation)
public function {{ $relation['name'] }}()
{
return $this->{{ $relation['type'] }}({{ $relation['model'] }});
}
@endforeach
}
Controller 模板
class {{ $controllerName }} extends Controller
{
private ${{ $modelVariable }};
public function __construct({{ $modelName }} ${{ $modelVariable }})
{
$this->{{ $modelVariable }} = ${{ $modelVariable }};
}
public function index()
{
${{ $modelVariables }} = $this->{{ $modelVariable }}->paginate(15);
return view('{{ $viewPath }}.index', compact('{{ $modelVariables }}'));
}
}
实现步骤
配置数据库连接
// config/database.php
return [
'host' => 'localhost',
'database' => 'your_database',
'username' => 'root',
'password' => 'password',
'charset' => 'utf8mb4',
];
创建命令行工具
class GenerateCommand extends Command {
protected $signature = 'gen:model {table}';
public function handle() {
$generator = app(CodeGenerator::class);
$generator->generateModel($this->argument('table'));
$this->info('Model generated successfully!');
}
}
高级功能
代码风格定制
$config = [
'namespace' => 'App\\',
'base_class' => 'BaseModel',
'use_traits' => ['SoftDeletes', 'Uuidable'],
'column_comments' => true,
'type_mapping' => [
'int' => 'integer',
'varchar' => 'string',
'text' => 'text',
'datetime' => 'timestamp',
],
];
自动生成 CRUD
public function generateFullCrud($table) {
// 自动生成 Model
$this->generateModel($table);
// 生成 Controller
$this->generateController($table);
// 生成 Service
$this->generateService($table);
// 生成 Repository
$this->generateRepository($table);
// 生成 View
$this->generateViews($table);
// 生成路由
$this->appendRoutes($table);
}
关系自动检测
public function detectRelations($table) {
$foreignKeys = $this->getForeignKeys($table);
$relations = [];
foreach ($foreignKeys as $fk) {
$relations[] = [
'type' => 'belongsTo',
'model' => studly_case($fk['referenced_table']),
'foreign_key' => $fk['column'],
];
}
return $relations;
}
优化建议
性能优化
- 缓存模板编译结果
- 批量文件生成
- 异步处理
扩展性
- 插件机制
- 自定义模板
- 事件系统
代码质量
- PSR-4 规范
- 脚手架测试
- 代码格式化
使用示例
# 生成模型 php artisan gen:model users # 生成完整 CRUD php artisan gen:crud posts # 指定类型 php artisan gen:model users --type=all # 自定义模板 php artisan gen:model users --template=custom
这个设计思路涵盖了代码生成器的主要方面,你可以根据实际需求进行调整和扩展,关键是要保持灵活性,让用户能够自定义生成的代码风格和结构。