Yii2 GridView 分页 + 搜索过滤器
Yii2 GridView Pagination + Search Filter
尝试在网格视图中同时启用分页和搜索过滤器。我知道我在下面的代码中覆盖了 dataProvider,但我不确定我该如何做。当然,问题是目前如果我更改页面或进行筛选搜索,分页就会消失。
public function actionLibrary()
{
$query = FileEntry::find();
$dataProvider = new ActiveDataProvider([
'query' => $query,
'pagination' => [
'pageSize' => 10,
],
]);
$searchModel = new FileEntrySearch();
if(Yii::$app->request->isAjax)
{
$dataProvider = $searchModel->search(Yii::$app->request->get());
}
return $this->render('library', [
'dataProvider' => $dataProvider,
'searchModel' => $searchModel,
]);
}
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
这假设您的 $searchModel
已经是 ActiveDataProvider 的一个实例,我假设您在 FileEntrySearch 模型中定义了它。所以您的操作可能看起来像这样:
public function actionLibrary()
{
$searchModel = new FileEntrySearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
return $this->render('library', [
'dataProvider' => $dataProvider,
'searchModel' => $searchModel,
]);
}
和您的 FileEntrySearch:
class FileEntrySearch extends FileEntry
{
// [...] rules, scenarios etc.
public function search($params)
{
$query = FileEntry::find();
$dataProvider = new ActiveDataProvider([
'query' => $query
]);
// you can add sorting here
$this->load($params);
// you can define your filters here
return $dataProvider; // this will become your $searchModel
}
}
没有 dataProvider 以这种方式覆盖。
您可以在创建数据提供程序后更改分页配置:
public function actionLibrary() {
$searchModel = new FileEntrySearch();
$dataProvider = $searchModel->search(Yii::$app->request->get());
$dataProvider->pagination->pageSize = 10;
return $this->render('library', [
'dataProvider' => $dataProvider,
'searchModel' => $searchModel,
]);
}
尝试在网格视图中同时启用分页和搜索过滤器。我知道我在下面的代码中覆盖了 dataProvider,但我不确定我该如何做。当然,问题是目前如果我更改页面或进行筛选搜索,分页就会消失。
public function actionLibrary()
{
$query = FileEntry::find();
$dataProvider = new ActiveDataProvider([
'query' => $query,
'pagination' => [
'pageSize' => 10,
],
]);
$searchModel = new FileEntrySearch();
if(Yii::$app->request->isAjax)
{
$dataProvider = $searchModel->search(Yii::$app->request->get());
}
return $this->render('library', [
'dataProvider' => $dataProvider,
'searchModel' => $searchModel,
]);
}
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
这假设您的 $searchModel
已经是 ActiveDataProvider 的一个实例,我假设您在 FileEntrySearch 模型中定义了它。所以您的操作可能看起来像这样:
public function actionLibrary()
{
$searchModel = new FileEntrySearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
return $this->render('library', [
'dataProvider' => $dataProvider,
'searchModel' => $searchModel,
]);
}
和您的 FileEntrySearch:
class FileEntrySearch extends FileEntry
{
// [...] rules, scenarios etc.
public function search($params)
{
$query = FileEntry::find();
$dataProvider = new ActiveDataProvider([
'query' => $query
]);
// you can add sorting here
$this->load($params);
// you can define your filters here
return $dataProvider; // this will become your $searchModel
}
}
没有 dataProvider 以这种方式覆盖。
您可以在创建数据提供程序后更改分页配置:
public function actionLibrary() {
$searchModel = new FileEntrySearch();
$dataProvider = $searchModel->search(Yii::$app->request->get());
$dataProvider->pagination->pageSize = 10;
return $this->render('library', [
'dataProvider' => $dataProvider,
'searchModel' => $searchModel,
]);
}