quanzo/ yii2-fields
1.0.0
2019-09-05 19:01 UTC
Requires
- php: >=7.0
- yiisoft/yii2: ~2.0.0
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);
模型(由类定义的字段)提供的数据和要保存的数据可能不同。
例如,一个可以输入多个文本行的字段。提供数据为数组,而要保存的数据是序列化的字符串。
-------------------------------------------
模型提供的数据(由类指定的字段)和要存储的数据可以不同。
例如,一个可以输入多个文本行的字段。提供数据为数组,而要保存的数据是序列化的字符串。
安装
-
将文件复制到模块文件夹,并连接autoload.php
-
或使用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>';
});