Кастомный обработчик url в Laravel
На проекте, который я для себя разрабатываю встала необходимость реализовать роутинг на сайте на базе Laravel Framework таким образом, чтобы для каждой страницы сайта иметь возможность выбирать необходимый шаблон, а также контроллер, формирующий данный для этой страницы.
То есть в базе должна быть таблица типа такой:
CREATE TABLE `urls` ( `id` int(11) NOT NULL, `url` varchar(255) NOT NULL, `template` varchar(255) NOT NULL, `controller` varchar(255) NOT NULL, `action` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=UTF8;
Где template
- это соответственно шаблон, а controller
и action
это соответственно контроллер и action, которые должны обрабатывать соответствующий url
Обработку можно сделать сделать следующими способами например:
-
https://laravel.com/docs/8.x/routing#parameters-encoded-forward-slashes
Кодированные прямые слэши(Encoded Forward Slashes)
Компонент маршрутизации Laravel допускает использование всех символов, кроме /. Вы должны явно разрешить / быть частью вашего плейсхолдера, используя регулярное выражение условия с оператором where:
Route::get('{url}', function ($url) { return $url; })->where('url', '.*');
Кодированные прямые слэши поддерживаются только в пределах последнего сегмента маршрута.
-
https://laravel.com/docs/8.x/routing#fallback-routes
Резервные маршруты(Fallback Routes)
Используя метод
Route::fallback
, вы можете определить маршрут, который будет выполняться, когда ни один другой маршрут не соответствует входящему запросу. Как правило, необработанные запросы автоматически отображают страницу «404» через обработчик исключений вашего приложения. Однако, поскольку вы можете определить резервный маршрут в файлеroutes/web.php
, всеmiddleware
в группеmiddleware
будут применяться к этому маршруту. При необходимости вы можете добавить дополнительныеmiddleware
к этому маршруту:Route::fallback(function (Request $request) { return $request->decodedPath(); });