首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Yii2中显示搜索结果

如何在Yii2中显示搜索结果
EN

Stack Overflow用户
提问于 2015-07-30 18:20:24
回答 1查看 1.1K关注 0票数 0

我想实现一个搜索表。我正在获取搜索结果,但是当请求不在表单中时,Listview将显示表中的所有数据。

如何设置条件,以便在搜索表单为空时返回空的Listview?

型号:

代码语言:javascript
复制
public function search($params)
{
$query = Product::find(); 
$dataProvider = new ActiveDataProvider(['query' => $query]);
if (!($this->load($params) && $this->validate())) {
return $dataProvider;
}
$query->andFilterWhere(['title' => $this->title]);    
return $dataProvider;
}

管制员:

代码语言:javascript
复制
public function actionSearch()
{
$searchModel = new SearchForm();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
return $this->render('search', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
 ]);
 }

表格:

代码语言:javascript
复制
<div class="site-search">
<?php
$form = ActiveForm::begin([
'action' => ['search'],
'method' => 'get',])
?>        
<?=$form->field($model, 'title')?>
<div class="form-group">
<?=Html::submitButton('Submit', ['class' => 'btn btn-primary'])?> 
</div>
<?phpActiveForm::end();?>
</div> 

意见:

代码语言:javascript
复制
<?php        
echo $this->render('_form', ['model' => $searchModel]);?> 
<div class="listView">
<?php 
echo ListView::widget([
'dataProvider' =>  $dataProvider,
'itemView' => '_product',]);
 ?>
 </div>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-30 20:48:06

您的问题可能在于搜索模型(很难确定,因为缺少模型的验证规则)。只有当模型可以从$params填充时,搜索函数才会设置查询条件。向查询添加一个总是失败的条件将修复这个问题。

代码语言:javascript
复制
public function search($params)
{  
    if (!($this->load($params) && $this->validate())) {
        $query = Product::find()->where('1 <> 1');
    } else {
        $query = Product::find()->where(['title' => $this->title]);
    }
    return new ActiveDataProvider(['query' => $query]);
}

或者,还可以返回另一种类型的DataProvider:

代码语言:javascript
复制
public function search($params)
{  
    if (!($this->load($params) && $this->validate())) {
        return new yii\data\ArrayDataProvider(['allModels' => []]);
    }
    $query = Product::find()->where(['title' => $this->title]);
    return new ActiveDataProvider(['query' => $query]);
}

然而,tt让我感到奇怪的是,如果验证失败,仍然希望返回数据提供程序。抛出并捕获错误并在验证失败时显示错误消息似乎是一个不错的选择,可能比只显示一个空的结果列表更好。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31731250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档