Yii2:休息 API return xml 而不是 json
Yii2 : Rest API return xml instead of json
我刚刚使用 Yii2 构建了一个应用程序作为 Flutter 应用程序的后端
所以 .. 我创建了一个 modules/api 文件夹并在其中创建了控制器,就像这样
<?php
namespace app\modules\api\controllers;
use yii\web\Controller;
use yii\rest\ActiveController;
class AdController extends ActiveController
{
public $modelClass = 'app\models\Ad';
}
它工作正常但是它 return XML
我试过 web.php
'components' => [
'response' => [
'format' => \yii\web\Response::FORMAT_JSON,
],
],
和
'request' => [
'parsers' => [
'application/json' => 'yii\web\JsonParser',
]
],
但它仍然returnXML
更新
当我使用
'urlManager' => [
....
'enableStrictParsing' => true,
...
]
它给我 未找到 (#404)
您可以尝试在控制器操作中输入:
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON
例如:
public function actionAd()
{
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
// return response
}
但是您应该为 serialize
添加 class
class AdController extends ActiveController
{
public $modelClass = 'app\models\Ad';
public $serializer = [
'class' => 'yii\rest\Serializer',
'collectionEnvelope' => 'items',
];
}
首先创建一个基础控制器
并使用此配置覆盖行为方法
namespace micro\controllers;
class ActiveController extends yii\rest\ActiveController {
public function behaviors() {
$behaviors = parent::behaviors();
$behaviors['contentNegotiator'] = [
'class' => 'yii\filters\ContentNegotiator',
'formats' => [
'application/json' => \yii\web\Response::FORMAT_JSON,
]
];
return $behaviors;
}
}
而不是在你所有的项目控制器中扩展它
contentNegotiator 键负责响应格式
我刚刚使用 Yii2 构建了一个应用程序作为 Flutter 应用程序的后端
所以 .. 我创建了一个 modules/api 文件夹并在其中创建了控制器,就像这样
<?php
namespace app\modules\api\controllers;
use yii\web\Controller;
use yii\rest\ActiveController;
class AdController extends ActiveController
{
public $modelClass = 'app\models\Ad';
}
它工作正常但是它 return XML
我试过 web.php
'components' => [
'response' => [
'format' => \yii\web\Response::FORMAT_JSON,
],
],
和
'request' => [
'parsers' => [
'application/json' => 'yii\web\JsonParser',
]
],
但它仍然returnXML
更新
当我使用
'urlManager' => [
....
'enableStrictParsing' => true,
...
]
它给我 未找到 (#404)
您可以尝试在控制器操作中输入:
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON
例如:
public function actionAd()
{
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
// return response
}
但是您应该为 serialize
class AdController extends ActiveController
{
public $modelClass = 'app\models\Ad';
public $serializer = [
'class' => 'yii\rest\Serializer',
'collectionEnvelope' => 'items',
];
}
首先创建一个基础控制器
并使用此配置覆盖行为方法
namespace micro\controllers;
class ActiveController extends yii\rest\ActiveController {
public function behaviors() {
$behaviors = parent::behaviors();
$behaviors['contentNegotiator'] = [
'class' => 'yii\filters\ContentNegotiator',
'formats' => [
'application/json' => \yii\web\Response::FORMAT_JSON,
]
];
return $behaviors;
}
}
而不是在你所有的项目控制器中扩展它
contentNegotiator 键负责响应格式