Лучший способ написать одинаковый код для обоих (веб и API) с разным типом ответа? - PullRequest
0 голосов
/ 26 января 2019

Я работаю над проектом Laravel, где мне нужно написать код для веб-приложения, а также API-интерфейсы с той же бизнес-логикой.

Поскольку в бизнес-логике нет различий, я думаю написать код в чертах, использовать его на разных контроллерах и отправить ответ в соответствии с заголовками запроса.Таким образом, один и тот же код будет использоваться как для веб-приложений, так и для мобильных приложений.

Используя черты, я могу писать разные маршруты и легко создавать разные контроллеры для веб-интерфейсов и API.

Например

In web.php
Route::get('users','UsersController@index');
In api.php
Route::get('users','Api\UsersController@index');

И затем, используя черту, я могу написать только одну функцию с именем index или любое другое имя, как показано ниже.На данный момент я проверяю, хочет ли запрос json, используя метод wantJson () класса Request.

public function index(Request $request){
     $users = User::all();

    if($request->wantsJson()){
       return response()->json(['users',$users]); 
    }
    return view('uses.index',compact('users'));
}

Есть ли лучший способ сделать это?

1 Ответ

0 голосов
/ 28 января 2019

Создайте службу и вставьте туда свой общий код и используйте его.

В вашем приложении Laravel просто перейдите в app/Services, затем создайте класс: [Something]Service.Добавьте метод [Some]() и вставьте свой код для создания новой сущности

public function index(Request $request)
{
     $users = User::all();

    if($request->wantsJson()){
       $users = response()->json(['users',$users]); 
    }
    return $users;
}

Теперь вы можете редактировать свой UsersController и внедрять свой сервис через конструктор, чтобы вы могли использовать его как свойство.

Наконец, ваш метод контроллера должен выглядеть следующим образом:

public function webControllerFunction(Request $request)
{
    $users = $this->[Something]Service->index($request);

    return view('uses.index',compact('users'));
}

public function apiControllerFunction(Request $request)
{
    return $this->[Something]Service->index($request);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...