Php Yii2中的主要搜索表单

Php Yii2中的主要搜索表单,php,gridview,yii2,Php,Gridview,Yii2,我是Yii2的新手,我仍然不知道如何正确配置它。我注意到,GridView在每列上都有搜索字段。我现在需要的是创建一个主/单个搜索字段,用户可以在其中输入关键字,然后点击搜索按钮后,结果将显示在GridView中 这可能吗?我还在我的搜索表单字段中使用了这个Kartik小部件,它有一个下拉列表 我们被告知使用此下拉搜索,当用户输入一些关键字(有时会在下拉列表中返回“未找到结果”)并单击搜索按钮时,页面将刷新,根据输入的关键字显示所有结果 我还在SO中搜索了一些与我相同的问题,例如: 我没有找

我是Yii2的新手,我仍然不知道如何正确配置它。我注意到,
GridView
在每列上都有搜索字段。我现在需要的是创建一个主/单个搜索字段,用户可以在其中输入关键字,然后点击搜索按钮后,结果将显示在
GridView

这可能吗?我还在我的搜索表单字段中使用了这个Kartik小部件,它有一个下拉列表

我们被告知使用此下拉搜索,当用户输入一些关键字(有时会在下拉列表中返回“未找到结果”)并单击搜索按钮时,页面将刷新,根据输入的关键字显示所有结果

我还在SO中搜索了一些与我相同的问题,例如:

我没有找到运气。第二个链接没有任何答案

我将包括我的行动控制器在这里,以防你需要它

public function actionIndex()
{
    $session = Yii::$app->session;
    $searchModel = new PayslipTemplateSearch();

    $PayslipEmailConfig = PayslipEmailConfig::find()->where(['company_id'=> new \MongoId($session['company_id'])])->one();

    $payslipTemplateA = PayslipTemplate::find()->where(['company_id' => new \MongoId($session['company_id'])])->andwhere(['template_name' => 'A'])->one();
    $payslipTemplateB = PayslipTemplate::find()->where(['company_id' => new \MongoId($session['company_id'])])->andwhere(['template_name' => 'B'])->one();

    $pTemplateModel = PayslipTemplate::find()->where(['company_id' => new \MongoId($session['company_id'])])->all();
    $user = User::find()->where(['_id' => new \MongoId($session['user_id'])])->one();
    $module_access = explode(',', $user->module_access);


    $dataProvider = User::find()->where(['user_type' => 'BizStaff'])->andwhere(['parent' => new \MongoId($session['company_owner'])])->all();

    return $this->render('index', [
        'PayslipEmailConfig' => $PayslipEmailConfig,
        'dataProvider' => $dataProvider,
        'payslipTemplateA' => $payslipTemplateA,
        'payslipTemplateB' => $payslipTemplateB,
    ]);
}
我的视图,index.php


_search.php



确实需要这方面的帮助。

此示例代码符合您的要求。所以,试试看

用户Searchmodel的
search()
方法

public function search($params)
{
   $query = User::find();
   $query->where(['user_type' => 'BizStaff'])->andwhere(['parent' => new \MongoId($session['company_owner'])])->all();

   $dataProvider = new ActiveDataProvider([
            'query' => $query,
        ]);
  ......
  ........
}
控制器的
actionIndex

public function actionIndex()
{
    $session = Yii::$app->session;
    /*  $searchModel = new PayslipTemplateSearch();  */

    $PayslipEmailConfig = PayslipEmailConfig::find()->where(['company_id'=> new \MongoId($session['company_id'])])->one();

    $payslipTemplateA = PayslipTemplate::find()->where(['company_id' => new \MongoId($session['company_id'])])->andwhere(['template_name' => 'A'])->one();
    $payslipTemplateB = PayslipTemplate::find()->where(['company_id' => new \MongoId($session['company_id'])])->andwhere(['template_name' => 'B'])->one();

    $pTemplateModel = PayslipTemplate::find()->where(['company_id' => new \MongoId($session['company_id'])])->all();
    $user = User::find()->where(['_id' => new \MongoId($session['user_id'])])->one();
    $module_access = explode(',', $user->module_access);

    $searchModel = new UserSearch();
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
    /*
       $dataProvider = User::find()->where(['user_type' => 'BizStaff'])->andwhere(['parent' => new \MongoId($session['company_owner'])])->all();
    */

    return $this->render('index', [
        'PayslipEmailConfig' => $PayslipEmailConfig,
        'dataProvider' => $dataProvider,
        'payslipTemplateA' => $payslipTemplateA,
        'payslipTemplateB' => $payslipTemplateB,
        'searchModel' => $searchModel,
    ]);
}
index.php

<?php 
    $users = User::find()->where(['user_type' => 'BizStaff'])->andwhere(['parent' => new \MongoId($session['company_owner'])])->all();
    echo $this->render('_search', ['model' => $searchModel, 'users' => $users]); 
?>


你能发布你的
index.php
文件吗?你需要将
searchModel
传递给索引文件。然后将
searchModel
作为
model
传递到
\u search
文件。因此,我将使用它,
echo$this->render(“'u search',['searchModel'=>new User(),'users'=>$users])?否。如下所示
$searchModel=newusersearch();echo$this->render('u search',['model'=>$searchModel,'users'=>$users])确定。但是它是如何工作的呢?但是我使用Kartik作为我的搜索域。它有一个用于搜索的下拉列表。这有关系吗?因为是卡提克,所以不起作用。它有一个下拉列表,仅根据下拉列表显示结果。这是一张图片:请帮忙。我问了另一个与此相关的问题,这里我希望你仍然能帮忙(是的..我正在本地创建工作演示,所以请有一些耐心…:)
public function actionIndex()
{
    $session = Yii::$app->session;
    /*  $searchModel = new PayslipTemplateSearch();  */

    $PayslipEmailConfig = PayslipEmailConfig::find()->where(['company_id'=> new \MongoId($session['company_id'])])->one();

    $payslipTemplateA = PayslipTemplate::find()->where(['company_id' => new \MongoId($session['company_id'])])->andwhere(['template_name' => 'A'])->one();
    $payslipTemplateB = PayslipTemplate::find()->where(['company_id' => new \MongoId($session['company_id'])])->andwhere(['template_name' => 'B'])->one();

    $pTemplateModel = PayslipTemplate::find()->where(['company_id' => new \MongoId($session['company_id'])])->all();
    $user = User::find()->where(['_id' => new \MongoId($session['user_id'])])->one();
    $module_access = explode(',', $user->module_access);

    $searchModel = new UserSearch();
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
    /*
       $dataProvider = User::find()->where(['user_type' => 'BizStaff'])->andwhere(['parent' => new \MongoId($session['company_owner'])])->all();
    */

    return $this->render('index', [
        'PayslipEmailConfig' => $PayslipEmailConfig,
        'dataProvider' => $dataProvider,
        'payslipTemplateA' => $payslipTemplateA,
        'payslipTemplateB' => $payslipTemplateB,
        'searchModel' => $searchModel,
    ]);
}
<?php 
    $users = User::find()->where(['user_type' => 'BizStaff'])->andwhere(['parent' => new \MongoId($session['company_owner'])])->all();
    echo $this->render('_search', ['model' => $searchModel, 'users' => $users]); 
?>