Yii2 CRUD 和分页
Yii2 CRUD and Pagination
我将 Yii2 与 Pjax 一起用于 index/gridview 列表。使用 pjax 分页,搜索所有工作正常而无需回发到服务器。
我的问题现在开始了,
假设我在第 2 页,我点击了第 2 页列表的编辑记录,我到达更新视图,我已经完成更改并保存,现在我被重定向到查看,现在我点击索引 link来自面包屑。
我想到达索引的第 2 页而不是第 1 页。
这方面的传统过程是获取参考页面参数并将其附加到面包屑中。
但是有没有什么简单的方法可以解决这个问题,我可以编写几行代码并将其应用于后端的每个地方?
感谢阅读。
为了记住网格过滤器,我使用的页面 yii2-grid-view-state
如果您只需要存储页面,将 page
参数传递到您的视图 url (<model/view>
) 不是很容易吗,就像 <model>/view?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)]);
},
],
如您所见,我从请求 url 中获取页面参数,并将其传递给模型的操作按钮(传递给所有按钮,但在您的问题中,它足以 view
当然是按钮)
当您点击 view
模型时,在我们的控制器中,我们需要获取该 page
值并将其传递给我们的 view.php
视图(以便将其放置在面包屑中).
我们的模型控制器:
public function actionView($id, $page = null)
{
return $this->render('view', [
'model' => $this->findModel($id),
'page' => $page,
]);
}
最后 view.php
视图将获得 page
值,并填充 index
url(如果不为空):
/* @var $page int */
$this->title = $model->name;
$this->params['breadcrumbs'][] = ['label' => 'Index', 'url' => ['index', 'page' => $page]];
所以当您按下索引面包屑时,它会打开您输入的页面。
会话实现的一些优点(@user1764431 解决方案):
- 您的每个选项卡都可以 return 到它自己的最后一页
- 简单而愚蠢的解决方案
一些缺点:
- 如果您需要存储一些过滤器参数,url 可以拉得很长
只需在 actionIndex() 的每个控制器中添加以下代码,其余一切都会小心
$searchModel = new CentervideosSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
/*Code insertion block begin*/
$params = Yii::$app->request->queryParams;
if (count($params) <= 1)
{
$params = Yii::$app->session['customerparams'];
if(isset(Yii::$app->session['customerparams']['page']))
$_GET['page'] = Yii::$app->session['customerparams']['page'];
if(isset(Yii::$app->session['customerparams']['per-page']))
$_GET['per-page'] = Yii::$app->session['customerparams']['per-page'];
}
else
{
Yii::$app->session['customerparams'] = $params;
}
$dataProvider = $searchModel->search($params);
/*Code insertion block Ends*/
我将 Yii2 与 Pjax 一起用于 index/gridview 列表。使用 pjax 分页,搜索所有工作正常而无需回发到服务器。
我的问题现在开始了, 假设我在第 2 页,我点击了第 2 页列表的编辑记录,我到达更新视图,我已经完成更改并保存,现在我被重定向到查看,现在我点击索引 link来自面包屑。
我想到达索引的第 2 页而不是第 1 页。
这方面的传统过程是获取参考页面参数并将其附加到面包屑中。
但是有没有什么简单的方法可以解决这个问题,我可以编写几行代码并将其应用于后端的每个地方?
感谢阅读。
为了记住网格过滤器,我使用的页面 yii2-grid-view-state
如果您只需要存储页面,将 page
参数传递到您的视图 url (<model/view>
) 不是很容易吗,就像 <model>/view?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)]);
},
],
如您所见,我从请求 url 中获取页面参数,并将其传递给模型的操作按钮(传递给所有按钮,但在您的问题中,它足以 view
当然是按钮)
当您点击 view
模型时,在我们的控制器中,我们需要获取该 page
值并将其传递给我们的 view.php
视图(以便将其放置在面包屑中).
我们的模型控制器:
public function actionView($id, $page = null)
{
return $this->render('view', [
'model' => $this->findModel($id),
'page' => $page,
]);
}
最后 view.php
视图将获得 page
值,并填充 index
url(如果不为空):
/* @var $page int */
$this->title = $model->name;
$this->params['breadcrumbs'][] = ['label' => 'Index', 'url' => ['index', 'page' => $page]];
所以当您按下索引面包屑时,它会打开您输入的页面。
会话实现的一些优点(@user1764431 解决方案):
- 您的每个选项卡都可以 return 到它自己的最后一页
- 简单而愚蠢的解决方案
一些缺点:
- 如果您需要存储一些过滤器参数,url 可以拉得很长
只需在 actionIndex() 的每个控制器中添加以下代码,其余一切都会小心
$searchModel = new CentervideosSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
/*Code insertion block begin*/
$params = Yii::$app->request->queryParams;
if (count($params) <= 1)
{
$params = Yii::$app->session['customerparams'];
if(isset(Yii::$app->session['customerparams']['page']))
$_GET['page'] = Yii::$app->session['customerparams']['page'];
if(isset(Yii::$app->session['customerparams']['per-page']))
$_GET['per-page'] = Yii::$app->session['customerparams']['per-page'];
}
else
{
Yii::$app->session['customerparams'] = $params;
}
$dataProvider = $searchModel->search($params);
/*Code insertion block Ends*/