rashidul / raindrops
Laravel包,帮助构建企业级应用程序
Requires
Suggests
- nwidart/laravel-modules: Module Management In Laravel
This package is auto-updated.
Last update: 2024-09-06 20:31:51 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插件。首先包含datatable插件所需的js/css文件。
生成表标记/脚本
$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' ];