Yii2 REST在响应JSON时进行排序

Yii2 REST在响应JSON时进行排序,json,sorting,yii2,response,Json,Sorting,Yii2,Response,当JSON格式为response时,数据的原始排序将丢失。当以XML响应时,将保存排序。如何使用JSON保留原始排序 我的控制器: use yii\rest\ActiveController; class DomainController extends ActiveController { ... public function behaviors() { $behaviors = parent::behaviors(); $behavior

当JSON格式为response时,数据的原始排序将丢失。当以XML响应时,将保存排序。如何使用JSON保留原始排序

我的控制器:

use yii\rest\ActiveController;

class  DomainController extends ActiveController
{
    ...
    public function behaviors()
    {
      $behaviors = parent::behaviors();
      $behaviors['corsFilter' ] = [
          'class' => \yii\filters\Cors::className(),
      ];

      $behaviors['contentNegotiator'] = [
        'class' => \yii\filters\ContentNegotiator::className(),
        'formats' => [
            'application/json' => \yii\web\Response::FORMAT_JSON,
        ],
      ];

      return $behaviors;
    }
public function actionIndex()
{
    $domains =  Domain::find()
        ->leftJoin('WEB_DOMAIN_PRIORITY', 'WEB_DOMAIN_PRIORITY.id = WEB_DOMAIN.priority_id')
        ->orderBy(['priority' => SORT_DESC])->all();

    $test = [];

    foreach ($domains as $domain) {
        $test[$domain->id] = $domain->title;
    }
    //echo "<pre>"; print_r($test);die;  < -- its ok. right sort
    //return $test;                      < -- its wrong. sort is changed
}
和控制器中的操作:

use yii\rest\ActiveController;

class  DomainController extends ActiveController
{
    ...
    public function behaviors()
    {
      $behaviors = parent::behaviors();
      $behaviors['corsFilter' ] = [
          'class' => \yii\filters\Cors::className(),
      ];

      $behaviors['contentNegotiator'] = [
        'class' => \yii\filters\ContentNegotiator::className(),
        'formats' => [
            'application/json' => \yii\web\Response::FORMAT_JSON,
        ],
      ];

      return $behaviors;
    }
public function actionIndex()
{
    $domains =  Domain::find()
        ->leftJoin('WEB_DOMAIN_PRIORITY', 'WEB_DOMAIN_PRIORITY.id = WEB_DOMAIN.priority_id')
        ->orderBy(['priority' => SORT_DESC])->all();

    $test = [];

    foreach ($domains as $domain) {
        $test[$domain->id] = $domain->title;
    }
    //echo "<pre>"; print_r($test);die;  < -- its ok. right sort
    //return $test;                      < -- its wrong. sort is changed
}
致:

我有正确排序的xml响应

只有JSON响应按数组键对我的数组进行排序。

此处

您正在添加新的数组键。这可能会根据rest/序列化程序更改顺序

您可以将preserveKeys应用于序列化程序,如下$preserveKeys detail所示
或者不要改变钥匙的顺序。

@Fabrizio Caldarelli不完全是这样。在这一刻,响应准备并用于格式化数据

$test[$domain->id] = $domain->title;