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 во внешнем виде. После этого проблема появилась. Трудно было заметить, что он вызывал метод действия дважды.