Игнорируется config (response format, custom error response)

Всё что касается построения API
Ответить
azz
Сообщения: 197
Зарегистрирован: 2016.07.06, 17:20

Игнорируется config (response format, custom error response)

Сообщение azz »

Для существующего проекта пишу restapi. По непонятной для меня причине, игнорируются параметры конфига, а именно:

Код: Выделить всё

		'response' => [
			'format' => yii\web\Response::FORMAT_JSON,						
и кастомная настройка ответа:

Код: Выделить всё

		'response' => [
......
			'on beforeSend' => function ($event) {
				$response = $event->sender;
				if ($response->data !== null && !empty(Yii::$app->request->get('suppress_response_code'))) {
					$response->data = [
						'success' => $response->isSuccessful,
						'data' => $response->data,
					];
					$response->statusCode = 200;
				}
			},
Явное задание 'format' => yii\web\Response::FORMAT_JSON мне нужно чисто для удобства отладки, т.к. браузер умеет форматировать json и красиво выводить его для просмотра. Т.е. не принципиально, но мне стало интересно, почему в конфиге не работает установка формата. В браузер упрямо выдавался XML (если запрашивать app/json то всё ок, естественно). JSON ответ выдаётся, только если прописать это явно в экшене контроллера. Победил, убрав XML в behaviors:

Код: Выделить всё

	public function behaviors() {
		$behaviors = parent::behaviors();
		unset($behaviors['contentNegotiator']['formats']['application/xml']);
		return $behaviors;
	}
но прописывать это в каждом контроллере некомильфо как-то...

Ну и собственно непонятно, почему не работает ['response']['on beforeSend']. Если сувать туда всякие вардампы, то видно что код срабатывает. Но в выдаче (тестирую 404) стандартный ответ

Код: Выделить всё

{"name":"Not Found","message":"Page not found.","code":0,"status":404,"type":"yii\\web\\NotFoundHttpException"}
мне собственно хотелось бы убрать оттуда type, как это можно сделать?
Ответить