Как правильно организовать на PHP роутинг: проверка URL на соответствие одному из правил?

Есть проект, сделанный по шаблону MVC.
Схема вкратце следующая: поступает URL от пользователя, этот URL через explode разбивается на массив, который содержит "сегменты" этого урла (сегментом в данном случае называю часть урла, отделенную слешем). Имея этот массив, программа должна определить какой контроллер (и действие) вызывать. В простейшем случае адрес состоит из двух сегментов, где первый - это название контроллера, а второй - название действия. Но требуется сделать, чтобы к урлам могли применяться различные правила маршрутизации.
Например, mysite.ru/portfolio/view - простейший случай, о котором писал выше, где portfolio - это название контроллера, а view - действиe.
Но есть некоторые исключительные случаи, которые подчиняются особым правилам, например:
mysite.ru/portfolio/view/test - должен вызываться контроллер portfolio, и действие test, т.е. немного не стандартное правило.
Или, к примеру, на сайте есть набор статичных страниц, контент для которых берется из базы, к примеру страницы:
mysite.ru/about
mysite.ru/contact
и т.д. - для всех для них вызывается контроллер content и действие view.
Для этого создаю набор правил, массив, каждая строка, которого содержит правило, на соответствие которому проверяется урл и название контроллера с действием, которые запускаются в случае соответствия урла правилу. Циклически перебираю все правила, урл из каждого правила также разбиваю на сегменты, проверяю равно ли количество сегментов из урла пользователя количеству сегментов из правила, если не равно, то переходим к следующему правилу, если равно, то проверяем соответствие сегментов. И если есть полное соответствие, то правило применяется.
Более вдаваться в подробности не буду, скажу лишь, что мне не нравится мой алгоритм (точнее то как я его реализовал), не перестает преследовать чувство что изобретаю велосипед. Вот и хотел спросить не поможет ли кто готовой реализаций такого вот "url менеджера"? Где есть механизм проверки урла на соответствие правилам.
  • Вопрос задан
  • 2851 просмотр
Решения вопроса 2
pavel_salauyou
@pavel_salauyou
Symfony2 & Angular разработчик
Комментировать
GM2mars
@GM2mars
Вот на гите есть библиотека для php по роутингу
FastRoute
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы