Форма YII2 с GridView и Pjax

У меня есть представление о моделях: контакт и телефоны, и я хочу создать представление для обновления этих двух моделей, мое представление выглядит так:

<?php $form = ActiveForm::begin(['id'=>'Contact']); ?>
<?= $form->field($model, 'name')->textInput() ?>
<?php Pjax::begin(); ?>
<?= \yii\grid\GridView::widget([
    'id' => 'phonesGrid',
    'dataProvider' =>  new ArrayDataProvider([
        'allModels' => $fones,
        'sort' => [
            'attributes' => ['number', 'ramal'],
        ],
        'pagination' => false,
    ]),
    'columns' => [
        'number',
        'ramal',
         ['class' => 'yii\grid\ActionColumn']
    ],
]); ?>
<?php Pjax::end(); ?>  <?php ActiveForm::end(); ?>

Проблема в том, когда я звоню $.pjax.reload действие (создать или обновить) из ContactController Это вызов, но запрос не имеет формы данных контакта и ввод данных понятен. Как я могу сделать это в YII2?

Благодарю.

1 ответ

Если я правильно понимаю ваш вопрос, вы получите пустой ответ от pjax вызов. Это может быть вызвано тем, что у вас есть фактический form(И его models) находятся за пределами pjax звоните, заставляя его НЕ обновлять их и не устанавливая никакой связи вообще.

По моему мнению, лучше всего содержать ВСЕ данные, которые у вас есть внутри pjax с queries/models, Например:

<div class='resp-col col-12'>
    <?php Pjax::begin([
        'id'=>'all-tags',
        'timeout' => 5000,
    ]); ?>
<?php
$query = Tag::find();
$dataProvider = new ActiveDataProvider([
    'query' => $query,
    'pagination' => [
        'pageSize' => 20,
    ],
]);
echo GridView::widget([
    'dataProvider' => $dataProvider,
    'columns'=> [
      'view'=>[
        'header'=>'view',
        'options'=>[
          'width'=>'5%'
        ],
        'format'=>'raw',
        'value'=>function ($data) {
            return Html::a('<span class="glyphicon glyphicon-eye-open"></span>', Url::to(['detail', 'id'=>$data->id]), ['data-type'=>'modal', 'data-title'=>'View item']).
            '<a><span class="glyphicon glyphicon-remove" onclick=DeleteTag("'.$data->id.'")></span></a>';;
        },
      ],
      'name',
      'content',
    ]
]);
 ?>
<?php Pjax::end()?>

Когда pjax.reload вызывается для всех тегов, он также выполняет новый запрос и, следовательно, возвращает новый массив данных.

Надеюсь, это полезно для вас.

Другие вопросы по тегам