livecms/forms

Live CMS Forms

v0.0.1 2018-07-22 15:18 UTC

This package is not auto-updated.

Last update: 2024-09-15 05:34:13 UTC


README

这是什么?

此包可以根据设置数组创建表单组件(即.文本框、选择、单选、复选框)。

除此之外,您还可以创建自己的组件,由html和javascript组成。

功能

  • LaravelCollective HTML包的所有优点
  • 基于设置数组创建表单和组件
  • 支持Jquery验证
  • 可用的组件,可直接使用
    • 文本框
    • 电话
    • 数字
    • 电子邮件
    • 密码
    • 文本区域
    • 复选框
    • 单选按钮
    • 选择
    • Select2
    • 图片
    • 布尔值(带是/否选项的单选按钮)
  • 定义自己的组件
  • 定义自己的验证脚本

注意

如何使用?

通过composer安装

composer require livecms/forms

发布配置文件

php artisan vendor:publish --provider="LiveCMS\Form\FormServiceProvider"

编辑'form.php'配置文件。

创建表单

// controller

use LiveCMS\Form\Forms;

$form = Forms::create()->setComponents([...])->render();

// view
{!! Form::open(['url' => '/your/route']) !!}
{!! $form !!}
{!! Form::close() !!}

<script>
{!! Form::javascript()  !!}
</script>

在表单中设置

它与LaravelCollective HTML中的Form::open()具有相同的参数

// controller
$form = Forms::create(['url' => '/your/route', 'method' => 'PUT', 'class' => 'form-inline'])
            ->setComponents([...])
            ->render();

// view
{!! $form !!}
<script>
{!! Form::javascript()  !!}
</script>

您可以创建多个表单并为每个表单设置一个名称

// controller
Forms::create([...])->setComponents([...])->setName('form1');
Forms::create([...])->setComponents([...])->setName('form2');

// view
{!! Form::render('form1') !!}
{!! Form::render('form2') !!}

<script>
{!! Form::javascript()  !!}
</script>

可用的组件

您可以在文件夹中看到这些文件

/vendor/livecms/forms/src/Components
  • 文本框,类型:'text'
  • 电话,类型:'tel'
  • 数字,类型:'number'
  • 电子邮件,类型:'email'
  • 密码,类型:'password'
  • 文本区域,类型:'textarea'
  • 复选框,类型:'checkbox'
  • 单选按钮,类型:'radio'
  • 选择,类型:'select'
  • Select2,类型:'select2'
  • 图片,类型:'image'
  • 布尔值,类型:'boolean'

如何使用组件

$components = [
    'comp1' => [
        'type' => 'text', // required
        'label' => null, // optional
        'value' => null, // optional
        'default' => null, // optioal
        'options' => [], // optional and this only for checkbox, radio, select, select2
        'attributes' => [], // optional
    ],
    ...
    'comp-n' => [
        'type' => 'select',
        'options' => [
            'one', 'two', 'three',
        ],
        'attributes' => [
            'required' => true,
            'class' => 'input-select',
        ]
    ]
];

Form::create([...])->setComponents($components)->setName('form1');

添加全局属性

Forms::create([...])
    ->setComponents([...])
    ->addGlobalProperties([
        'required' => '*', // implemented to all components, you can use empty array []
        'class:input-select' => ['province', 'city', 'region'],
        'data-image:landscape' => ['image', 'cover'],
    ])
    ->setName('form1');

// the result all of defined components will get what you write in key of the array
// example for : 'data-image:landscape' => ['image', 'cover']
// the result  :
/**
 * <input type="file" name="image" data-image="landscape" />
 * <input type="file" name="cover" data-image="landscape" />
 */

添加自定义组件

  • 创建一个类,您可以在其中扩展来自'LiveCMS\Form\Components\BaseComponent'类的类
    /vendor/livecms/forms/src/Components/BaseComponent.php
    
    由于它包含一个抽象方法render(),您必须定义自己的render()方法。您也可以从可用的组件中查看示例或从中扩展。请参阅文件夹中的所有文件
    /vendor/livecms/forms/src/Components
    
  • 在'form'配置文件中定义自己的组件
    'components' => [
        'text' => \App\Forms\CustomeTextbox::class,
        'image' => \App\Forms\CustomeImage::class,
    ],
    

使用验证脚本

Forms::create([...])->setComponents([...])->useValidation()->setName('form1');

您可以通过以下方式禁用验证

Forms::create([...])->setComponents([...])->useValidation(false)->setName('form1');

注意:默认情况下,验证脚本需要jquery validation js

自定义验证

  • 创建自己的javascript文件
  • 在'form'配置文件中定义它
        'scripts' => [
            'validation' => '/path/to/javascript/file',
        ],

添加自定义脚本

  • 创建自己的javascript文件
  • 在'form'配置文件中定义它,但使用除'validation'之外的其他名称,因为它仅保留用于验证
        'scripts' => [
            'validation' => '/path/to/javascript/file',
            'customscript' => '/path/to/javascript/file',
        ],
  • 调用它
    Forms::create([...])->setComponents([...])->addScript('customscript')->setName('form1');

如果您想取消添加脚本,将第二个参数填充为'false'

->addScript('script_name', false)

用数据填充表单

$components = [
    'name' => ['type' => 'text'],
    'email' => ['type' => 'email'],
];
$datas = ['name' => 'Mokhamad Rofiudin', 'email' => 'mokh@rofiudin.com'];
Form::create([...])
    ->setComponents($components)
    ->fill($datas)
    ->setName('form1')
    ->render();

授权协议

MIT

贡献

分支此仓库并提交拉取请求

问题与讨论

请创建新问题或查看已关闭的问题。