Yii2:将索引页面传递给视图中的面包屑和更新操作

Yii2: Passing index page to breadcrumbs in view and update actions

1) 使用默认的 LinkPager 设置在索引 (GridView) 中有几页结果。 2) 在 ActionColumn 中调用更新或查看操作。 3) 做任何事情,然后单击面包屑导航 return 到您来自的 GridView 中的同一页面,但事实并非如此:您回到了第 1 页,这在某些用例中可能会非常烦人(当然可以简单粗暴地返回浏览器,但是...)。

因此,在制定出某种基于 $_GET 的不雅解决方案之前,有人知道这方面的任何 LinkPager(或相关)分页魔法吗?

提前致谢

我认为这对你有用:

$this->params['breadcrumbs'][] = ['label' => 'YourLabel', 'url' => ['index']];
$this->params['breadcrumbs'][] = ['label' =>  Yii::$app->request->get('page'), 'url' => ['index', 'page' => Yii::$app->request->get('page')]];

现在似乎没有 LinkPager 魔术可以做到这一点,但我设法找到了避免控制器调整的解决方案。只需编辑 view.php/update.php 并在面包屑之前添加:

parse_str(parse_url(Yii::$app->request->referrer, PHP_URL_QUERY), $params);

然后在面包屑中:

$this->params['breadcrumbs'][] = ['label' => 'myLabel', 'url' => ['index', 'page' => isset($params['page']) ? $params['page'] : '']];

现在每次我们点击 myLabel 面包屑时,我们都会被发送到我们来自的 GridView 中的正确页面。

主要缺点是第二步之后没有页面跟踪,所以如果您这样做:index --> view/update/create --> !index,页面跟踪将会丢失,因此最好使用如下会话变量:

public function actionIndex()
{
    $searchModel = new BibliografiaSearch();
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

    Yii::$app->session['myPage'] = Yii::$app->request->get('page');

    return $this->render('index', [
        'searchModel' => $searchModel,
        'dataProvider' => $dataProvider,
    ]);
}

然后在面包屑中:

$this->params['breadcrumbs'][] = ['label' => 'myLabel', 'url' => ['index', 'page' => Yii::$app->session['myPage']]];

这样页码会随时保留;