kosv / yii2-grid-roweditable
用于编辑yii2网格小部件行的扩展。
Requires
- php: >=5.5.0
- kosv/yii2-jquery-fix-clone: ~1.0
- yiisoft/yii2: ~2.0.0
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。
如何使用?
- 需要将此扩展连接到
YourGridView。 - 需要实现
YourSaveForm。在此类中将执行验证和保存数据的过程。 - 在控制器的动作中创建
YourSaveForm对象并实现保存表单数据的逻辑。 - 需要在视图中输出
YourGridView并指定必须的编辑参数。 - 在列列表中添加
Kosv\Yii2Grid\RowEditable\Select\CheckboxColumn。这是一个复选框列,允许选择行。 - 输出保存更改的按钮。
步骤 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, ], ])
列配置
如果您的 YourGridView 的 columns 数组中有没有明确指定类型的列(通过 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。
配置参数描述
# Модель формы в которой выполняется валидация и сохранение данных. # - Обязательный параметр # - Тип 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>'