Редирект на view('welcome'), если запрос http в laravel
Друзья, такой вопрос. Я использую reactJs на frontend и laravel на beckend. Стоит задача разграничения ajax и http запросов. Вот этот код решает задачу (метод контроллера):
public function index(Request $request)
{
if($request->ajax()){
$snippet = Snippet::all();
return Response()->json($snippet);
} else {
return view('welcome');
}
}
но мне хочется более красивый вариант с точки зрения архитектуры, т.к. не комильфо писать в каждом экшене контроллера условные конструкции. Хотелось бы один раз проверить что $request это http и перенаправить пользователя на view('welcome'). Искал решение чтобы выполнить такую проверку в файле routes/web.php перед объявлением всех роутов, но ничего не получилось. Если не перенаправлять пользователя на 'welcome', где находятся входные скрипты reactJs, то пользователь получает голый json.
Ответы (1 шт):
В качестве решения Вашей проблемы предлагаю использовать middleware. Но подключать шаблон если не корректный запрос, не совсем верно, нужно делать именно редирект (который Вы так и называете). Создайте страницу ошибки или страницу welcome и делайте редирект туда. Например:
<?php
namespace App\Http\Middleware;
use Closure;
class CheckRequest
{
public function handle($request, Closure $next)
{
if (!$request->ajax()) return redirect('welcome');
return $next($request);
}
}
Далее регистрируете данный middleware в конфиге и делаете так:
Route::middleware('check.request')->group(function () {
//Все запросы которые должны выполняться по ajax
});
UPD если Вы пытаетесь достичь SPA приложения, то все запросы должен обрабатывать один контроллер который возвращает Вашу welcome страницу.
Маршрут должен быть таким:
Route::get('/{any?}', 'MyController@index')->where('any','.*');
Все запросы идут на 1 контроллер и далее в нем делаете так:
...index(Request $request) {
return view('welcome');
}
И далее у вас должен Быть подключен router который уже смотрит на url и подключает тот компонент который соответствует шаблону!
и там в методе componentDidMount Вы грузите Ваши ajax. В результате проверки на бэке не нужны!