我有一个应用程序,其中更新后用户应从分页重定向到上一页。 让我们说有一个gridview,用户在第3页。然后他更新了那个页面上的一些记录。应该有一个重定向到索引页面3.如果在用户更新记录时,在保存之前,他会在新选项卡中打开另一个控制器/操作。然后ReturnUrl现在是新动作,在保存他正在更新的记录后,他被重定向到那个新的URL。
我已尝试设置每个操作" index" Url::remember();
然后在行动"更新" - return $this->goBack()
。
同样return $this->redirect(Yii::$app->request->referrer);
,但它保持在同一页面。
有一种方法可以在会话中存储每个索引URL,但在大型项目中,这意味着会话很多。
答案 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]);
}
...
}
最后,在成功更新模型之后,该操作会将我们重定向到上一个索引页面。