Ответ 1
Нет необходимости вручную устанавливать заголовок таким образом.
В конкретном действии/методе вы можете установить его так:
use Yii;
use yii\web\Response;
...
public function actionIndex()
{
Yii::$app->response->format = Response::FORMAT_JSON;
}
Затем после этого просто верните простой массив:
return ['param' => $value];
Вы можете найти это свойство в официальных документах здесь.
Для более чем одного действия с использованием специального фильтра ContentNegotiator
применяется более гибкий подход:
/**
* @inheritdoc
*/
public function behaviors()
{
return [
[
'class' => ContentNegotiator::className(),
'only' => ['index', 'view']
'formats' => [
'application/json' => Response::FORMAT_JSON,
],
],
];
}
Есть больше настроек, вы можете проверить его в официальных документах.
Что касается REST, базовый yii\rest\Controller уже установлен для json
и xml
:
'contentNegotiator' => [
'class' => ContentNegotiator::className(),
'formats' => [
'application/json' => Response::FORMAT_JSON,
'application/xml' => Response::FORMAT_XML,
],
],