Yii2更新后重定向到上一页

时间:2018-04-16 06:39:39

标签: redirect pagination yii2

我有一个应用程序,其中更新后用户应从分页重定向到上一页。 让我们说有一个gridview,用户在第3页。然后他更新了那个页面上的一些记录。应该有一个重定向到索引页面3.如果在用户更新记录时,在保存之前,他会在新选项卡中打开另一个控制器/操作。然后ReturnUrl现在是新动作,在保存他正在更新的记录后,他被重定向到那个新的URL。

我已尝试设置每个操作" index" Url::remember();然后在行动"更新" - return $this->goBack()

同样return $this->redirect(Yii::$app->request->referrer);,但它保持在同一页面。

有一种方法可以在会话中存储每个索引URL,但在大型项目中,这意味着会话很多。

3 个答案:

答案 0 :(得分:2)

您可以将returnUrl提供给链接,例如:

Url::to(['update','id'=>$model->url,'returnUrl'=> Yii::$app->request->url]);

然后在您的控制器中,使用$this->request->queryParams['returnUrl']重定向到previousUrl。

为了更进一步,为了始终提供returnUrl,您可以扩展Url Helper类:

namespace app\helpers;

use yii\helpers;

class Url extends  yii\helpers\Url

public function toRouteAndReturn($route, array $params = [], $scheme = false) {
    $params['returnUrl'] = Yii::$app->request->url;
    return parent::toRoute($route,$params,$scheme);
}

您可以在主配置中提供:

'on afterAction' => function($event) {
    if(!Yii::$app->getResponse()->isSent && !empty(Yii::$app->getRequest()->queryParams['returnUrl']) {
        Yii::$app->getResponse()->redirect(Yii::$app->getRequest()->queryParams['returnUrl']);
    }
}

然后您可以使用app \ helpers \ Url :: toRouteAndReturn()而不是yii \ helpers \ Url :: toRoute()让它返回到上一个网址。

答案 1 :(得分:1)

您可以尝试以下解决方案。

首先在索引页面中,获取当前页面网址和编码

$current_url=base64_encode(\Yii::$app->request->getUrl());

使用您的更新链接附加此网址,如下所示。

'urlCreator' => function ($action, $model, $key, $index) use ($current_url)   {
    if ($action === 'update') {
        $url = Yii::$app->request->baseUrl . '/controllerName/update?id=' . $model->id.'&prev='.$current_url;
        return $url;
    }
    // ......

}

在Controller中,在Update方法解码 url中,如下所示,并用于重定向。

public function actionUpdate($id)
{
    $model = $this->findModel($id);
    $prev=base64_decode($_REQUEST['prev']);

    // ......

    return $this->redirect($prev); // you will redirect from where update method is called

    // ......

}

答案 2 :(得分:0)

page一样,将<model/update>参数传递到更新URL(<model>/update?id=<id>&page=<page>)中不是很容易吗?

在您的index.php视图中,按如下所示编辑ActionColumn:

    [
        'class' => 'yii\grid\ActionColumn',
        'urlCreator' => function ($action, $model, $key, $index) {
            return \yii\helpers\Url::to([$action, 'id' => $model->id, 'page' => Yii::$app->request->getQueryParam('page', null)]);
        },
    ],

如您所见,我正在从请求网址获取页面参数,并将其传递给模型的操作按钮

当您单击到update模型时,我们从中输入的页面将存储/放置在url中。

控制器:

    public function actionUpdate($id, $page = null)
    {
        $model = $this->findModel($id);
        ...
        if($model->save()) {
            return $this->redirect(['index', 'page' => $page]);
        }
        ...
    }

最后,在成功更新模型之后,该操作会将我们重定向到上一个索引页面。