yii2 - Yii2:Rest API 返回 xml 而不是 json
问题描述
我刚刚使用 Yii2 构建了一个应用程序作为 Flutter App 的后端
所以..我创建了一个模块/api文件夹,并在其中创建了控制器,就像这样
<?php
namespace app\modules\api\controllers;
use yii\web\Controller;
use yii\rest\ActiveController;
class AdController extends ActiveController
{
public $modelClass = 'app\models\Ad';
}
它工作正常,但它返回 XML
我在 web.php 中尝试过
'components' => [
'response' => [
'format' => \yii\web\Response::FORMAT_JSON,
],
],
和
'request' => [
'parsers' => [
'application/json' => 'yii\web\JsonParser',
]
],
但它仍然返回 XML
更新
当我使用
'urlManager' => [
....
'enableStrictParsing' => true,
...
]
它给了我Not Found (#404)
解决方案
首先创建一个基本控制器
并使用此配置覆盖行为方法
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键负责响应格式
推荐阅读
- javascript - 上传应用程序,检查特定字段/值 - 如何在代码中动态添加/删除要求并更改所需的文件格式?
- amazon-web-services - 从 Amazon AWS s3 存储桶错误获取 Html5:请求的资源上不存在“Access-Control-Allow-Origin”标头
- javascript - 如何检查来自事件源的数据是否相同
- mapbox - 找不到 fragment.jar (androidx.fragment:fragment:1.1.0)
- extjs - Sencha CMD - 如何从 Admin Dashboard 模板仅构建 MODERN 应用程序?
- groovy - groovy 脚本从文件中读取 jenkins 作业列表并更新其配置
- python - samtools - dyld:库未加载:@rpath/libcrypto.1.0.0.dylib
- reactjs - React Router Deep Link 与动态
- python - Python – hashlib.blake2b-256/512?
- python - 在python中将Discord用户设置为AFK