@vostotskiy

Как на каждый CRUD метод в контроллере Laravel вернуть json или view с нужными данными?

Здравствуйте. Реализую restful контроллер для работы с некоторой сущностью, а именно методы post, get, put, patch,delete, и соответственно вспомогательные для вывода форм: show,edit.
Хотел сделать так, чтобы каждый метод возвращал в зависимости от заголовка "accept" требуемое view с данными или json(если заголовок равняется "application/json") для REST API запросов.
Для этого сделал middleware, где с помощью метода
$request->wantsJson()
проверяется, наличие соотв. заголовка, и если он есть, то из объекта view вытягиваются переменные и кодируются в json, который отдается клиенту.
Но в моем подходе есть недостаток, когда например после того, как произошло удаление, хотелось бы отправить сообщение и код 204 в случае REST API.
Но для view по идее нужно делать редирект на главную страницу, и 204 поменять на 302 не получается.
Подскажите, пожалуйста, как организовать контроллер таким образом, чтобы он и отдавал json с нужным статусом и отдавал view или же делал редирект после обновления, удаления, добавления.
ps. Возможно, нужно инжектить response в методы контроллера и проверять в каждом отдельно взятом екшне тип заголовка, и в зависимости от них уже делать редирект или возвращать json с нужным кодом?
psps. Возможно это неправильно, но я бы сделал отдельный контроллер для API, а отдельный для "браузерной" работы. но именно так поставлена задача надо мной.
Заранее спасибо.
  • Вопрос задан
  • 322 просмотра
Пригласить эксперта
Ответы на вопрос 1
@artemmityushov
В данном подходе будет много частных случаев, поэтому универсальная утка не подойдет, лучше в каждом методе проверяйте и возвращайте что нужно.
Мы тоже раньше хотели сделать универсально, но в течении жизни проекта все менялось так что универсальность стала ахиллесовой пятой.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы