quanzo/yii2-fields

1.0.0 2019-09-05 19:01 UTC

This package is auto-updated.

Last update: 2024-09-11 20:42:12 UTC


README

原因

将表单字段表示为类的形式。用于将模型或表单作为参数数组进行通用配置。

-------------------------------------------

将表单字段表示为类的形式。用于将模型或表单作为参数数组进行通用配置。

$arFields = [
    'metaTitle' => [
        'class' => '\x51\yii2\classes\fields\Input',
        'title' => 'Title',
        'name' => 'meta_title_field',
        'value' => '',
        'options' => [
            'class' => 'form-control',
        ],
        'rules' => [
            ['required'] // rule without field name
        ],
    ],
    'metaDescription' => [
        'class' => '\x51\yii2\classes\fields\Input',
        'title' => 'Description',
        'name' => 'meta_description_field',
        'value' => '',
        'options' => [
            'class' => 'form-control',
        ],
    ]    
];

$arModelRules = [
    ['metaDescription', 'require'] // rule with field name/names
];

$fieldsModel = new x51\yii2\classes\fields\models\FieldsModel($arFields, $arModelRules);

// set function for save data
$fieldsModel->funcSave(function (array $arData) {/* save model data. arData - array fieldname=>field_value_for_save  */});
// available
if ($fieldsModel->save()) {
...
}

// output form
echo $fieldsModel->render($formName);

模型(由类定义的字段)提供的数据和要保存的数据可能不同。

例如,一个可以输入多个文本行的字段。提供数据为数组,而要保存的数据是序列化的字符串。

-------------------------------------------

模型提供的数据(由类指定的字段)和要存储的数据可以不同。

例如,一个可以输入多个文本行的字段。提供数据为数组,而要保存的数据是序列化的字符串。

安装

  1. 将文件复制到模块文件夹,并连接autoload.php

  2. 或使用composer:将“quanzo/yii2-fields”添加到项目的require部分 "quanzo/yii2-fields": "*"composer require "quanzo/yii2-fields"

事件

在字段中

$arFields = [
    'metaTitle' => [
        'class' => '\x51\yii2\classes\fields\Input',
        'title' => 'Title',
        'name' => 'meta_title_field',
        'value' => '',
        'options' => [
            'class' => 'form-control',
        ],
        'rules' => [
            ['required'] // rule without field name
        ],
        'on '.\x51\yii2\classes\fields\Base::EVENT_BEFORE_RENDER => function ($event) {
    if ($event->field->name == 'meta_title_field') {
        $event->title = '<h2>New title</h2>';
    }
}
    ]
];

 

在模型中

 

$fieldsModel->on(FieldsModel::EVENT_BEFORE_RENDER, function ($event) {
    $event->out = '<div class="wrapper">';
});
$fieldsModel->on(FieldsModel::EVENT_AFTER_RENDER, function ($event) {
    $event->out .= '</div>';
});