rashidul/raindrops

Laravel包,帮助构建企业级应用程序

安装: 770

依赖项: 0

建议者: 0

安全性: 0

星标: 4

关注者: 3

分支: 3

开放问题: 0

语言:JavaScript

dev-master 2018-03-29 02:13 UTC

This package is auto-updated.

Last update: 2024-09-06 20:31:51 UTC


README

(工作进行中)

安装

  1. 在项目根目录内运行

    composer require rashidul/raindrops=dev-master

  2. 将以下内容添加到app.php配置文件中的providers数组

    Rashidul\RainDrops\RainDropsServiceProvider::class,

  3. 可选地,您还可以将其添加到aliases数组以提高简便性

    'FormBuilder' => Rashidul\RainDrops\Facades\FormBuilder::class,

  4. 最后,发布配置文件。

    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,第二个参数是一个包含该字段各种选项的数组。

    labeltype字段是必填的

  • 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输入类型:textemailpasswordfiletextarea
    • 富文本编辑器:editor
    • 选择下拉列表:select
    • 从另一个数据库表(外键)填充下拉列表:select_db
    • 日期选择器:date
    • 时间选择器:time

这两个字段是生成通用表单输入元素所必需的。以下选项可用于进一步自定义字段。

  • 表单

    如果您不想为此特定字段创建表单输入字段,请将其设置为false

  • 索引

    如果您想将此字段显示在列表表中,请添加一个index键并将其设置为true

  • 必需

    如果此字段是必需的,则此值将为true。HTML表单输入元素将具有一个required属性,用于基本的客户端验证。待办事项:以后我们需要从validations选项中引入,这样我们就不需要单独指定必需项。

  • 验证

    此字段的验证规则。格式与laravel默认验证规则格式完全相同,只有一个细微差别。当使用unique规则时,请将一个{id}添加到规则末尾,以便在更新时忽略此模型的ID,例如:unique:,{id}

  • classes(待办事项)

    如果您想为任何特定字段使用任何自定义类,可以添加一个classes选项。传递一个以逗号分隔的类名字符串。

  • attributes(待办事项)

    为输入字段生成的任何额外属性。这可以特别有助于使用默认HTML属性自定义输入,例如,指定number字段的minmax属性。只需传递一个包含属性名称/值作为键/值对的数组。

  • 显示

    此选项用于确定字段数据应该如何显示。这用于资源列表页面的表以及资源详情页面。

    当前支持选项

    • exact:直接显示数据库中的值,不做任何修改。
    • string:通过ucfirst传递值。有助于与名称类型字段一起使用。
    • details_link:作为资源详情页面的链接。
    • url:在锚点标签中包装值。
    • tel:用于电话号码的锚点标签,应在移动设备上使电话号码可点击。
    • mailto:mailto:链接,用于电子邮件地址。
    • enum:如果字段类型是select,则此选项将从options数组中获取实际文本。
    • img:将值包裹在图像标签中。用于图像URL字段。
    • doc:如果字段是任何可下载资源的URL,这将提供下载选项。
    • 时间
    • 日期时间
    • relation:当字段实际上是另一个表的外键时,您可以使用关系显示相关模型中的任何列。将一个数组作为relation选项的值。第一个元素是关系的名称,第二个是相关模型的列名
  • 过滤器

    为过滤此字段要生成的输入元素的类型。

    目前支持

    • enum:从options元素填充选项的下拉列表。
    • date:适用于任何类型的日期字段。它将生成一个field_name-fromfield_name-to日期选择器字段。待办事项:需要实现一个日期范围选择器插件。
    • boolean:这将生成一个复选框。用于任何标志类型字段。

以下选项根据type的值是必需的

  • 选项

    当您将输入类型设置为 selectselect_db 时,此选项是必需的。对于 select,您需要指定下拉菜单的值作为数组。

    例如:

     'type' => 'select',
     'options' => [
     	'option_1' => 'Option One'
     ]

    这将生成一个用于选择标签的选项标签

     <option value="option_1">Option One</option>

    对于 select_dboptions 将是一个简单的数组。第一个元素是数据库字段的名称,它将被用作选项的值(通常是表的 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'
         ];