ycs77/laravel-form-field-type

快速设置 Laravel 表单构建器的表单字段。

v1.3.2 2022-02-09 10:27 UTC

README

Latest Version on Packagist Software License Build Status Style CI Build Status Total Downloads

快速设置 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',
// ]