2015-07-17 3 views
1

Я создаю API, используя ZF2. Ответ сервера должен содержать только JSON. Это должен быть только JSON, если есть ошибка или 404 или 403, а в других случаях. Теперь, по умолчанию ZF2 является tryong для возврата HTML. Я использую ZendSkeletonApplicationКак изменить стратегию рендеринга по умолчанию на JSON в ZF2?

+0

Что вы пытаетесь до сих пор? И какой у вас код? – danopz

+0

Я использую приложение скелета zend. Я знаю, как вернуть JSON в контроллерах действий (вернуть новый JsonModel (...)). Я хочу, чтобы приложение всегда возвращало JSON. – Ildar

ответ

3

ZF2 вызывает ошибку by triggering specific events such as MvcEvent::EVENT_DISPATCH_ERROR or MvcEvent::EVENT_RENDER_ERROR, когда вызывается исключение.

Класс Zend\Mvc\View\Http\ExceptionStrategy присваивает несколько слушаний этим событиям, поэтому может быть сгенерирована страница ошибок HTML.

Чтобы вернуть сообщение об ошибке в формате JSON вы можете прикрепить свой собственный custom exception strategy, with a higher priority, and check if the response should be JSON

2

В вашем контроллере самый простой способ - вернуть экземпляр Zend\View\Model\JsonModel. Например:

$model = new JsonModel(array(
    'httpStatus' => 403, 
    'title' => 'Forbidden', 
    'message' => 'You are not authorized to access this page.' 
)); 
return $model; 
+0

Что делать, если на сервере есть какие-то исключения, или запрашиваемая страница не найдена. Можно ли в этом случае вернуть JSON? – Ildar

+0

Вам просто нужно поймать исключение после маршрутизации, но я не уверен, где это происходит - возможно, добавьте весь маршрут? – AlexMA

1

Если нет особых причин, вы выбрали приложение MVC скелета в качестве отправной точки, вы можете рассмотреть вопрос о переходе на https://apigility.org скелета. Это также приложение ZF, но оно построено как чистый json api.

Смежные вопросы