ycs77 / laravel-form-field-type
快速设置 Laravel 表单构建器的表单字段。
v1.3.2
2022-02-09 10:27 UTC
Requires
- php: >=7.1.3
- kris/laravel-form-builder: ^1.16
Requires (Dev)
- orchestra/testbench: ~3.0
- phpunit/phpunit: >=7.0
README
快速设置 Laravel 表单构建器 的表单字段。
安装
Laravel 表单构建器 必须安装。
通过 Composer
composer require ycs77/laravel-form-field-type
发布配置
php artisan vendor:publish --tag=laravel-form-field-type-config
建议可以与 Laravel 表单构建器 BS4 匹配。
使用方法
首先,创建一个表单字段类
php artisan make:formfields UserFormFields
常用的字段可以定义在 config/field.php
中,并将自动加载 FieldType。
在这种情况下,'phone' 字段已在 config/field.php 中定义,因此可以直接使用。
app/FormFields/UserFormFields
<?php namespace App\FormFields; use Ycs77\LaravelFormFieldType\FormFields; class UserFormFields extends FormFields { /** * Return form fields array. * * @return array */ public function fields() { return [ 'name' => [ 'rules' => 'required|50', ], 'phone', 'submit', ]; } }
其次,将 FormFields, FormFieldsTrait 添加到控制器
app/Http/Controllers/MyController
<?php namespace App\Http\Controllers; use App\FormFields\UserFormFields; use Illuminate\Http\Request; use Ycs77\LaravelFormFieldType\Traits\FormFieldsTrait; class MyController extends Controller { use FormFieldsTrait; protected $formFields; public function __construct(UserFormFields $formFields) { $this->formFields = $formFields; } public function index() { $form = $this->renderForm([ 'url' => '/url', 'method' => 'POST', ]); // Response view ... } public function store(Request $request) { $data = $this->validateFormData($request); // Save model data ... } }
自定义验证消息
将属性 validateMessage
添加到控制器。
protected $validateMessage = [ 'dimensions' => 'The maximum length and width of the image is 4000x4000px.', ];
自定义失败消息
将属性 failedMessage
添加到控制器。
protected $failedMessage = [ 'images' => 'Can only upload up to 5 images.', ];
自定义语言路径
将属性 langPath
添加到控制器。
protected $langPath = 'validation.attributes';
方法
type
如果您输入由 config/field.php
定义的字段,则将返回该字段。
返回指定数据类型的完整类型
获取字段
$array = FieldType::type('age', [ 'type' => 'number', ]); // [ // 'id' => 'age', // 'type' => 'number', // ]
或使用相同
$array = FieldType::type('age', 'number'); // [ // 'id' => 'age', // 'type' => 'number', // ]
获取现有字段类型
$array = FieldType::type('nickname', [ 'type' => 'name', 'rules' => 'required', ]); // [ // 'id' => 'nickname', // 'type' => 'text', // 'rules' => 'required', // ]
覆盖字段类型
$array = FieldType::type('name', [ 'rules' => 'required', ]); // [ // 'id' => 'name', // 'type' => 'text', // 'rules' => 'required', // ]
如果使用 front_rules
属性,则仅在前端使用此规则
$array = FieldType::type('name', [ 'type' => 'name', 'front_rules' => 'required', ]); // [ // 'id' => 'name', // 'type' => 'text', // 'rules' => 'required', // ]
fields
fields
方法用于遍历数组并执行 field
方法。
解析字段数据
$fields = [ 'name', 'age' => [ 'type' => 'number', ], ]; $array = FieldType::fields($fields); // [ // [ // 'id' => 'name', // 'type' => 'text', // 'rules' => 'required|max:20', // ], // [ // 'id' => 'age', // 'type' => 'number', // ], // ]
list
返回每个字段的 ID
$fields = [ 'name', 'age' => [ 'type' => 'number', ], ]; $array = FieldType::list($fields); // ['name', 'age']
casts
转换为正确的类型
$fields = [ 'name', 'meeting_time' => [ 'type' => 'datetime-local', 'rules' => 'required', ], ]; $data = [ 'name' => 'Bob', 'meeting_time' => '2018-01-01T00:00', ]; $array = FieldType::casts($fields, $data); // [ // 'name' => 'Bob', // 'meeting_time' => '2018-01-01 00:00:00', // ]
form
编译表单
$form = $this->plain(); $fields = [ 'name', 'meeting_time' => [ 'type' => 'datetime-local', 'rules' => 'required', ], ]; $form = FieldType::form($form, $fields); // => \Kris\LaravelFormBuilder\Form // All fields have been added to the form.
rules
如果使用 back_rules
属性,则仅在后端使用此规则。
解析验证规则
$fields = [ 'name', 'phone' => [ 'rules' => 'required', ], 'age' => [ 'back_rules' => 'required', ], ]; $array = FieldType::rules($fields); // [ // 'name' => 'required|max:20', // 'phone' => 'required', // 'age' => 'required', // ]