Освоение Yii2 GridView: как получить выбранные строки

GridView в Yii2 — это мощный виджет для отображения табличных данных в веб-приложении. Одним из распространенных требований является получение выбранных строк из GridView для дальнейшей обработки. В этой статье мы рассмотрим различные методы достижения этой цели с помощью Yii2 GridView. Мы предоставим пошаговые примеры кода и объясним каждый метод простыми разговорными словами.

Метод 1: использование JavaScript
Если вы хотите получить выбранные строки на стороне клиента без дополнительного запроса к серверу, вы можете использовать JavaScript. Вот пример:

$('#gridview-id').on('click', '.checkbox-class', function() {
    var selectedRows = [];

    $('.checkbox-class:checked').each(function() {
        selectedRows.push($(this).closest('tr').data('key'));
    });

    console.log(selectedRows);
});

В этом примере мы прикрепляем обработчик событий щелчка к флажкам GridView. При установке флажка мы перебираем все отмеченные флажки, находим их родительскую строку и извлекаем уникальный идентификатор (обычно первичный ключ), связанный с каждой строкой. Наконец, мы сохраняем выбранные идентификаторы строк в массиве selectedRows.

Метод 2: использование выбираемого расширения GridView в Yii2
Yii2 предоставляет расширение под названием «yii2-gridview-extensions», которое расширяет функциональные возможности GridView, включая встроенную поддержку обработки выбранных строк. Вы можете установить его с помощью Composer:

composer require kartik-v/yii2-grid "@dev"

После установки расширения вы можете включить выбираемую функцию в конфигурации GridView:

use kartik\grid\GridView;
echo GridView::widget([
    'dataProvider' => $dataProvider,
    'columns' => $columns,
    'pjax' => true,
    'panel' => [
        'type' => GridView::TYPE_PRIMARY,
        'heading' => 'Select Rows',
    ],
    'toolbar' => [
        [
            'content' =>
                Html::button('<i class="glyphicon glyphicon-trash"></i>', [
                    'class' => 'btn btn-danger',
                    'id' => 'delete-selected',
                    'data-pjax' => 0,
                ]),
        ],
        '{toggleData}',
    ],
    'selection' => GridView::SELECT_MULTIPLE,
    'export' => false,
]);

Это активирует функцию выбора в GridView, позволяя пользователям выбирать несколько строк с помощью флажков. Доступ к выбранным строкам можно получить на стороне сервера с помощью метода Yii::$app->request->post('selection').

Метод 3: обработка выбора на стороне сервера
Если вы предпочитаете обрабатывать выбор строк на стороне сервера, вы можете настроить столбец флажка GridView и включить специальную функцию JavaScript. Вот пример:

use yii\helpers\Html;
use yii\grid\GridView;
echo GridView::widget([
    'dataProvider' => $dataProvider,
    'columns' => [
        [
            'class' => 'yii\grid\CheckboxColumn',
            'checkboxOptions' => function ($model, $key, $index, $column) {
                return ['onchange' => 'handleRowSelection(event)'];
            },
        ],
        'column1',
        'column2',
        // Other columns
    ],
]);

В этом примере мы настраиваем столбец флажка и добавляем обработчик событий onchangeк каждому флажку. Этот обработчик событий вызывает функцию JavaScript handleRowSelection, с помощью которой вы можете выполнить любую желаемую серверную логику для обработки выбранных строк.

В этой статье мы рассмотрели различные методы получения выбранных строк из Yii2 GridView. Мы рассмотрели клиентский JavaScript, расширение GridView Selectable для Yii2 и обработку выбора на стороне сервера. Каждый метод предлагает свои преимущества в зависимости от ваших конкретных требований. Следуя приведенным примерам кода и пояснениям, вы сможете легко реализовать функцию выбора строк в своих приложениях Yii2.