Yii2 действие удаления вызывается дважды при нажатии на ссылку

Представление, отображаемое из контроллера, имеет теги начала и конца Pjax:

Pjax::begin([
    'id' => 'pjax-questions-list',
    'enablePushState' => false,
    'clientOptions' => [
        'method' => 'get'
    ],
]);

Внутри Pjax он отображает два вложенных представления:

<div class="body">
  <?php
      echo $this->render('_questions_search', ['model' => $searchModel, ' questionary' => $questionary]);
      echo $this->render('_questions_list', ['dataProvider' => $dataProvider, 'model' => $searchModel]);
  ?>
</div>

Внутри вложенного представления есть ссылка для удаления вопроса:

<li>
  <a class="waves-effect waves-block" data-pjax="0"
     href="<?= Url::to(['question/delete', 'id' => $model->id]) ?>">Delete</a>
</li>

При нажатии на эту ссылку метод действия удаления вызывается дважды. Более того, эту проблему трудно заметить, когда Pjax находится за пределами представления, содержащего ссылку (то есть вложенных представлений). Из-за этой проблемы перенаправление после успешного удаления не работает, и вместо этого обнаруживается ошибка 404 not found (пытается дважды удалить один и тот же идентификатор).

Как я могу исправить двойное перенаправление?

1 ответ

Решение

Вы можете исправить двойное перенаправление, добавив следующий атрибут к вашей ссылке, которая находится внутри Pjax:

data-pjax="0"

В моем случае я повторно использовал вложенный вид, удалив вид сетки и заменив его на ul со ссылками, и, конечно, забыл удалить ненужный Pjax во внешнем виде. После этого проблема появилась. Трудно было заметить, что он вызывал метод действия дважды.

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