2

我浏览了官方指南,找到了一种像这样封装 JSON 数据的方法。

use yii\rest\ActiveController;

class UserController extends ActiveController
{
    public $modelClass = 'app\models\User';
    public $serializer = [
        'class' => 'yii\rest\Serializer',
        'collectionEnvelope' => 'items',
    ];
}

当我有一个收藏然后我有这样的回应时,这很有效。

{
     products:....
}

但我想要做的是我有一个单一数据的信封。例如,如果我执行 products/10 GET 请求来获取。

{
    product:
}

希望有人想通了。

4

2 回答 2

1

\yii\rest\Serializer不支持单数据包络。至少在 Yii 2.0.6 之前,只有集合被封装以便添加_links_meta数据对象到响应中。

要封装单个数据资源对象,您需要在 Controller 中覆盖ActiveController的默认视图操作:

public function actions() 
{
    $actions = parent::actions();
    unset($actions['view']);
    return $actions;
}

public function actionView($id)
{
    $model = Product::findOne($id);
    return ['product' => $model];
}
于 2015-09-15T23:07:35.903 回答
0

旧的,但我刚刚遇到同样的问题。

并找到了一个更好的(我认为)解决方案:创建自己的序列化程序类,扩展 \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'
];
于 2017-04-04T21:16:12.490 回答