lsrurcodeblade

一款方便强大的Laravel代码生成器

dev-master 2022-03-13 07:45 UTC

This package is auto-updated.

Last update: 2024-09-13 12:55:22 UTC


README

作为程序员,我们总是面临编写重复代码的繁琐需求,这些代码用于应用程序的不同模型或表格。作为代码生成器,CodeBlade将帮助您摆脱这种无聊,但与其他类似工具相比有两个重大区别

  • CodeBlade不需要您编写和维护定义文件(json、yaml或其他元数据文件),相反,它会即时反向工程您的数据库,并向模板公开数据字典以生成代码。

  • CodeBlade允许您使用纯Blade编写自己的模板!是的,Laravel Blade的力量可以生成Laravel组件,如模型、控制器、视图、种子、工厂、表单请求等,但也可以生成Vue、React、Livewire、html或您需要的任何源代码,只需使用您已经熟悉的Blade语法编写模板即可。

Code Blade处于早期阶段,请告诉我您在安装和使用它方面的体验。

目录

  1. 需求
  2. 安装
  3. 配置
  4. 代码生成
  5. 编写模板
    1. 表属性
    2. 字段属性
    3. 关系属性
    4. 指令
    5. 示例
  6. 贡献
  7. 安全性
  8. 许可

需求

  • Laravel 9+(CodeBlade使用Laravel 9中的新功能进行Blade模板的即时编译)。

  • MySQL(目前,CodeBlade仅支持MySQL/MariaDB连接。正在开发对pgsql的支持)。

安装

您可以通过composer安装此包

composer require lsrur/CodeBlade

发布配置文件(将很有用)

php artisan vendor:publish --provider="Lsrur\Codeblade\CodebladeServiceProvider"

在您的项目中准备模板文件夹并复制示例

php artisan codeblade:install

配置

config/CodeBlade.php中有两个配置键

代码生成

php artisan codeblade:make <template> <table1,table2> --params= --force --copy

模板参数

CodeBlade允许您指定一个或多个(以逗号分隔,不包含空格)参数,这些参数将被传递到模板

php artisan codeblade:make mytemplate mytable --params=flag,foo=bar

这些参数可以从模板中按以下方式使用

@if($params->flag)
  flag is ON
@endif

@if(! $params->noexist)
  noexist is OFF or does not exists
@endif

{{$params->foo}}
// Result 'bar'

@foreach($params->all as $key=>$value)
  {{$key}}
@endforeach
// Result flag foo

编写模板

每次执行“make”命令时,CodeBlade都会反向工程涉及的表,创建一个数据字典,并将其以Table对象的形式传递给代码生成模板。然后我们按以下方式编写我们的模板

@forarch($table->fields as $field)
  @if(! $field->is_autoincrement)
    {{$field->camel()->prepend('$')}} = $request->{{$field->name}};
  @endif
@endforeach

表属性

字段属性

这些属性可以被custom_properties覆盖

基本类型

基本类型对于将类似但不同的数据类型的字段分组很有用。

@foreach($Table->fields as $field)
  @includeIf($field->base_type == 'string', 'partials.forms.textinput');
  @includeIf($field->base_type == 'integer', 'partials.forms.integerinput');
@endforeach

自定义属性

CodeBlade会解析每个字段的“comment”元数据,查找自定义属性。您可以在迁移字段定义期间添加这些属性,如下所示

...
Schema::create('contacts', function (Blueprint $table) {
  $table->string("company_name")
     ->comment("faker=company(),flag,foo=bar");
...

然后,这些属性将作为每个字段的直接属性在您的模板中可用。

@foreach($tabe->fields as $field)
  @if($field->flag)
    // 'flag' will be true for company_name
  @endif
  
  @if($field->foo == 'bar')
    // 
  @endif

  ${{$field->name->camel()}} = faker()->{{$field->faker}};
  // result: $companyName = faker()->company();
  
@endforeach

关系属性

可序列化

作为Stringable实例返回的属性可以直接使用,也可以通过链式调用\Str方法使用。

{{$Table->name}}
// contacts

{{$Table->name->singular()->title()->append('Controller'}}
// ContactController

@foreach($Table->fields as $field)
  {{$field->name->camel()->prepend('$')}} = $request->{{$field->name}};
  // $companyName = $request->company_name;
@endforeach

Blade 指令

@cbSaveAs()

告诉 CodeBlade 将生成的代码写入的位置。如果模板未指定此指令,生成的代码将复制到剪贴板。

@cbSaveAs(app_path('Http/Controllers/'.$table->model.'Controller.php'))
// for table "contacts", the file will be written in app/Http/Controllers/ContactController.php

@cbRun()

告诉 CodeBlade 执行另一个模板,将应用相同的表和参数。

{{-- This is a CRUD template --}}
@cbRun('model')
@cbRun('controller')
@cbRun('edit_view')
@cbRun('create_view')
@cbRun('index_view')
@cbCurly()

将输出包裹在大括号内,当生成 Blade 或 Vue 视图时很有用。

@cbCurly({{$table->name->singular()->prepend('$')}}->{{$field->name}})
=> {{$contact->company_name}}

<div>@cbCurly({{$table->name->singular()}}.{{$field->name}})</div>
=> <div>{{contact.company_name}}</div>

示例模板

请查看此存储库的 samples 文件夹。为了不干扰您的项目,提供的模板示例将在 yourprojectroot/generatedcode 文件夹中生成代码。将模板中的 cbSaveAs 行更改为写入适当的项目文件夹。

这些示例是为了指导您开发自己的模板,它们不是管理面板构建器或其他类似的东西。

贡献

有关详细信息,请参阅 CONTRIBUTING

安全

如果您发现任何与安全相关的问题,请通过电子邮件 lautarosrur@gmail.com 通知我们,而不是使用问题跟踪器。

许可证

MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件