Это правильный пример использования промежуточного ПО , которое позволяет перехватывать некоторые функции до того, как запрос достигнет контроллера и ответ будет отправлен в браузер.
namespace App\Http\Middleware;
use Closure;
class CheckTarget
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if ($request->tracker <= "category") {
return redirect('name_of_your_route');
}
return $next($request);
}
}
После того, как вы должны зарегистрировать новое Middleware в пределах App\Http\Kernel
Класса, как этот
protected $routeMiddleware = [
\\...
'target' => auth' => \App\Http\Middleware\CheckTarget::class,
]
И для использования вы сделаете вот так
Route::any('{name}', function () {
return view('your_view_file_name');
})
->middleware('target');
->name('any_name_you_want');
Route::any('{name}', function () {
if (Request::get("tracker") == "category") {
Route::get('{name}', 'ProductsController@category'); // Here you define another route instead of redirect
}
});
В вашем В коде есть одна проблема, которая заключается в том, что вместо перенаправления пользователя на маршрут, который вы хотите, вы определяете другой Route
внутри другого дескриптора маршрута, который является необычным и должен быть избежать . Для перенаправления вы должны использовать redirect
помощник, который берет URL, на который Laravel будет перенаправлять