列表视图和自定义数据提供程序搜索yii2


Listview and custom dataprovider search yii2

我正在进行一个项目,为了显示一些数据,我正在使用自定义查询并将这些数据保存在dataProvider中。将该dataProvider传递给查看文件并使用Listview进行显示。就像低于

<nav class="navbar navbar-fixed-top">
    <form class="navbar-form navbar-left search-form" action="">
        <div class="form-group"><input type="text" class="form-control app-search" placeholder="Search">
        </div>
    </form>
</nav>
<div class="panel-group" id="accordion">
<?= 'yii'widgets'ListView::widget([
    'dataProvider' => $dataProvider,
    'itemView' => 'eventlistview',
    'layout' => "{items}",
]); ?>
</div>

我想为Listview实现一个search条。我没有使用任何SearchModel,所以我很困惑我该怎么做?

这是我的action代码。

public function actionEvent()
{
    $this->layout = 'app';
    if(isset($_GET['latitude']) && isset($_GET['longitude'])){
            $query = new Query();
            $query  ->select(['e.*','COUNT(d.event_id) as checkins' ,'o.clubname',new Expression("case when c.id is not null then 1 else 0 end is_checkedin")])
                ->from('event e')
                ->innerJoin('organiser o', 'e.organiser_id = o.organiser_id')
                ->leftJoin('checkin c', 'c.event_id = e.id and c.user_id ='.$_GET['user_id'])
                ->leftJoin('checkin d', 'd.event_id = e.id' )
                ->where('e.interest_id IN
                             ( SELECT area_intrest.id FROM area_intrest, user WHERE FIND_IN_SET(area_intrest.id,user.area_intrest) AND user.id='.$_GET['user_id'].')')
                ->groupBy('e.id');
            $dataProvider = new ActiveDataProvider([
                'query' => $query,
            ]);
        }
  return $this->render('event' ,['dataProvider' => $dataProvider]);
}

我只是感到困惑,因为我在这里没有使用任何搜索模型,所以我不知道如何使用eventtitle进行搜索。

在视图中,您可以使用活动表单发送值

<?php 
      $form = ActiveForm::begin(['id' => 'my-form', 
          'method'=>'get',
          'action' => Url::to('your-controller/event')]); 
?>
      <input type="text" class="form-control app-search" name="my_search" placeholder="Search">
<?= Html::submitButton('search') ?>
<?php ActiveForm::end(); ?>

在您的行动事件中,您可以

$this->layout = 'app';
if (isset($_GET('my_search')) {
   // perform what you nedd ..
}
if(isset($_GET['latitude']) && isset($_GET['longitude'])){