更新后返回到上一页


yii2 back to previous page after update

如何在更新记录后将用户重定向到上一页?这是典型的场景:

  • 用户在索引页中过滤结果或分页记录,然后他们找到他们想要编辑的并单击编辑按钮。他们更新记录的数据,一旦他们点击"更新"按钮,他们将被重定向到索引视图,但过滤器/页面之前选择。

我尝试在更新

后在我的控制器中使用下面
return $this->redirect('index',302); (this is not what I need)
return $this->redirect(Yii::$app->request->referrer); (this gets user back to update view and not to index view with filters)
return $this->goBack(); (this gets user to homepage)

谢谢!

在您希望用户被重定向到添加

的操作中
'yii'helpers'Url::remember();

现在在任意控制器中调用:

return $this->goBack();

将用户重定向到"已标记"的动作

我建议在典型的更新操作方法中使用以下方法:

public function actionUpdate($id)
{
    $model = $this->findModel($id);
    if(Yii::$app->request->isGet) {
        Url::remember($this->request->referrer, $this->action->uniqueId);
    }
    if ($model->load(Yii::$app->request->post()) && $model->save()) {
        return $this->redirect(
            Url::previous($this->action->uniqueId) ?: ['view', 'id' => $model->id]
        );
    }
    return $this->render('update', [
        'model' => $model,
    ]);
}

URL只有在它是GET请求(典型的第一次调用)时才会被记住,因为如果验证失败,可以再次调用该操作。然后它是一个POST调用,您不想记住现在是更新操作本身的引用者。

保存成功后,您可以重定向到记住的URL。如果由于某种原因没有记住URL,则将使用标准(或其他)。

我在URL::remember()和URL:: previous()中添加了一个名称。它应该是唯一的,并且只在这个动作中使用。$ This ->action->uniqueId就是这种情况。我认为应该这样做,因为用户可以打开多个选项卡,在应用程序的其他地方导航,你可能有更多的更新动作与相同的机制。如果没有提供唯一的名称,那么将使用最后记住的URL,这个URL可能是不同的、意外的URL。用户会感到困惑。

与Bizley的方法相比,该解决方案在操作本身中是自包含的。无需在其他操作中记住之前的URL。

更新:解决方案仍然存在问题,但它是可接受的。