更改一个属性值yii2restapi
我使用更改一个属性值yii2restapi,rest,yii2,yii2-model,Rest,Yii2,Yii2 Model,我使用ActiveController在Yii2中创建了一个restapi。actionIndex的默认实现返回所有模型。 我想做的是在发送响应之前更改一个属性的值。 例如,我上传了一张图片,图片的名称存储在数据库中。 在发送响应之前,我希望嵌入带有图像名称的基本URL。 我是否需要覆盖整个索引方法,或者我可以在action方法中操作单个属性?我认为最简单的方法是覆盖模型中的fields()方法。假设您为名为YourFile的模型配置了ActiveController。如果将以下函数添加到You
ActiveController
在Yii2中创建了一个restapi。actionIndex
的默认实现返回所有模型。
我想做的是在发送响应之前更改一个属性的值。
例如,我上传了一张图片,图片的名称存储在数据库中。
在发送响应之前,我希望嵌入带有图像名称的基本URL。
我是否需要覆盖整个索引方法,或者我可以在
action
方法中操作单个属性?我认为最简单的方法是覆盖模型中的fields()
方法。假设您为名为YourFile
的模型配置了ActiveController。如果将以下函数添加到YourFile
模型,则可以为响应中的每个模型添加完整url:
public function fields() {
return [
'id',
'name' => function() {
return Url::base(true) . $this->name;
}
]
}
如果您这样添加它,这确实意味着在您的模型上调用
toArray()
的每一个代码都会得到这个结果。如果您只希望在ActiveController
上实现这一点,那么您可能希望扩展YourFile
模型,并仅在其中包含fields()
方法,这样您就可以用扩展版本配置ActiveController
。我认为最简单的方法是覆盖字段()
模型中的方法。假设您为名为YourFile
的模型配置了ActiveController。如果将以下函数添加到YourFile
模型,则可以为响应中的每个模型添加完整url:
public function fields() {
return [
'id',
'name' => function() {
return Url::base(true) . $this->name;
}
]
}
如果您这样添加它,这确实意味着在您的模型上调用
toArray()
的每一个代码都会得到这个结果。如果您只希望ActiveController
发生这种情况,您可能希望扩展YourFile
模型,并仅在其中包含fields()
方法,以便您可以使用扩展版本配置ActiveController
。我们还可以更改某些字段的显示名称:
class User extends \yii\db\ActiveRecord implements \yii\web\IdentityInterface {
/** * API safe fields */
public function fields() {
return [
'id',
'email_address' => 'email',
'first_name',
'last_name',
'full_name' => function($model) {
return $model->getFullName();
},
'updated_at',
'created_at'
];
}
}
请参见此处的完整教程:
我们还可以更改某些字段的显示名称:
class User extends \yii\db\ActiveRecord implements \yii\web\IdentityInterface {
/** * API safe fields */
public function fields() {
return [
'id',
'email_address' => 'email',
'first_name',
'last_name',
'full_name' => function($model) {
return $model->getFullName();
},
'updated_at',
'created_at'
];
}
}
请参见此处的完整教程:
覆盖操作是您案例中的解决方案,因为您要修改数据,也要在发送响应之前修改操作中的值。覆盖操作是您案例中的解决方案,因为您要在发送响应之前修改数据,也要修改操作中的值