单击链接时两次调用Yii2删除操作

时间:2018-10-01 14:42:54

标签: yii2 pjax double-submit-problem

从控制器渲染的视图具有一个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>

单击该链接时,将调用两次delete操作方法。此外,当Pjax在包含链接的视图(即嵌套视图)之外时,很难注意到此问题。由于这个问题,删除成功后的重定向无法正常工作,而是找到了404 not found错误(尝试两次删除相同的ID)。

如何解决双重重定向?

1 个答案:

答案 0 :(得分:0)

您可以通过将以下属性添加到位于Pjax内的链接中来修复双重重定向:

data-pjax="0"

在我的情况下,我通过删除网格视图并将其替换为带有链接的ul来重用嵌套视图,并且当然忘记了在外部视图中删除不需要的Pjax。之后,问题出现了。很难注意到它两次调用了动作方法。