Laravel Условия маршрута - PullRequest
0 голосов
/ 08 мая 2020

У меня есть модель страны, а также тег и категория. И URL-адреса для них не содержат префикса или идентификаторов

Mysite.org / spain <- это страна </p>

Mysite / policy <- это категория </p>

Mysite / Population <- это тег </p>

Как поочередно проверять эти URL?

Я пытаюсь использовать промежуточное ПО

Route::get(‘/{slug}’, ‘CountryController@show’)->middleware(‘CheckCountryPath’)
Route::get(‘/{slug}’, ‘CategoryController@show’)->middleware(‘CheckCategoryPath’)
Route::get(‘/{slug}’, ‘TagController@show’)->middleware(‘CheckTagPath’)

в промежуточном программном обеспечении

public function handle($request, Closure $next)
    {

        // Contru checking logick
        // if country model has this slug

        return $next($request);

        // else continue

    }

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

1 Ответ

1 голос
/ 08 мая 2020

Вам нужно поместить свой маршрут в конец вашего web.php файла.

Вам необходимо обработать ваш слаг в одном Middlware, которое будет перенаправлять на соответствующий контроллер:

class ChangeControllerMiddleware {

    public function handle($request, Closure $next) {

        $route = $request->route();

        if($country) // Country Check Logic
            $controller = '\App\Http\Controllers\CountryController@show';

        // If not Country Category Logic ...
        elseif($category)
            $controller = '\App\Http\Controllers\CategoryController@show';

        // else 404
        else
           abort(404);

        $routeAction = array_merge($route->getAction(), [
            'uses'       => $controller,
            'controller' => $controller,
        ]);

        $route->setAction($routeAction);
        $route->controller = false;

        return $next($request);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...