kosv/yii2-grid-roweditable

用于编辑yii2网格小部件行的扩展。

安装: 28

依赖: 0

建议者: 0

安全: 0

星标: 1

关注者: 1

分支: 1

类型:yii2-extension

1.0.2 2019-02-08 15:03 UTC

This package is auto-updated.

Last update: 2024-09-09 19:54:28 UTC


README

Yii2 扩展,用于在 GridView 中编辑数据

安装

执行

$ composer require kosv/yii2-grid-roweditable:1.0.*

或者在 composer.json 中添加 "kosv/yii2-grid-rowEditable": "1.0.*"

定义

YourGridView - 为了使用此扩展,您需要拥有或创建一个从 GridView 继承的子类,因此我们将此类称为 YourGridView
YourSaveForm - 您需要创建一个表单来执行验证和保存数据。在此文档中,此类表单将被称为 YourSaveForm

如何使用?

  1. 需要将此扩展连接到 YourGridView
  2. 需要实现 YourSaveForm。在此类中将执行验证和保存数据的过程。
  3. 在控制器的动作中创建 YourSaveForm 对象并实现保存表单数据的逻辑。
  4. 需要在视图中输出 YourGridView 并指定必须的编辑参数。
  5. 在列列表中添加 Kosv\Yii2Grid\RowEditable\Select\CheckboxColumn。这是一个复选框列,允许选择行。
  6. 输出保存更改的按钮。

步骤 1. 初始化 YourGridView

如果您没有从 GridView 继承的子类,则在应用程序的任何位置创建它

namespace app\widgets;

use yii\grid\GridView as YiiGridView;

class YourGridView extends YiiGridView
{ 
}

Kosv\Yii2Grid\RowEditable\EditableGridInterface 接口连接到 YourGridView
以及 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(或其任何子类)继承

namespace app\models;

use yii\base\Model;

/**
 * @property array $editingRows
 */
class YourSaveForm extends Model
{
}

Kosv\Yii2Grid\RowEditable\Form\SaveFormInterface 接口和 Kosv\Yii2Grid\RowEditable\Form\SaveFormTrait 特性连接到 YourSaveForm

namespace app\models;

use Kosv\Yii2Grid\RowEditable\Form\SaveFormInterface;
use Kosv\Yii2Grid\RowEditable\Form\SaveFormTrait;
use yii\base\Model;

/**
 * @property array $editingRows
 */
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;

/**
 * @property array $editingRows
 */
class YourSaveForm extends Model implements SaveFormInterface
{
    use SaveFormTrait;
    
    /**
     * @return bool
     */
    public function validateEditableRows()
    {
        // TODO: Ваша логика валидации данных из массива $this->editingRows
    }
    
    /**
     * @return bool
     */
    public function saveEditableRows()
    {
        // TODO: Ваша логика сохранения данных из массива $this->editingRows
    }
}

步骤 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
/** @var $gridSaveForm app\models\YourSaveForm */

use app\widgets\YourGridView;

echo YourGridView::widget([
    ...
    'commonEditParams' => [
        'form' => $gridSaveForm,
        ...
    ],
])

步骤 5. 选择行的复选框列

在列数组中添加 Kosv\Yii2Grid\RowEditable\Select\CheckboxColumn

<?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 echo Html::button('Save', [
    'class' => \Kosv\Yii2Grid\RowEditable\Config\EditConfigInterface::DEFAULT_CLASS_SAVE_BTN
]) ?>

配置

此扩展可以针对单独的列进行配置,也可以使用通用的配置参数。
有关所有参数的更详细信息,请参阅配置参数描述部分

通用配置参数

此类参数在 commonEditParams 中定义

echo YourGridView::widget([
    ...
    'commonEditParams' => [
        // Общие параметры
        'form' => $saveForm,
    ],
])

列配置

如果您的 YourGridViewcolumns 数组中有没有明确指定类型的列(通过 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 参数列表:prefixgridCssClassselectModesaveActionsaveMethodsaveButton

配置参数描述

# Модель формы в которой выполняется валидация и сохранение данных.
# - Обязательный параметр
# - Тип yii\base\Model
# - Нельзя предопределить в столбце
'form' => $saveFrom,

# Атрибут формы в который будут загружатся данные в виде массива.
# - Необязательный параметр
# - Тип string
# - Значение по умолчанию 'editingRows'
# - Нельзя предопределить в столбце
'formAttribute' => 'editingRows',

# Вклчить режим редактирования
# - Необязательный параметр
# - Тип boolean
# - Значение по умолчанию true
# - Можно предопределить в столбце
'enable' => true

# CSS класс для RowEditable. Будет добавлен к виджету GridView
# - Необязательный параметр
# - Тип string
# - Значение по умолчанию 'gre-grid-view'
# - Нельзя предопределить в столбце
'gridCssClass' => 'gre-grid-view',

# Html input для редактирования значений столбца
# - Необязательный параметр
#
# - Тип \Closure. Функция должна возвращать строку с Html 
# - Тип array. В массиве должна быть представлена кофигурация реализации Kosv\Yii2Grid\RowEditable\Input\InputInterface
# - Тип string. Строка дожна быть именем класса, который реализует Kosv\Yii2Grid\RowEditable\Input\InputInterface
#
# - Значение по умолчанию Kosv\Yii2Grid\RowEditable\Input\Input::class
# - Можно предопределить в столбце
'input' => Kosv\Yii2Grid\RowEditable\Input\Input::class,

# Html класс для блока с input'ом
# - Необязательный параметр
# - Тип string
# - Значение по умолчанию 'input-wrap'
# - Можно предопределить в столбце
'inputWrapHtmlClass' => 'input-wrap',

# Html тег для блока с input'ом
# - Необязательный параметр
# - Тип string
# - Значение по умолчанию 'div'
# - Можно предопределить в столбце
'inputWrapHtmlTag' => 'div',

# Префикс плагина. Будет добавлятся к html data-атрибутам
# - Необязательный параметр
# - Тип string
# - Значение по умолчанию 'gre'
# - Нельзя предопределить в столбце
'prefix' => 'gre',

# Экшен для формы сохранения данных
# - Необязательный параметр
# - Тип string
# - Значение по умолчанию ''
# - Нельзя предопределить в столбце
'saveAction' => '',

# Кнопка для формы сохранения данных
# - Необязательный параметр
# - Тип string. jQuery селектор кнопки
# - Значение по умолчанию '.gre-save-btn'
# - Нельзя предопределить в столбце
'saveButton' => '.gre-save-btn',

# HTTP метод с помощью которого будет выполнятся сохранение формы
# - Необязательный параметр
# - Тип string
# - Значение по умолчанию 'POST'
# - Нельзя предопределить в столбце
'saveMethod' => 'POST',

# Битовый флаг режима выбора строк.
#
# В текущей версии поддерживается только EditConfigInterface::SELECT_MODE_CHECKBOX.
# Если включён EditConfigInterface::SELECT_MODE_CHECKBOX, то YourGridView
# должен содержать столбец Kosv\Yii2Grid\RowEditable\Select\CheckboxColumn
# или любой другой столбец с реализацией Kosv\Yii2Grid\RowEditable\Select\CheckboxColumnInterface.
# 
# - Необязательный параметр
# - Тип integer
# - Значение по умолчанию EditConfigInterface::SELECT_MODE_CHECKBOX
# - Нельзя предопределить в столбце
'selectMode' => Kosv\Yii2Grid\RowEditable\Config\EditConfigInterface::SELECT_MODE_CHECKBOX,

# Html класс для блока с выводимыми данными в grid-ячейке
# - Необязательный параметр
# - Тип string
# - Значение по умолчанию 'output-wrap'
# - Можно предопределить в столбце
'outputWrapHtmlClass' => 'output-wrap',

# Html тег для блока с выводимыми данными в grid-ячейке
# - Необязательный параметр
# - Тип string
# - Значение по умолчанию 'div'
# - Можно предопределить в столбце
'outputWrapHtmlTag' => 'div',

# Html шаблон текста ошибки. Выводится при неудачной валидации, под input'ом
# - Необязательный параметр
# - Тип string
# - Значение по умолчанию '<p>{error}</p>'
# - Можно предопределить в столбце
'validationErrorLayout' => '<p>{error}</p>'