Yii2 REST在响应JSON时进行排序
当JSON格式为response时,数据的原始排序将丢失。当以XML响应时,将保存排序。如何使用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
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;