Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Друзья, доброго времени суток. у меня возник вопрос, не могу разобраться как сделать правильно:
Создаю к примеру блог на Laravel создаю контроллеры модели.
Контроллеры рендерят вьюхи html, теперь я хочу создать api.
Но тут возникает проблема мне получается нужно дублировать контроллеры и складывать их в папку Controllers/Api?
так как мне сделать так, что бы я с помощью API мог запросить список постов юзера и получить результат в json
и из браузера и получить ответ в html бутстрапе?
Не в сети
Не в сети
Перечитайте пожалуйста вопрос мой... я говорю о том что получается что логика дублируется...
2 одинаковых контроллера выходит, один рендерит вьюху html а второй отдает json а если проект большой? мне придется все контроллеры копировать в папку Api?
Не в сети
можно просто проверять, как запрос пришёл. на \Request есть is_ajax() – проверяет заголовок X-Requested-With, который устанавливается jquery и рядом других библиотек (но в axios например это надо делать вручную) и wantsJson() – проверяет наличие application/json в заголовке Accept – если с jquery явно указывать тип "json" при запросе или использовать метод $.getJSON – он будет установлен тоже
таким образом в методе контроллера будет что-то типа
return $request->wantsJson() ? $posts : view('posts')->withPosts($posts);
Не в сети
Мне кажется это говнокодинг какой то получается )) Потому что основная концепция php oop заключается в DRY (Don’t repeat yourself)
а это получается что в каждом методе мы видим одну и ту же строчку... ну как то не айс
предложили еще такой вариант, в сервис провайдерах выносить логику основную
я думаю бородатые ребята знают более деликатное решение
Изменено ostap (01.08.2017 11:44:10)
Не в сети
а это получается что в каждом методе мы видим одну и ту же строчку... ну как то не айс
если одна и та же в каждом, тогда она рефакторится в отдельный метод и код снова красив.
на самом деле если выбираются одни и те же данные, отличается только формат ответа в зависимости от того аяксом запрос сделан или нет – нет особого смысла городить разные контроллеры. другое дело если есть отдельное апи для данных, отдельное для страниц – тогда да, конечно
Не в сети
Дело в том что я пишу приложение которое будет доступно из браузера через обычный рендеринг html. но так же планируется софт под Android + IOS приложение будет многофункциональное и объемное. я конечно понимаю что правильно бы вообще отделить бекнд от фронта полностью т.е.
бекенд апи Laravel, а фронт reactjs/angular + ios + android, но не хочу заморачиваться с реактом как быть?
Не в сети
Страницы 1