Controller:
public function actionSearch()
{
$a['name'] ='H';
$a['sex'] ='M';
$a['id'] = '';
$user_search = new UserSearch($a);
return $data['items'] = $user_search->Search(Yii::$app->request->queryParams);
}
ModelSearch:
public function search($params)
{
$query = User::find();
// add conditions that should always apply here
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
$this->load($params);
if (!$this->validate()) {
// uncomment the following line if you do not want to return any records when validation fails
// $query->where('0=1');
return $dataProvider;
}
// grid filtering conditions
$query->andFilterWhere([
'id' => $this->id,
'birth' => $this->birth,
]);
$query->andFilterWhere(['like', 'name', $this->name])
->andFilterWhere(['like', 'sex', $this->sex]);
return $dataProvider;
}
问题表现 : $user_search = new UserSearch($a); 不传参数返回所有数据 ,传参数才能根据过滤条件返回数据 .哪错了?告诉 我,我一定改!!!
木有觉得哪里有问题呀,感觉你的php基础不行。。。不要气馁,抽时间多补补吧
$user_search = new UserSearch($a); 实例化这个类的时候需要传参? 我看资料里都不传的,而我的不传参下面就执行不了,这是为什么?
我给你解释一下
首先实例化UserSearch类传递的参数 $a,这个参数会被UserSearch的构造函数拿到,UserSearch的构造函数,可以追溯到 yii\base\Object 类的 construct 方法,这个方法拿到构造参数后,会调用 yii\BaseYii::configure 方法处理,即给UserSearch的属性赋值,如果参数的键值不存在,则会调用 yii\base\Component::__set 方法进行处理,以上,便是这个逻辑。
推荐阅读 《yii2源码分析》
你说的这个我理解,我不理解的是: