2018-05-30 14:36:57 440次浏览 2条回答 0 悬赏 10 金钱

我现在做了一个前端接口,直接通过

$dataProvider = $searchModel->search($data);
$list = $dataProvider->getModels();

这样的方式获取的数据,但是直接返回前端的时候是包含表中所有字段的,有些还是敏感字段,有什么方法可以控制输出的字段吗? 不自己循环返回值。

最佳答案

  • sexushuai 发布于 2018-05-31 17:33
    $searchModel = new UnitSearch();
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
    echo '<pre>';
    print_r($dataProvider->getModels());
    
    Array
    (
        [0] => app\modules\unit\models\Unit Object
            (
                [_attributes:yii\db\BaseActiveRecord:private] => Array
                    (
                        [id] => 1
                    )
    
                [_oldAttributes:yii\db\BaseActiveRecord:private] => Array
                    (
                        [id] => 1
                    )
    
                [_related:yii\db\BaseActiveRecord:private] => Array
                    (
                    )
    

    $query->select(['id']); 如果这个设置 就是显示这个字段

  • 回答于 2018-05-30 16:53

    fields方法控制输入字段

    4 条回复
    回复于 2018-05-30 17:05

    query的select fields字段吗?我这边也试了一下,还是会输出所有字段,只是没有select出来的字段值是null,是希望能够在返回的时候直接这个字段名称前端都看不到会好点

    回复于 2018-05-31 19:33

    直接给你贴代码吧

    回复于 2018-05-31 19:36

    public function fields()
    {
        $fields = [
            'seek_id',
            'create_user_id',
            'sos_type_id',
            'status_id',
            'comment_times',
            'transfer_times',
            'view_times',
            'content',
            'title',
            'pet_name',
            'pet_imgs',
            'lose_pick_area',
            'pet_category',
            'contact_phone',
            'contact_name',
            'lose_pick_time',
            'sos_lng',
            'sos_lat',
        ];
        $fields['lose_pick_time2']=function($model)
        {
            if(empty($model->lose_pick_time)) {
                return null;
            }
            return $this->_timeProvider($model->lose_pick_time);
        };
    }
    /*
     * 初始化
     */
    public function init(){
        parent::init();
        $this->_query = self::find();
    }
    
    回复于 2018-06-09 09:07

    fields方法控制输出字段有条件的,就是响应格式,你参考restfull api 里面的yii\rest\Serializer

    当RESTful API响应中包含一个资源时,该资源需要序列化成一个字符串。 Yii将这个过程分成两步,首先,资源会被yii\rest\Serializer转换成数组 这才是关键

您需要登录后才可以回答。登录 | 立即注册
wmwmajie
试用期

wmwmajie

注册时间:2018-05-30
最后登录:2018-10-15
在线时长:1小时22分
粉丝0
金钱25
威望0
积分35

热门问题