Yii2 Grid RowEditable ¶
- Установка
- Терминология
- Как использовать?
- Конфигурирование
- Описание параметров конфигурации
Yii2 расширение для редактирования данных в GridView
Установка ¶
Данное расширение лучше устанавливать через composer
Выполните
`bash
$ composer require kosv/yii2-grid-roweditable:1.0.
Или добавьтеjson
"kosv/yii2-grid-rowEditable": "1.0."
`
в секцию require файла composer.json.
Терминология ¶
Данное расширение - Yii2 Grid RowEditable.
YourGridView - для использования данного расширения, вам нужно иметь/создать дочерний класс от GridView,
поэтому в контексте документации, ваш GridView будем называть YourGridView.
YourSaveForm - вам нужно будет создать форму, в которой будет выолнятся валидация и сохранение данных.
В контексте даннной документации, такую форму будем называть YourSaveForm.
Как использовать? ¶
Весь этап можно разделить на 6 шагов:
- Нужно подключить данное расширение к
YourGridView.
- Нужно реализовать
YourSaveForm, - в данном классе будет выполнятся процесс валидации и сохранения данных.
- В экшене вашего контроллера, создать объект
YourSaveForm и написать условие для сохранения данных формы.
- Нужно вывести
YourGridView в вашем View, и указать обязательные общие параметры редактирования.
- В список столбцов добавить
Kosv\Yii2Grid\RowEditable\Select\CheckboxColumn - это столбец чекбоксов, который позволяет выбирать строки.
- Вывести кнопку сохранения изменений.
Шаг 1. Инициализация YourGridView ¶
Если в приложении нет дочернего класса GridView,
то создайте его в любом месте вашего приложения
`php
namespace app\widgets;
use yii\grid\GridView as YiiGridView;
class YourGridView extends YiiGridView
{
}
`
К YourGridView подключите интерфейс Kosv\Yii2Grid\RowEditable\EditableGridInterface,
и трейт Kosv\Yii2Grid\RowEditable\EditableGridTrait
namespace app\widgets;
use Kosv\Yii2Grid\RowEditable\EditableGridInterface;
use Kosv\Yii2Grid\RowEditable\EditableGridTrait;
use yii\grid\GridView as YiiGridView;
class YourGridView extends YiiGridView implements EditableGridInterface
{
use EditableGridTrait;
}
Шаг 2. Создание YourSaveForm ¶
Создайте класс формы, и унаследуйти его от yii\base\Model(или от любого другого потомка yii\base\Model)
namespace app\models;
use yii\base\Model;
class YourSaveForm extends Model
{
}
К YourSaveForm подключите итерфейс Kosv\Yii2Grid\RowEditable\Form\SaveFormInterface
и трейт Kosv\Yii2Grid\RowEditable\Form\SaveFormTrait
namespace app\models;
use Kosv\Yii2Grid\RowEditable\Form\SaveFormInterface;
use Kosv\Yii2Grid\RowEditable\Form\SaveFormTrait;
use yii\base\Model;
class YourSaveForm extends Model implements SaveFormInterface
{
use SaveFormTrait;
}
В YourSaveForm реализуйте методы: validateEditableRows(отвечает за валидацию данных), и saveEditableRows(отвечает за сохранение данных).
По умолчанию, данные методы не имеют реализации, поэтому вы должы сами позаботится о том, как будут валидироваться и сохраняться ваши данные.
namespace app\models;
use Kosv\Yii2Grid\RowEditable\Form\SaveFormInterface;
use Kosv\Yii2Grid\RowEditable\Form\SaveFormTrait;
use yii\base\Model;
class YourSaveForm extends Model implements SaveFormInterface
{
use SaveFormTrait;
public function validateEditableRows()
{
}
public function saveEditableRows()
{
}
}
Шаг 3. Создание и сохранение YourSaveForm в экшене вашего контроллера ¶
public function actionIndex()
{
$gridSaveForm = new app\models\YourSaveForm();
if ($gridSaveForm->load(Yii::$app->request->post()) &&
$gridSaveForm->validate() &&
$gridSaveForm->validateEditableRows()) {
$gridSaveForm->saveEditableRows();
}
return $this->render('index', [
'gridSaveForm' => $gridSaveForm,
]);
}
Шаг 4. Вывод и обязательные параметры ¶
Выведите YourGridView в представлении и укажите обязательный параметр form
<?php
use app\widgets\YourGridView;
echo YourGridView::widget([
...
'commonEditParams' => [
'form' => $gridSaveForm,
...
],
])
Шаг 5. Колонка с чекбоксами для выбора строки ¶
В массив колонок добавьте Kosv\Yii2Grid\RowEditable\Select\CheckboxColumn
`php
<?php
/* @var $gridSaveForm app\models\YourSaveForm /
use Kosv\Yii2Grid\RowEditable\Select\CheckboxColumn;
use app\widgets\YourGridView;
echo YourGridView::widget([
...
'commonEditParams' => [
'form' => $modelOfSaveForm,
...
],
'columns' => [
...
['class' => CheckboxColumn::class],
],
])
`
Шаг 6. Кнопка для сохранения данных ¶
В любом месте страницы, выведите кнопку для сохранения данных
`php
<?php echo Html::button('Save', [
'class' => \Kosv\Yii2Grid\RowEditable\Config\EditConfigInterface::DEFAULT_CLASS_SAVE_BTN
]) ?>
`
Конфигурирование ¶
Данное расширение можно конфигурировать как для отдельных столбцов, так и использовать общии парметры конфигурации.
Более подробную информации о всех праметрах можно получить в разделе описания параметров конфигурации
Общии параметры конфигурации ¶
Данный вид парметров задаётся в commonEditParams:
`php
echo YourGridView::widget([
...
'commonEditParams' => [
'form' => $saveForm,
],
])
`
Конфигурация столбцов ¶
Если в массиве columns вашего YourGridView, есть столбцы без явно указанного типа (задаётся через поле class),
то по умолчанию будет использоваться столбец с типом Kosv\Yii2Grid\RowEditable\EditableRowColumn.
Все столбцы типа Kosv\Yii2Grid\RowEditable\EditableRowColumn можно конфигурируются точно также как и commonEditParams,
только параметры кофигурации задаются через поле editParams
echo YourGridView::widget([
...
'commonEditParams' => [
'form' => $saveForm,
'input' => \Kosv\Yii2Grid\RowEditable\Input\Input::class
...
],
'columns' => [
[
...
'editParams' => [
'input' => \Kosv\Yii2Grid\RowEditable\Input\DropDownList::class
...
],
],
],
])
Список параметров из commonEditParams, которые нельзя предопределить в столбце:
prefix, gridCssClass, selectMode, saveAction, saveMethod, saveButton.
Описание параметров конфигурации ¶
'form' => $saveFrom,
'formAttribute' => 'editingRows',
'enable' => true
'gridCssClass' => 'gre-grid-view',
'input' => Kosv\Yii2Grid\RowEditable\Input\Input::class,
'inputWrapHtmlClass' => 'input-wrap',
'inputWrapHtmlTag' => 'div',
'prefix' => 'gre',
'saveAction' => '',
'saveButton' => '.gre-save-btn',
'saveMethod' => 'POST',
'selectMode' => Kosv\Yii2Grid\RowEditable\Config\EditConfigInterface::SELECT_MODE_CHECKBOX,
'outputWrapHtmlClass' => 'output-wrap',
'outputWrapHtmlTag' => 'div',
'validationErrorLayout' => '<p>{error}</p>'