visanduma / laravel-formy
这是我的包 laravel-formy
dev-main
2022-11-03 09:41 UTC
Requires
- php: ^7.4|^8.0
- illuminate/contracts: ^8.0|^9.0
- spatie/laravel-package-tools: ^1.9.2
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.8
- nunomaduro/collision: ^5.0|^6.1
- orchestra/testbench: ^6.0
- phpunit/phpunit: ^9.5
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)。请参阅许可文件以获取更多信息。