@teodor7teodor7

Yii2 как загрузить массив из gridview?

Подскажите есть
<?php
$form = ActiveForm::begin(['id' => $model->formName()]
);
?>
<?php
echo GridView::widget([
    'dataProvider' => $dataProvider,
    'columns' => [
            [
            'attribute' => 'id',
            'label' => Yii::t('frontend', 'Id'),
        ],
            [
            'attribute' => 'username',
            'label' => Yii::t('frontend', 'Name'),
        ],
            ['class' => 'yii\grid\CheckboxColumn',
            'name' => 'broker_id',
            'checkboxOptions' => function ($model, $key, $index, $column) {
                return ['value' => $model->id];
            }
        ],
    ],
]);
?>

<div class="form-group">
    <?= Html::submitButton(Yii::t('common', 'Save'), ['class' => 'btn btn-info', 'name' => 'packages-button']) ?>
</div>
<?php
ActiveForm::end();
?>

Нужно принять много чек боксов и обработать. Насколько понимаю есть 2 способа.
1) Это валидация в rules
public function rules() {
        return [
                [['broker_id'],'each', 'rule' => ['integer']],
        ];
    }

2) Еще способ это Model::validateMultiple([broker_id])

public function actionIndex() {

        $model = new BrokersForm();
        $brokers = User::find()->where(['user_type' => 'broker']);
        $dataProvider = new ActiveDataProvider([
            'query' => $brokers,
            'sort' => [
                'defaultOrder' => ['id' => SORT_DESC],
            ], 'pagination' => [
                'pageSize' => 10,
            ],
        ]);

        var_dump($model->load(Yii::$app->request->post()));
 //       die();
        if ($model->load(Yii::$app->request->post()) && $model->validate()) {

            if ($model->save()) {
                Yii::$app->session->setFlash('success', 'Брокер выбран.');
                return $this->refresh();
            } else {
                Yii::$app->session->setFlash('error', 'Ошибка брокер не выбран.');
                return $this->refresh();
            }
        } else {
            return $this->render('index', ['model' => $model, 'dataProvider' => $dataProvider]);
        }


Но не один не работает не пойму почему.
  • Вопрос задан
  • 851 просмотр
Пригласить эксперта
Ответы на вопрос 1
qonand
@qonand
Software Engineer
Каждый экземпляр класса наследуемый от \yii\base\Model (в том числе и ActiveRecord) возвращает название формы, это название сначала используется для формирования инпутов через ActiveField, а потом и для загрузки данных с этих инпутов (в методе load). В Вашем же случае CheckboxColumn формирует инпуты без учета названия формы, а load пытается загрузить данные с учетом названия формы. Поэтому данные у Вас и не загружаются. Самое просто решение это сделать так:
$model->load(Yii::$app->request->post(), '')
Но конечно оборачивать GridView в ActiveForm это очень не тру.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы