比方说,我有以下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', ]; } }
在我的表只有两列, ResourceID
和Title
。
当我尝试GET
的API请求时,它工作正常,并返回(在的情况下,或单个资源的资源列表resource/{id}
与别名字段名)。 但是,当我尝试POST
创建资源,我想使用的别名字段名称(如title
,而不是ResourceTitle
)。 问题是,默认CreateAction
被Yii提供确实$model->load()
它会在表中的字段名。 如果我使用别名名称,然后返回一个错误。 如果我使用表的字段名,它工作正常。
所以我的问题是,有没有办法揭露资源属性,以其中的字段名(使用最终用户fields()
函数)是用于阅读和创建相同? 如果可能的话,我想,以避免写我自己的CreateAction。
您可以为别名创建getter / setter方法。
public function getTitle(){ return $this->ResourceTitle; }
public function setTitle($val){ $this->ResourceTitle = $val ; }
因此,有必要添加规则新的虚拟财产,如果你想$模型的负荷()保存参数给他们
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;
}
}