Yii2 REST创建带有字段()(Yii2 REST create with fields())

2019-10-24 06:22发布

比方说,我有以下API设置:

控制器:

<?php
namespace app\modules\v1\controllers;

use yii;

class ResourceController extends \yii\rest\ActiveController
{
    public $modelClass = 'app\modules\v1\models\Resource';
}

模型:

 use yii; class Resource extends \yii\db\ActiveRecord { public static function tableName() { return 'ResourceTable'; } public function fields() { return [ 'id' => 'ResourceID', 'title' => 'ResourceTitle', ]; } } 

在我的表只有两列, ResourceIDTitle

当我尝试GET的API请求时,它工作正常,并返回(在的情况下,或单个资源的资源列表resource/{id}与别名字段名)。 但是,当我尝试POST创建资源,我想使用的别名字段名称(如title ,而不是ResourceTitle )。 问题是,默认CreateAction被Yii提供确实$model->load()它会在表中的字段名。 如果我使用别名名称,然后返回一个错误。 如果我使用表的字段名,它工作正常。

所以我的问题是,有没有办法揭露资源属性,以其中的字段名(使用最终用户fields()函数)是用于阅读和创建相同? 如果可能的话,我想,以避免写我自己的CreateAction。

Answer 1:

您可以为别名创建getter / setter方法。

public function getTitle(){ return $this->ResourceTitle; }
public function setTitle($val){ $this->ResourceTitle = $val ; }


Answer 2:

因此,有必要添加规则新的虚拟财产,如果你想$模型的负荷()保存参数给他们

class OrganizationBranch extends BaseOrganization{

public function rules()
    {
        return array_replace_recursive(parent::rules(),
        [
            [['organizationId', 'cityId'], 'safe'],
        ]);
    }

    public function fields() {
        return ['id', 
                'cityId' => 'city_id',
                'organizationId' => 'organization_id', 
                'address', 
                'phoneNumbers' => 'phone_numbers', 
                'schedule', 
                'latitude',         
                'longitude',
        ];
    }

    public function extraFields() {
        return ['branchType', 'city'];
    }

    public function getOrganizationId() {
        return $this->organization_id;
    }

    public function setOrganizationId($val) {
        $this->organization_id = $val;
    }

    public function getCityId() {
        return $this->city_id;
    }

    public function setCityId($val) {
        $this->city_id = $val;
    }

}


文章来源: Yii2 REST create with fields()
标签: api rest yii2