visanduma/laravel-formy

这是我的包 laravel-formy

安装: 117

依赖: 0

建议者: 0

安全: 0

星标: 0

关注者: 2

分支: 0

开放问题: 0

语言:JavaScript

dev-main 2022-11-03 09:41 UTC

This package is auto-updated.

Last update: 2024-09-17 10:49:35 UTC


README

Laravel-formy

基于类的简单表单构建器,适用于任何Laravel应用

安装

您可以通过composer安装此包

composer require visanduma/laravel-formy

您可以发布并运行迁移。表单媒体管理需要迁移

php artisan vendor:publish --tag="formy-migrations"
php artisan migrate

您可以使用以下命令发布配置文件

php artisan vendor:publish --tag="formy-config"

您还需要将formy资源文件夹发布到您的公共资源文件夹

php artisan vendor:publish --tag="formy-assets"

这是发布配置文件的内容

return [

	 /*
    |--------------------------------------------------------------------------
    | Apply any middlware to formy realated routes
    |--------------------------------------------------------------------------
    |
    */
    
    'middlewares' => [
        'web'
    ],
    
    
    /*
    |--------------------------------------------------------------------------
    | Formy media managemt setup
    |--------------------------------------------------------------------------
    |
    */

    'media' => [

        // Disk to store file uploded by formy
        'disk' => 'public',

        // File upload path
        'upload_path' => 'formy-media',

        // Tempory file path
        'temp_path' => 'formy/temp-uploads',

        // Media handler class
        'handler' => \Visanduma\LaravelFormy\Handlers\FormyMediaHandler::class

    ]

];

用法

创建表单

要创建新表单,请使用以下命令

php artisan make:form UserForm
php artisan make:form Admin/UserForm

所有表单类都将保存到 app/Forms

以下示例展示了UserForm类。默认情况下,所有方法都是空的,需要您手动处理逻辑。

<?php


namespace App\Forms;

use Visanduma\LaravelFormy\Contracts\FormContract;
use Visanduma\LaravelFormy\Form;
use App\Models\User;

class UserForm extends Form implements FormContract
{

	protected $model = User::class;

	public function inputs(): array
    {
        return [
            // form inputs
        ];
    }


	public function store(Request $request)
    {
		// handle form store method
	}

	public function update(Request $request)
    {
		// handle form store method
	}


}

输入

目前laravel-formy有以下几个输入

  • 复选框
  • 颜色输入
  • 日期输入
  • 文件输入
  • FilePond(文件上传输入)
  • 数字输入
  • 密码输入
  • Quill编辑器
  • 单选输入
  • 范围输入
  • 选择
  • 文本区域
  • 文本输入

您可以使用make()静态方法创建新的输入实例。第一个参数将用作输入标签。第二个参数用作输入名称(以及表列名称)。如果未设置第二个参数,则将使用第一个参数的蛇形小写值作为输入名称。

TextInput::make('Title') // input name is title
TextInput::make('Mothers Name') // input name is mothers_name
TextInput::make('School Name','school') // input name is school

让我们向UserForm添加一些输入

use Visanduma\LaravelFormy\Inputs\TextInput;
...

public function inputs(): array
    {
        return [
            TextInput::make('Name')->rules('required'),
            TextInput::make('User Name', 'username'),
            TextInput::make('Email')->rules('required'),
        ];
    }

此输入可以创建一个简单的HTML表单,包含三个输入:名称、用户名和电子邮件

要显示生成的表单,您需要在您的视图blade中渲染它。请看以下示例

// in UserController.php
// make form 'Create' instance and send it to view

public function createUser(){

	$form = UserForm::createForm();

	return view('users.create',compact('form'));

}


// make User update form
public function editUser(User $user){

	$form = UserForm::updateForm($user); // set model for update

	return view('users.edit',compact('form'));

}


// in users.create.blade.php & users.edit.blade.php 
// use @formy directive to render form HTML


<div>
	@formy($form)
</div>

// or

<div>
	{!! $form->render() !!}
</div>

处理表单提交

我们使用store方法来处理。默认情况下,store方法可能接收请求对象,并包含所有表单数据。现在您可以按需操作表单。请看下面的简单示例

// UserForm.class

 public function store(Request $request)
 {
	$this->validate(); // validating the inputs
	
	$this->createEntity(); // create new model with request data & save

	return back()->with('message','New user created');

 }

处理表单更新

使用update方法来处理表单更新。当用户在表单上点击更新按钮时,将使用请求数据调用'update'方法。请看下面的简单示例

// UserForm.php

public function update(Request $request)
    {
        $this->validate();
        $this->updateEntity();

        return back()->with('message', 'Successfully Updated');
    }


// Another approach
public function update(Request $request)
    {
        $this->validate();
        $user = $this->getModel();
		$user->update($request->only('name'));

        return back()->with('message', 'Successfully Updated');
    }

常见输入方法

// validation helpers
->rules('required|min:7')
->rules(['required' , 'min:7'])

// attributes helpers
->setAttribute('placeholder','Enter name') // set attribute values to HTML input
->getAttribute('placeholder') // 'Enter name'
->placeholder('Enter name')
->addLabelClass('text-info')
->setId('nameInput')
->setId('nameInput')
->setValue('Nova Lee')
->maxLength(5)

// layout helpers
->width(4) // set input column width 1 - 12
->singleLine() // make only one input for row
->inline() // make input inline with it's label

// visibility helpers
->hideIf(function(){
	return true; // return boolian
})

->hideOnUpdate() // hide input on Update form
->hideOnCreate() // hide input on Create form
->showOnUpdate() // default : show input on Update form
->showOnCreate() // default : show input on Create form


表单助手

// send additional data with form
$form->withData([
	'userType' => 'Super User'
])

// get additional data
$form->getData('userType') // 'Super User'

// check the form status is update or create
$form->isUpdateForm() // return boolean
$form->isCreateForm() // return boolean

测试

composer test

变更日志

请参阅变更日志以获取有关最近更改的更多信息。

贡献

请参阅贡献指南以获取详细信息。

安全漏洞

请查看我们的安全策略了解如何报告安全漏洞。

致谢

许可

MIT许可(MIT)。请参阅许可文件以获取更多信息。