限时 5折! 详情
为什么我的modelsearch要这样才可以用?
4 63 2017-09-19

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); 不传参数返回所有数据 ,传参数才能根据过滤条件返回数据 .哪错了?告诉 我,我一定改!!!

  • 4 个回答
  • 木有觉得哪里有问题呀,感觉你的php基础不行。。。不要气馁,抽时间多补补吧

  • $user_search = new UserSearch($a); 实例化这个类的时候需要传参? 我看资料里都不传的,而我的不传参下面就执行不了,这是为什么?

  • 我给你解释一下
    首先实例化UserSearch类传递的参数 $a,这个参数会被UserSearch的构造函数拿到,UserSearch的构造函数,可以追溯到 yii\base\Object 类的 construct 方法,这个方法拿到构造参数后,会调用 yii\BaseYii::configure 方法处理,即给UserSearch的属性赋值,如果参数的键值不存在,则会调用 yii\base\Component::__set 方法进行处理,以上,便是这个逻辑。

    推荐阅读 《yii2源码分析》

  • 你说的这个我理解,我不理解的是:

    1. 正常用法$data['items'] = $user_search->Search($a); 在这个位置传参即可,为什么$user_search = new UserSearch($a); 这个地方也需要传参数.
    2. $data['items'] = $user_search->Search($a);如果不传参数就会报错. 可以是我上面代码描述的不够清楚,实际上$a是我模拟的Yii::$app->request->queryParams获取到的数据,我重写一篇这个问题

登录 去赚佣金