A form builder extension that allows you to build both single view and multi-view/tabular forms for Yii Framework 2.0. The extension contains these widgets:
NOTE: Check the composer.json for this extension's requirements and dependencies.
Refer the CHANGE LOG for details on changes to various releases.
You can see detailed docs & demos and the API code documentation on usage of the extension.
\kartik\builder\Form
The Form Builder widget allows you to build a form through a configuration array. Key features available:
yii\base\model
or yii\db\ActiveRecord
.kartik\widgets\ActiveForm
.columns
property.kartik\widgets\ActiveField
) including input widgets and more:
INPUT_TEXT
or textInput
INPUT_TEXTAREA
or textarea
INPUT_PASSWORD
or passwordInput
INPUT_DROPDOWN_LIST
or dropdownList
INPUT_LIST_BOX
or listBox
INPUT_CHECKBOX
or checkbox
INPUT_RADIO
or radio
INPUT_CHECKBOX_LIST
or checkboxList
INPUT_CHECKBOX_BUTTON_GROUP
or checkboxList
INPUT_RADIO_LIST
or radioList
INPUT_MULTISELECT
or multiselect
INPUT_FILE
or fileInput
INPUT_HTML5
or input
INPUT_WIDGET
or widget
INPUT_HIDDEN
or hiddenInput
INPUT_STATIC
or staticInput
INPUT_HIDDEN_STATIC
or hiddenStaticInput
INPUT_RAW
or raw
(any free text or html markup)\kartik\builder\FormGrid
Create bootstrap grid layouts in a snap. The Form Grid Builder widget offers an easy way to configure your form inputs as a bootstrap grid layout and a single array configuration. It basically uses
multiple instances of the \kartik\builder\Form
widget above to generate this grid. One needs to just setup the rows for the grid,
where each row will be an array configuration as needed by the Form
widget. However, most of the common settings like model
, form
,
columns
etc. can be defaulted at FormGrid
widget level.
kartik\builder\TabularForm
The tabular form allows you to update information from multiple models (typically used in master-detail forms). Key features
Form
builder widgetkartik\builder\GridView
and the kartik\widgets\ActiveForm
widget.loadMultiple
and validateMultiple
functions in yii\base\Model
.NOTE: The TabularForm widget depends on and uses the yii2-grid module. Hence, the
gridview
module needs to be setup in your Yii configuration file.
'modules' => [
'gridview' => [
'class' => '\kartik\grid\Module'
]
];
IMPORTANT: You must follow one of the two options to setup your DataProvider or your columns to ensure primary key for each record is properly identified.
- Option 1 (preferred): Setup your dataProvider query to use
indexBy
method to index your records by primary key. For example:$query = Model::find()->indexBy('id'); // where `id` is your primary key
$dataProvider = new ActiveDataProvider([ 'query' => $query, ]);
- **Option 2 (alternate):** You can setup the primary key attribute as one of your columns with a form input type (and hide if needed) - so that the models are appropriately updated via <code>loadMultiple</code> method (even if you reorder or sort the columns). You must also set this attribute to be `safe` in your model validation rules. This is been depicted in the example below.
```php
'attributes'=>[
'id'=>[ // primary key attribute
'type'=>TabularForm::INPUT_HIDDEN,
'columnOptions'=>['hidden'=>true]
],
]
You can see detailed documentation on usage of the extension.
The preferred way to install this extension is through composer.
Note: You must set the
minimum-stability
todev
in the composer.json file in your application root folder before installation of this extension.
Either run
$ php composer.phar require kartik-v/yii2-builder "@dev"
or add
"kartik-v/yii2-builder": "@dev"
to the require
section of your composer.json
file.
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();
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();
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 is released under the BSD-3-Clause License. See the bundled LICENSE.md
for details.