Comment mettre en œuvre seul formulaire de recherche dans yii2

Yii2 a un searchModel de recherche de chaque champ dans la GridView. Est-il possible de créer un seul champ de recherche à l'extérieur de la GridView où l'utilisateur peut saisir des mots clés et par la Recherche de l'heure bouton est frappé, les résultats seront affichés dans la GridView basée sur les mots-clés entrés.

CONTRÔLEUR

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();
$searchModel = new UserSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
return $this->render('index', [
'PayslipEmailConfig' => $PayslipEmailConfig,
'dataProvider' => $dataProvider,
'payslipTemplateA' => $payslipTemplateA,
'payslipTemplateB' => $payslipTemplateB,
'searchModel' => $searchModel,
]);
}
public function actionSearchresults($keyword)
{
$session = Yii::$app->session;
if ( $keyword == '') {
return $this->redirect(\Yii::$app->request->getReferrer());
} else {
$user = User::find()->where( [ '_id' => new \MongoId($id) ] )->one(); 
$searchModel = new PayslipTemplateSearch();
$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();
return $this->render('searchresults', [
'searchModel' => $searchModel,
'user' => $user,
'payslipTemplateA' => $payslipTemplateA,
'payslipTemplateB' => $payslipTemplateB,
]);
}    
}

J'ai posé une question liée à ce problème ici: Principal Formulaire de Recherche dans Yii2

Il n'a pas en raison de certaines complications dans Kartik de Select2 liste déroulante de recherche widget. Maintenant je suis passé temporairement à un simple Yii2 champ de recherche.

VUE

echo $form->field($model, '_id')->textInput(array('placeholder' => 'search'))->label(false);

MODÈLE

<?php
namespace app\models;
use Yii;
use yii\base\Model;
use yii\data\ActiveDataProvider;
use app\models\User;
/**
* UserSearch represents the model behind the search form about `app\models\User`.
*/
class UserSearch extends User
{
/**
* @inheritdoc
*/
public function rules()
{
return [
[[/*'_id',*/ 'creator_id'], 'integer'],
[['fname', 'lname', 'email', 'username', 'user_type'], 'safe'],
];
}
/**
* @inheritdoc
*/
public function scenarios()
{
//bypass scenarios() implementation in the parent class
return Model::scenarios();
}
/**
* Creates data provider instance with search query applied
*
* @param array $params
*
* @return ActiveDataProvider
*/
public function search($params)
{
$session = Yii::$app->session;
$query = User::find();
$query->where(['user_type' => 'BizStaff'])->andwhere(['parent' => new \MongoId($session['company_owner'])]);
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
$this->load($params);
if (!$this->validate()) {
//uncomment the following line if you do not want to any records when validation fails
//$query->where('0=1');
return $dataProvider;
}
$query->andFilterWhere([
'_id' => $this->_id,
'creator_id' => $this->creator_id,
]);
$query->andFilterWhere(['like', 'fname', $this->fname])
->andFilterWhere(['like', 'lname', $this->lname])
->andFilterWhere(['like', 'email', $this->email])
->andFilterWhere(['like', 'username', $this->username])
->andFilterWhere(['like', 'user_type', $this->user_type]);
return $dataProvider;
}
}

Avez-vous une idée sur comment mettre en œuvre une seule recherche? C'est un peu plus intelligents de recherche, car il peut chercher tout dans la table de base de données basé sur des mots-clés entrés.

MODIFIER

Quand je fais une recherche d'un mot-clé, par exemple "bonjour", puis, il me donne cette url et d'erreur après l'appui sur la touche entrée:

URL:

http://localhost/iaoy-dev/web/index.php?r=payslip-template%2Fsearchresults&PayslipTemplateSearch%5B_id%5D=hello

Message d'erreur:

Bad Request (#400) Manque des paramètres: id

Aider.

  • vous avez pass id comme paramètre dans payslip-template/searchresults action ?
  • avez-vous utiliser searchresults que l'action de ActiveForm dans _search.php ?. et par-dessus tout code de travail, si vous avez utilisé searchresults que l'action de la forme dans _search.php donc, il remplace avec index action..
  • quelque chose de bizarre dans mon URL: /index.php?r=payslip-template/searchresults&PayslipTemplateSearch[_id]=samplekeyword
  • Vous utilisez index action au lieu de searchresults. par la présente son travail. parce que vous avez utilisé la id paramètre dans searchresults action comme searchresults($id).
  • bon j'ai l'obtenir. mais pourquoi est-il PayslipTemplateSearch[_id]=sampleke‌​yword dans mon URL?
  • pouvez-vous mettre une réponse où vous pouvez afficher d'un simple searchresults page? parce que mon original searchresults page ne fonctionne pas.
  • PayslipTemplateSearch[_id]=sampleke‌​yword est la recherche param pour _id.
  • pouvez-vous mettre searchresults code ?. et searchresults est la recherche de modèle ?
  • fait. mais ne vous embêtez pas avec lui, car il ne fonctionne pas