我正在创建restful apis,并且有一个函数可以像这样在yii1中发送响应数据

public function sendResponse($data)
{
    header('Content-Type: application/json; charset=utf-8');
    echo CJSON::encode($data);
    exit;
}


CJSONYii2中不可用,所以我如何在Yii2中进行操作

最佳答案

无需像这样手动设置标头。

在特定的操作/方法中,您可以这样设置:

use Yii;
use yii\web\Response;

...

public function actionIndex()
{
    Yii::$app->response->format = Response::FORMAT_JSON;
}


然后在那之后返回一个简单的数组,像这样:

return ['param' => $value];


您可以在官方文档here中找到此属性。

对于多个动作,使用特殊的ContentNegotiator过滤器是更灵活的方法:

/**
 * @inheritdoc
 */
public function behaviors()
{
    return [
        [
            'class' => ContentNegotiator::className(),
            'only' => ['index', 'view']
            'formats' => [
                'application/json' => Response::FORMAT_JSON,
            ],
        ],
    ];
}


还有更多设置,您可以在official docs中进行检查。

至于REST,基本yii\rest\Controller已经为jsonxml设置了它:

'contentNegotiator' => [
    'class' => ContentNegotiator::className(),
    'formats' => [
        'application/json' => Response::FORMAT_JSON,
        'application/xml' => Response::FORMAT_XML,
    ],
],

07-26 02:08