kartik-v / yii2-builder
为 Yii Framework 2.0 轻松构建单行或多行/表格形式的表单
Requires
- kartik-v/yii2-grid: >=3.2.5
- kartik-v/yii2-helpers: >=1.3.8
- kartik-v/yii2-widget-activeform: >=1.6.0
README
yii2-builder

这是一个表单构建器扩展,允许您为 Yii Framework 2.0 构建单视图和多视图/表格形式的表单。该扩展包含以下小部件
- Form
- FormGrid
- TabularForm
注意:请检查此扩展的需求和依赖关系,请参阅 composer.json。
最新版本
有关各个版本的更改详情,请参阅 变更日志。
文档 & 示例
Form
\kartik\builder\Form
表单构建器小部件允许您通过配置数组来构建表单。以下是一些关键特性
- 从扩展
yii\base\model
或yii\db\ActiveRecord
的模型配置表单字段。 - 支持各种 Bootstrap 表单布局。使用高级的
kartik\widgets\ActiveForm
。 - 通过提供
columns
属性,使用 Bootstrap 列/构建器布局样式。 - 通过重复使用小部件来构建属性,构建复杂的布局(例如,在同一布局中构建单列、双列或多列)。
- 调整 ActiveForm 默认值以控制字段选项、样式、模板和布局。
- 配置每个活动字段属性下显示的自定义提示。
- 默认提供各种 Bootstrap 样式功能。然而,您可以使用任何 CSS 框架轻松自定义和主题化。
- 支持并渲染 HTML 输入类型(使用
kartik\widgets\ActiveField
),包括输入小部件等INPUT_TEXT
或textInput
INPUT_TEXTAREA
或textarea
INPUT_PASSWORD
或passwordInput
INPUT_DROPDOWN_LIST
或dropdownList
INPUT_LIST_BOX
或listBox
INPUT_CHECKBOX
或checkbox
INPUT_RADIO
或radio
INPUT_CHECKBOX_LIST
或checkboxList
INPUT_CHECKBOX_BUTTON_GROUP
或checkboxList
INPUT_RADIO_LIST
或radioList
INPUT_MULTISELECT
或multiselect
INPUT_FILE
或fileInput
INPUT_HTML5
或input
INPUT_WIDGET
或widget
INPUT_HIDDEN
或hiddenInput
INPUT_STATIC
或staticInput
INPUT_HIDDEN_STATIC
或hiddenStaticInput
INPUT_RAW
或raw
(任何自由文本或HTML标记)
FormGrid
\kartik\builder\FormGrid
轻松创建Bootstrap网格布局。表单网格构建器小部件提供了一种简单的方法来配置您的表单输入为Bootstrap网格布局和单个数组配置。它基本上使用多个\kartik\builder\Form
小部件实例来生成此网格。只需要设置网格的行,其中每行都是一个数组配置,这是由Form
小部件所需的。然而,大多数常见的设置如model
、form
、columns
等可以在FormGrid
小部件级别默认。
表格表单
kartik\builder\TabularForm
表格表单允许您更新来自多个模型的信息(通常用于主从表单)。主要功能:
- 支持所有输入类型,如
Form
构建器小部件中所述 - 此小部件的工作方式类似于Yii GridView,并使用ActiveDataProvider来读取模型信息。
- 支持构建器视图的功能,如分页和排序。
- 允许您突出显示和选择表格行
- 允许您为每行添加和配置操作按钮。
- 配置每个活动字段属性下显示的自定义提示。
- 默认提供各种 Bootstrap 样式功能。然而,您可以使用任何 CSS 框架轻松自定义和主题化。
- 通过使用
kartik\builder\GridView
和kartik\widgets\ActiveForm
小部件提供的功能,进行高级表格样式、列和布局配置。 - 可以使用
yii\base\Model
中的loadMultiple
和validateMultiple
函数轻松读取和管理表格输入数据。
注意:TabularForm小部件依赖于并使用yii2-grid模块。因此,需要在您的Yii配置文件中设置
gridview
模块。
'modules' => [ 'gridview' => [ 'class' => '\kartik\grid\Module' ] ];
重要:您必须遵循以下两种选项之一来设置您的DataProvider或列,以确保每个记录的正确主键标识。
- 选项1(首选):将您的DataProvider查询设置为您要使用
indexBy
方法按主键索引您的记录。例如
$query = Model::find()->indexBy('id'); // where `id` is your primary key $dataProvider = new ActiveDataProvider([ 'query' => $query, ]);
- 选项2(备选):您可以将主键属性设置为您的一个列,并具有表单输入类型(如果需要可以隐藏)——这样,模型将通过
loadMultiple
方法适当更新(即使您重新排序或排序列)。您还必须在模型验证规则中将此属性设置为safe
。以下是一个示例。
'attributes'=>[ 'id'=>[ // primary key attribute 'type'=>TabularForm::INPUT_HIDDEN, 'columnOptions'=>['hidden'=>true] ], ]
演示
有关该扩展的详细使用说明,请参阅文档。
安装
安装此扩展的首选方式是通过composer。
注意:您必须在安装此扩展之前,在应用程序根目录中的
composer.json
文件中将minimum-stability
设置为dev
。
运行
$ php composer.phar require kartik-v/yii2-builder "@dev"
或添加
"kartik-v/yii2-builder": "@dev"
到您的composer.json
文件中的require
部分。
用法
Form
use kartik\builder\Form; $form = ActiveForm::begin(); echo Form::widget([ 'model' => $model, 'form' => $form, 'columns' => 2, 'attributes' => [ 'username' => ['type'=>Form::INPUT_TEXT, 'options'=>['placeholder'=>'Enter username...']], 'password' => ['type'=>Form::INPUT_PASSWORD, 'options'=>['placeholder'=>'Enter password...']], 'rememberMe' => ['type'=>Form::INPUT_CHECKBOX], ] ]); ActiveForm::end();
FormGrid
use kartik\builder\Form; use kartik\builder\FormGrid; $form = ActiveForm::begin(); echo FormGrid::widget([ 'model' => $model, 'form' => $form, 'autoGenerateColumns' => true, 'rows' => [ [ 'attributes' => [ 'username' => ['type'=>Form::INPUT_TEXT, 'options'=>['placeholder'=>'Enter username...']], 'password' => ['type'=>Form::INPUT_PASSWORD, 'options'=>['placeholder'=>'Enter password...']], 'rememberMe' => ['type'=>Form::INPUT_CHECKBOX], ], ], [ 'attributes' => [ 'first_name' => ['type'=>Form::INPUT_TEXT, 'options'=>['placeholder'=>'Enter first name...']], 'last_name' => ['type'=>Form::INPUT_TEXT, 'options'=>['placeholder'=>'Enter last name...']], ] ] ] ]); ActiveForm::end();
TabularForm
use kartik\builder\TabularForm; $form = ActiveForm::begin(); echo TabularForm::widget([ 'bsVersion' => '4.x', 'form' => $form, 'dataProvider' => $dataProvider, 'attributes' => [ 'name' => ['type' => TabularForm::INPUT_TEXT], 'color' => [ 'type' => TabularForm::INPUT_WIDGET, 'widgetClass' => \kartik\widgets\ColorInput::classname() ], 'author_id' => [ 'type' => TabularForm::INPUT_DROPDOWN_LIST, 'items'=>ArrayHelper::map(Author::find()->orderBy('name')->asArray()->all(), 'id', 'name') ], 'buy_amount' => [ 'type' => TabularForm::INPUT_TEXT, 'options'=>['class'=>'form-control text-right'], 'columnOptions'=>['hAlign'=>GridView::ALIGN_RIGHT] ], 'sell_amount' => [ 'type' => TabularForm::INPUT_STATIC, 'columnOptions'=>['hAlign'=>GridView::ALIGN_RIGHT] ], ], 'gridSettings' => [ 'floatHeader' => true, 'panel' => [ 'heading' => '<i class="fas fa-book"></i> Manage Books', 'type' => GridView::TYPE_PRIMARY, 'after'=> Html::a( '<i class="fas fa-plus"></i> Add New', $createUrl, ['class'=>'btn btn-success'] ) . ' ' . Html::a( '<i class="fas fa-times"></i> Delete', $deleteUrl, ['class'=>'btn btn-danger'] ) . ' ' . Html::submitButton( '<i class="fas fa-save"></i> Save', ['class'=>'btn btn-primary'] ) ] ] ]); ActiveForm::end();
许可证
yii2-builder在BSD-3-Clause许可证下发布。请参阅捆绑的LICENSE.md
以获取详细信息。