我浏览了官方指南,找到了一种像这样封装JSON数据的方法。
use yii'rest'ActiveController;
class UserController extends ActiveController
{
public $modelClass = 'app'models'User';
public $serializer = [
'class' => 'yii'rest'Serializer',
'collectionEnvelope' => 'items',
];
}
当我有一个集合然后我有这样的回应时,这很完美。
{
products:....
}
但我想做的是我有一个用于单个数据的信封。例如,如果我做产品/10 GET请求获取。
{
product:
}
希望有人想通了。
''yii''rest''Serializer 不支持单个数据信封。至少在 Yii 2.0.6 之前,只有集合被封装,以便向响应中添加_links
和_meta
数据对象。
要包络单个数据资源对象,您需要在控制器中覆盖活动控制器的默认视图操作:
public function actions()
{
$actions = parent::actions();
unset($actions['view']);
return $actions;
}
public function actionView($id)
{
$model = Product::findOne($id);
return ['product' => $model];
}
老了,但我刚刚在这里遇到了同样的问题。
并找到了一个更好的(我认为)解决方案:创建自己的序列化程序类扩展''yii''rest''Serializer:
class Serializer extends 'yii'rest'Serializer
{
public $itemEnvelope;
public function serializeModel($model)
{
$data = parent::serializeModel($model);
if($this->itemEnvelope)return [$this->itemEnvelope=>$data];
return $data;
}
}
然后像这样使用它:
public $serializer = [
'class' => '[your-namespace]'Serializer',
'collectionEnvelope' => 'list',
'itemEnvelope' => 'item'
];