Я просмотрел официальное руководство и нашел способ обернуть данные 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:
}
Надеюсь, кто-нибудь понял это.
Одиночный конверт данных не поддерживается \ Юй \ остальное \ Serializer. По крайней мере, до Yii 2.0.6 только коллекции обволакивают, чтобы добавить _links
а также _meta
объекты данных в ответ.
Чтобы обернуть отдельные объекты ресурса данных, вам нужно переопределить ActiveControllerпо умолчанию посмотреть действие в вашем контроллере:
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'
];