Для вашего React Native App у вас обычно должен быть какой-то JSON API для извлечения данных.
Догадываясь по вашим маршрутам, вы возвращаете Laravel Представления с вашего контроллера. Если это так, вы не можете повторно использовать данные, используемые для представлений, не запутавшись.
Если вы не хотите разделять маршруты / контроллеры, вы можете определить, поступил ли запрос от мобильного приложения (например, с помощью токен в заголовке запроса) и после этого используйте другой ответ в ваших контроллерах в зависимости от того, откуда поступил запрос. Но это не масштабируемый подход, и контроллеры становятся неуправляемыми.
Я предлагаю иметь отдельные маршруты и контроллеры для вашего веб-приложения и мобильного приложения. И извлеките общие бизнес-логи c (например, запросы к БД, обработка данных) в классах Service и используйте их на обоих контроллерах.
Я работаю с подобным техническим стеком (Laravel MVC / React Native) на большой проект и до сих пор использование отдельных маршрутов и контроллеров - выбор solid.
Редактировать:
Вы можете использовать простой класс для службы. И укажите его c для какой-то функциональности. Простой пример службы.
class PostService {
//this method has common logic that
//is used by both API and WEB controllers
public function make($request) {
//validate the request
//create the post $post
//send emails, notifications, etc
return $post;
}
}
А ваш веб-контроллер может выглядеть так:
class PostController(Web) {
public function store(Request $request) {
//you can also store this in the constructor
$postService = new PostService();
$post = $postService->make($request);
return view('post.created')->with(['post' => $post]);
}
}
Ваш контроллер API может выглядеть так:
class PostController(API) {
public function store(Request $request) {
//you can also store this in the constructor
$postService = new PostService();
$post = $postService->make($request);
return response->json(['post' => $post], 200);
}
}
По сути, вы извлекаете некоторые общие функции в класс. Ваш код logi c будет в вашей службе (например, настраиваемая logi c, настраиваемая проверка, создание постов, электронная почта и уведомления), а контроллеры только перемещают данные из службы и моделируют их в виде ответа. (в данном случае view или json).
Для запросов и работы, связанной с моделью, вы также можете использовать шаблон репозитория в Laravel.
Я нашел несколько полезных статей здесь:
Надеюсь, это поможет!