Задать вопрос
@lotrop

Как правильно парсить чпу на php?

Вот, например, есть самописный сайт с mvc структурой.
Обычно я делал так: mysite.ru/catalog/group/id/1201/color/red что означало контроллер catalog, экшн group и параметры id = 1201 и color = red. То есть в каталоге искались все товары категории 1201 с красным цветом.
Такое легко распарсить.

А как ,например, парсить такое mysite/catalog/smartphone/yotaphone/yotaphone2-exclusive
Для своего бы вариант я бы сделал mysite/catalog/view/product/12322
А если парсить такой урл mysite/catalog/smartphone/yotaphone/yotaphone2-exclusive
То, получается нужно постоянно обращаться к базе данных.
Как правильно здесь поступать?
  • Вопрос задан
  • 455 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 3
glebovgin
@glebovgin
Full Stack Web Developer
Автор имеет ввиду, что есть вариант, при котором урл с указанными контроллером и экшеном не делает обращений к базе. Пример: отобразить статическую вьюху какой-нибудь страницы с формой обратной связи. Такое бывает.
Отвечая на вопрос: можно было бы пойти таким способом – класс роутера "смотрит" по классической схеме (контроллер и все внутренности), если ничего этого нет - то "идет" в базу, где находит урл и пытается понять что с ним делать. Это упрощенное описание.
Есть правда и вариант Битрикса, где урлы соотносятся с файловой структурой.
Ответ написан
Комментировать
Вы поняли все верно, красивые названия нужны чаще всего по требованию заказчика, для себя же хватит и вашего вида - mysite/catalog/view/product/12322, к тому же не придется обращаться к базе данных, т.к. массив с роутами будет хранится в одном файле.
Ну а если же вам нужны прям красивые ссылки - mysite/catalog/smartphone/yotaphone/yotaphone2-exclusive - то хранить в бд и получать, но в этом ничего плохого нет, к базе на любом сайте происходит обращение и если проект не предназначен для высоких нагрузок - то вы и не заметите по времени выполнение запроса на получение урлы.
Ответ написан
Комментировать
@entermix
А если парсить такой урл mysite/catalog/smartphone/yotaphone/yotaphone2-exclusive
То, получается нужно постоянно обращаться к базе данных.

Верно
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы