naowas / raindrops
Laravel 包,帮助构建企业级应用
Requires
Suggests
- nwidart/laravel-modules: Module Management In Laravel
This package is auto-updated.
Last update: 2024-09-29 06:20:29 UTC
README
(进行中)
安装
-
在你的项目根目录下运行
composer require rashidul/raindrops=dev-master
-
将此添加到你的
app.php
配置文件的providers
数组中Rashidul\RainDrops\RainDropsServiceProvider::class,
-
可选,你也可以添加到
aliases
数组以简化'FormBuilder' => Rashidul\RainDrops\Facades\FormBuilder::class,
-
最后,发布配置文件。
php artisan vendor:publish --provider=Rashidul\RainDrops\RainDropsServiceProvider
生成表单
为了为模型生成表单,你首先需要在模型中添加一个 $fields
公共属性,并用所需信息填充它。
然后,通过在 FormBuilder
上调用 build
方法并提供你的模型实例,你可以简单地生成表单标记
示例
在你的控制器中
$client = new Client(); /* or, $client = Client::find(<id>); if you are editing ane existing record */ $form = FormBuilder::build( $client ) ->form([ 'action' => 'clients', 'method' => 'POST' ]) ->render(); return view('create', compact('form'));
别忘了在模型的顶部 use
FormBuilder
类
然后在你的视图中,你可以这样做
{!! $form !!}
就是这样!
表单配置
有一些有用的方法可以进一步自定义表单。
-
add( $field_name, $options = [] )
你可以向已定义在模型$fields
属性中的现有字段添加字段。$form = FormBuilder::build( $client ) ->form([ 'action' => 'clients', 'method' => 'POST' ]) ->add('field_name', [ 'label' => 'Field Label', 'type' => 'date' ]) ->render();
第一个参数是字段的
name
,第二个参数是一个包含该字段各种选项的数组。label
和type
字段是必需的 -
modify( $field_name, $options = [] )
你可以修改模型中定义的任何字段$form = FormBuilder::build( $client ) ->form([ 'action' => 'clients', 'method' => 'POST' ]) ->modify('field_name', [ 'label' => 'New changed label', 'required' => true ]) ->render();
你只需提供你想要修改/覆盖的选项。
-
section( $header, $fields = [] )
使用标题分组一些字段。$form = FormBuilder::build( $client ) ->form([ 'action' => 'clients', 'method' => 'POST' ]) ->section('Awesome Section One', [ 'field_one', 'field_two']) ->section('Awesome Section Two', [ 'field_three', 'field_four']) ->render(); ```
-
template( $name )
用于生成单个字段的模板名称。这定义在raindrops
目录内的form
配置文件中。你可以使用多个模板来创建两列/三列布局。 -
remove( $field_name )
删除任何字段。你也可以传递一个包含要排除的字段名称的数组,以排除在最终生成的表单中。 -
csrf( boolean )
默认情况下,将生成 csrf 字段。你可以通过传递false
来排除它 -
only( $fields = [] )
选择要生成的某些字段。 -
hidden( $name, $value )
向表单添加隐藏字段。 -
submit
配置提交选项。$form = FormBuilder::build( $client ) ->form([ 'action' => 'clients', 'method' => 'POST' ]) ->submit([ 'text' => 'Save Me', 'class' => 'btn btn-success', 'icon' => 'fa fa-save' ]) ->render();
首页
对于首页,我们将使用 datatable jQuery 插件。首先包含必要的 js/css 文件用于 datatable 插件。
生成表格标记/脚本
$table = DataTable::of(new Client) ->setUrl(url('datatables.data')) ->setId('data-table') ->render(); return view('index', compact('table'));
在视图文件中:{!! $table !!}
处理后端
public function anyData(Datatables $datatables) { $query = Client::select(); return $datatables->eloquent($query) ->setTransformer(new DataTableTransformer()) ->make(true); }
CRUD 生成器
我们的模型将有一个名为 $fields
的数组属性,它将包含我们稍后需要生成表单、列表页面、筛选选项等所需的所有信息。
$fields
数组将包含模型的数据库字段作为键,另一个配置数组作为值。
public $fields = [ 'field_name' => [ 'label' => 'Field Label', 'type' => 'input type' /* other configurations goes here */ ] ]
选项
-
label
(必需)用于创建表单元素的标签标签的标签。也用于在列表页中创建表头。
-
type
(必需)特定字段的表单输入类型。目前实现类型
- 基本 HTML 输入类型:
text
、email
、password
、file
、textarea
- 富文本编辑器:
editor
- 选择下拉列表:
select
- 从另一个数据库表(外键)填充下拉列表:
select_db
- 日期选择器:
date
- 时间选择器:
time
- 基本 HTML 输入类型:
这两个字段是生成通用表单输入元素所必需的。以下选项可用于进一步自定义字段。
-
表单
如果不希望为此特定字段创建表单输入字段,请将其设置为
false
。 -
索引
如果您想在此字段显示在列表表中,请添加一个
index
键并将其设置为true
。 -
必需
如果此字段是必需的,则该值为
true
。HTML表单输入元素将具有required
属性以进行基本客户端验证。待办事项:
以后我们需要从validations
选项中引入,这样我们就不需要单独指定必需项。 -
验证
此字段的验证规则。格式与Laravel默认验证规则格式完全相同,只有一个细微差别。当使用
unique
规则时,请在规则的末尾添加一个{id}
以忽略更新时此模型的ID,例如unique:
, {id} -
classes
(待办事项)如果您想为任何特定字段使用任何自定义类,可以添加一个
classes
选项。传递一个以逗号分隔的类名字符串。 -
attributes
(待办事项)为输入字段生成的任何额外属性。这特别有助于使用默认HTML属性自定义输入,例如指定
number
字段的min
和max
属性。只需传递一个包含属性名/值作为键/值对的数组。 -
显示
此选项用于确定字段数据应该如何显示。此选项用于资源列表页表和资源详情页。
当前支持选项
exact
:在不进行任何修改的情况下显示数据库中的值。string
:将值通过ucfirst传递。有助于与名称类型字段一起使用。details_link
:作为资源详情页的链接。url
:仅将值包装在锚标签内。tel
:电话号码的锚标签,应用于在移动设备上使电话号码可点击。mailto
:用于电子邮件地址的mailto:链接。enum
:如果字段类型是select
,则此选项将从options
数组获取实际文本。img
:将值包装在图像标签周围。用于图像URL字段。doc
:如果字段是任何可下载资源的URL,则此选项将提供下载选项。时间
日期时间
relation
:当字段实际上是另一个表的外键时,您可以使用关系来显示相关模型中的任何列。将一个数组作为relation
选项的值。第一个元素是关系的名称,第二个元素是相关模型的列名。
-
筛选
为筛选此字段生成哪种类型的输入元素。
当前支持
enum
:从options
元素填充选项的下拉列表。date
:用于任何日期类型的字段。它将生成一个field_name-from
和一个field_name-to
日期选择器字段。待办事项:
需要实现一个日期范围选择器插件。boolean
:这将生成一个复选框。用于任何标志类型字段。
以下选项基于type
的值是必需的
-
选项
当您将
select
或select_db
设置为输入类型时,此选项是必需的。对于select
,您需要指定下拉列表的值作为数组。例如
'type' => 'select', 'options' => [ 'option_1' => 'Option One' ]
这将生成一个用于选择标签的选项标签
<option value="option_1">Option One</option>
对于
select_db
,options
将是一个简单的数组。第一个元素是数据库字段的名称,它将被用作选项的值(通常是表的id
列)和第二个元素是选项值的列。如果您传递了超过两个列名,所有这些列名都将通过空格连接并显示为选项文本。 -
表
与
select_db
选项一起使用的表的名称。
示例
/** * Fields */ public $fields = [ 'public_id' => [ 'label' => 'Device ID', 'form' => false, 'index' => true, 'show' => 'exact' ], 'serial_number' => [ 'label' => 'Serial Number', 'type' => 'text', 'validations' => 'unique:devices,serial_number{id}', 'index' => true, 'unique' => true, 'filter' => 'string' ], 'model_id' => [ 'label' => 'Model', 'type' => 'select_db', 'table' => 'device_models', 'options' => ['id', 'model'], 'index' => true, 'show' => ['model', 'model_name'] ], 'notes' => [ 'label' => 'Notes', 'type' => 'editor' ], 'category' => [ 'label' => 'Category', 'type' => 'select', 'form' => false, 'options' => [ 'individual' => 'Individual', 'company' => 'Company' ], 'classes' => [], 'required' => true, 'attributes' =>[], 'validations' => 'required', ],
模型配置
在我们的模型中,需要指定一些额外的属性。
-
$baseUrl
模型的路由。这将用于后来生成创建/查看/编辑/删除 URL。
-
$entityName
模型实体的单数形式名称。用于生成各种页面的标题。例如,添加新产品,查看所有产品
-
$entityNamePlural
默认情况下,
$entityName
将通过 Laravel 的str_plural
函数传递以生成实体的复数形式。如果您想覆盖此操作并设置自定义复数形式,可以使用此属性。 -
$actions
在列表页面上生成行时,默认情况下,将生成 查看、编辑、删除 这些操作链接。但如果您想为自定义路由添加额外的操作链接,可以在
$actions
数组中添加它们。例如,您想在产品列表页面上为所有产品添加 销售 链接,您可以添加protected $actions = [ 'Sale' => '{url}/{id}/sale' ];
{url}
将替换为路由,{id}
将替换为该特定资源的 id -
$paths
对于包含任何类型资产的路径的字段,例如图像、文档等,您可以将它们的路径添加到
$paths
数组中。这在稍后上传/检索资产时将非常有用。protected $paths = [ 'client_photo' => 'uploads/client/client_photo' ];