Php Yi2在JSON响应中封装单个数据
我阅读了官方指南,找到了一种封装JSON数据的方法,如下所示Php Yi2在JSON响应中封装单个数据,php,json,rest,yii2,envelope,Php,Json,Rest,Yii2,Envelope,我阅读了官方指南,找到了一种封装JSON数据的方法,如下所示 use yii\rest\ActiveController; class UserController extends ActiveController { public $modelClass = 'app\models\User'; public $serializer = [ 'class' => 'yii\rest\Serializer', 'collectionEnve
use yii\rest\ActiveController;
class UserController extends ActiveController
{
public $modelClass = 'app\models\User';
public $serializer = [
'class' => 'yii\rest\Serializer',
'collectionEnvelope' => 'items',
];
}
{
products:....
}
当我有一个收藏,然后我有一个这样的回应时,这是完美的
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 2.0.6之前,只有集合才会被封装,以便将
\u链接
和\u元
数据对象添加到响应中
要封装单个数据资源对象,您需要覆盖控制器中的ActiveController默认的查看操作:
public function actions()
{
$actions=parent::actions();
未设置($actions['view']);
返回$actions;
}
公共函数actionView($id)
{
$model=Product::findOne($id);
返回['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'
];