lintaba/laravel-fastforms

为Laravel模型提供快速表单定义,包含验证和视图

dev-master 2020-06-01 22:18 UTC

This package is auto-updated.

Last update: 2024-08-29 05:30:54 UTC


README

为Laravel模型提供快速且易于创建的表单和视图,包含验证。

设置

通过Composer安装。

composer require lintaba/laravel-fastforms

将它的特性添加到你的控制器中

<?php

use Illuminate\Http\Request;
use Illuminate\View\View;

class ItemController
{
    # 1. add fastform's trait
    use \lintaba\fastforms\HasFormTrait;
    
    # 2. set up your show, edit, update, create, store methods as needed.
    public function show(Item $item) : View{
        $form = $this->getForm();
        return view('item.show', compact('item', 'form'));
    }
    public function edit(Item $item) : View{
        $form = $this->getForm();
        return view('item.edit', compact('item', 'form'));
    }
    public function create() : View{
        $form = $this->getForm();
        return view('item.create', compact('form'));
    }
    
    public function update(Request $request, Item $item)
    {
        $requestData = $this->getValidInput($request, $extraValidationRules = [], $item);
    
        $item->fill($requestData);
        $item->save();
    
        return redirect()->back();
    }
    
    public function store(Request $request)
    {
        $requestData = $this->getValidInput($request, $extraValidationRules = []);
    
        $item= new Item;
        $item->fill($requestData);
        $item->save();
    
        return redirect()->back();
    }
    
    # 3. 
   public function getForm($id = null){
        return [
            ['field'=>'name', 'type'=>'text'],
            //...
        ];
   }
}

对于你的视图,你应该添加以下内容

Create: 
@include('Fastforms::form', compact('form'))

View: 
@include('Fastforms::view', compact('form', 'item'))

Edit: 
@include('Fastforms::form', compact('form', 'item'))

模板选项

组件

每个表单条目可以是

  • 一个字符串,作为一个分类标签。
  • 一个数组,用于设置组件。

#####每个组件都有以下属性

#####大多数组件都有以下属性

#####可用的控制器类型

  • address
  • boolean
  • button
  • date
  • datetime
  • json
  • (label)
  • listarray
  • matrix
  • multiselect
  • number
  • password
  • rangeRepeater
  • reference
  • repeater
  • select
  • text
  • textarea
  • textWithCheckbox

###选项 #####address 基于 Form::selectForm::text。包含多个子字段

  • country
  • zip
  • city
  • street
  • house
  • extra

对于任何 field,它的存储和检索作为 field_countryfield_zip 等。

#####boolean 基于 Form::checkbox

#####button 简单的HTML按钮

额外翻译

  • $tag . $button . '.label'
  • $tag . $button . '.title'

#####date 基于 Form::text 的类型 date。需要js #TODO 数据应实现 ?DateTimeInterface

#####datetime 基于 Form::text 的类型 datetime。需要js #TODO 数据应实现 ?DateTimeInterface

#####json 基于 Form::textarea。根据正则规则进行验证。

#####listarray 多个基于单选按钮的选择。用于评分尺度、权限、多个是/否。

注意:如果由于某些原因当前值不存在(例如,定义已更改,但数据尚未迁移),将可见一个额外的选项,其中包含当前值。

#####matrix 复选框矩阵。存储为 field.1_2 = 1

#####multiselect 基于 Form::select。多选选项。

#####number

基于 Form::text。显示可步进的数字字段。用于增量样式数据。

#####password 基于 Form::password

#####rangeRepeater 列表,用于定义给定范围的值。例如,价格应为1-10公里的0,而更远的为100。注意:TODO,花哨的格式。注意:需要js。

#####reference 对外部条目的引用,基本上是一个 belongsTo

#####repeater 值的数组。可扩展列表。格式:item[i][subfield]

#####select

基于 Form::select

#####text 基于 Form::text

注意:同一时间只能有一个 prependprepend_btn 可用。

注意:同一时间只能有一个 appendappend_btnfillfrom 可用。

翻译

  • $tag.$prepend_btn.'.title'
  • $tag.$prepend_btn.'.text'
  • $tag.$append_btn.'.title'
  • $tag.$append_btn.'.text' #####textarea

基于 Form::textarea

#####textWithCheckbox

text 相同,但有一个额外的 checkbox 在末尾,仅在 text 填充了某些数据时可见。

##验证 输入数据会自动根据其 validation 属性中提供的内容进行验证。