lsrur/ codeblade
一款方便强大的Laravel代码生成器
Requires
- php: ^8.0
- illuminate/support: ^9.0
Requires (Dev)
- phpunit/phpunit: ^9.0
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处于早期阶段,请告诉我您在安装和使用它方面的体验。
目录
需求
-
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)。有关更多信息,请参阅 许可证文件。