Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 30.07.2017 15:49:49

Laravel роуты web и api

Друзья, доброго времени суток. у меня возник вопрос, не могу разобраться как сделать правильно:
Создаю к примеру блог на Laravel создаю контроллеры модели.
Контроллеры рендерят вьюхи html, теперь я хочу создать api.

Но тут возникает проблема мне получается нужно дублировать контроллеры и складывать их в папку  Controllers/Api?
так как мне сделать так, что бы я с помощью API мог запросить список постов юзера и получить результат в json
и из браузера и получить ответ в html бутстрапе?

Не в сети

#2 30.07.2017 18:59:18

TrueKanonir
Откуда: Ташкент
Сообщений: 221

Re: Laravel роуты web и api

Ну так в чем проблема?
Создать контроллер BackendPostApiController положить его в папку Api, а в нем уже

PHP
// ...
return response()->json($posts);

Не в сети

#3 31.07.2017 09:18:09

Re: Laravel роуты web и api

Перечитайте пожалуйста вопрос мой... я говорю о том что получается что логика дублируется...
2 одинаковых контроллера выходит, один рендерит вьюху html а второй отдает json  а если проект большой? мне придется все контроллеры копировать в папку Api?

Не в сети

#4 01.08.2017 08:23:20

Re: Laravel роуты web и api

можно просто проверять, как запрос пришёл. на \Request есть is_ajax() – проверяет заголовок X-Requested-With, который устанавливается jquery и рядом других библиотек (но в axios например это надо делать вручную) и wantsJson() – проверяет наличие application/json в заголовке Accept – если с jquery явно указывать тип "json" при запросе или использовать метод $.getJSON – он будет установлен тоже

таким образом в методе контроллера будет что-то типа

return $request->wantsJson() ? $posts : view('posts')->withPosts($posts);

Не в сети

#5 01.08.2017 11:28:49

Re: Laravel роуты web и api

Мне кажется это говнокодинг какой то получается smile)) Потому что основная концепция php oop заключается в DRY (Don’t repeat yourself)
а это получается что в каждом методе мы видим одну и ту же строчку... ну как то не айс
предложили еще такой вариант, в сервис провайдерах выносить логику основную
я думаю бородатые ребята знают более деликатное решение

Изменено ostap (01.08.2017 11:44:10)

Не в сети

#6 01.08.2017 18:24:53

Re: Laravel роуты web и api

а это получается что в каждом методе мы видим одну и ту же строчку... ну как то не айс

если одна и та же в каждом, тогда она рефакторится в отдельный метод и код снова красив.

на самом деле если выбираются одни и те же данные, отличается только формат ответа в зависимости от того аяксом запрос сделан или нет – нет особого смысла городить разные контроллеры. другое дело если есть отдельное апи для данных, отдельное для страниц – тогда да, конечно

Не в сети

#7 01.08.2017 18:29:57

Re: Laravel роуты web и api

Дело в том что я пишу приложение которое будет доступно из браузера через обычный рендеринг html. но так же планируется софт под Android + IOS приложение будет многофункциональное и объемное. я конечно понимаю что правильно бы вообще отделить бекнд от фронта полностью т.е.

бекенд апи Laravel, а фронт reactjs/angular + ios + android, но не хочу заморачиваться с реактом smile как быть? tongue

Не в сети

Подвал раздела