php – 如何在yii2中实现单个搜索表单
发布时间:2020-12-13 17:53:16 所属栏目:PHP教程 来源:网络整理
导读:Yii2有一个searchModel来搜索GridView中的每个字段.是否可以在GridView外部创建一个用户可以输入关键字的单个搜索字段,当搜索按钮被点击时,结果将根据输入的关键字显示在GridView中. CONTROLLER public function actionIndex(){ $session = Yii::$app-sessio
Yii2有一个searchModel来搜索GridView中的每个字段.是否可以在GridView外部创建一个用户可以输入关键字的单个搜索字段,当搜索按钮被点击时,结果将根据输入的关键字显示在GridView中.
CONTROLLER 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,]); } } 我在这里问了一个与这个问题相关的问题:Main Search Form in Yii2 它不是由于Kartik的Select2搜索下拉小部件中的一些复杂性.现在我暂时切换到简单的Yii2搜索字段. 视图 echo $form->field($model,'_id')->textInput(array('placeholder' => 'search'))->label(false); 模型 <?php namespace appmodels; use Yii; use yiibaseModel; use yiidataActiveDataProvider; use appmodelsUser; /** * UserSearch represents the model behind the search form about `appmodelsUser`. */ 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',$this->lname]) ->andFilterWhere(['like',$this->email]) ->andFilterWhere(['like',$this->username]) ->andFilterWhere(['like','user_type',$this->user_type]); return $dataProvider; } } 你对我如何实现单一搜索有任何想法吗?这是一种更智能的搜索,因为它可以根据输入的关键字搜索数据库表中的所有内容. 编辑 当我搜索一个关键字,例如’hello’时,它会在输入密钥后给我这个url和错误: 网址:
错误信息:
救命.
我有同样的问题,我的解决方案是:
模型 使用搜索参数扩展UserSearch模型 class UserSearch extends User { public $searchstring; ... 启用传递变量 public function rules() { return [ ... [['searchstring'],]; } 更改您的搜索方法(注意:搜索字段与orFilterWhere结合,取决于您的需求). $query->orFilterWhere(['like',$this->searchstring]) ->orFilterWhere(['like',$this->searchstring]); 查看(也可以是布局) 使用搜索输入扩展您的表单.您可以自己设置输入字段的样式,这只是一个示例: <?php /* @var $searchModel appmodelsUserSearch */ echo $form->field($searchModel,'searchstring',[ 'template' => '<div class="input-group">{input}<span class="input-group-btn">' . Html::submitButton('GO',['class' => 'btn btn-default']) . '</span></div>',])->textInput(['placeholder' => 'Search']); ?> 调节器 发布表单后,还要检查$searchstring的值. public function actionIndex() { ... $searchModel = new UserSearch(); $dataProvider = $searchModel->search(Yii::$app->request->queryParams); ... return $this->render('index',[ 'searchModel' => $searchModel,]); } 而已. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |