Laravel а React Native может работать отдельно? - PullRequest
1 голос
/ 18 марта 2020

У меня небольшая путаница в попытке понять, что происходит.

Позвольте мне объяснить, у меня есть веб-приложение, созданное с Laravel 6. Кроме того, я создаю мобильное приложение с использованием React Native отдельно Я хочу подключить приложение и получить данные веб-приложения.

У меня есть маршруты внутри моего веб-сайта. php файл Laravel. Дело в том, что я не знаю, нужно ли мне создавать новые маршруты внутри моего файла api. php, чтобы я мог подключить свое приложение React Native. Нужно ли использовать оба файла с одинаковыми маршрутами или как?

Это мой веб-сайт. php file:

Route::get('/', function () {
    return view('welcome');
});

Route::get('/storage', 'ProductController@index');
Route::get('/storage/{id}', 'ProductController@show');
Route::post('/product', 'ProductController@store');


Auth::routes();

Route::get('/home', 'HomeController@index')->name('home');

Нужно ли делать те же маршруты, но внутри? мой файл api. php, чтобы React Native мог подключиться к моему веб-приложению?

Заранее благодарен за помощь.

1 Ответ

1 голос
/ 19 марта 2020

Для вашего 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.

Я нашел несколько полезных статей здесь:

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...