Объясните про роутинг в MVC

Namistai

Новичок
Здравствуйте.

Каким образом мне сделать у контроллера вызов дефолтного метода при наличии параметров?

Вот например url для отображения статьи, это как на данный момент у меня сделано:

http://somedomain.ru/articles/show/articlename/statiya_o_vrede_kureniya

articles - это контроллер
show - экшен
articlename - параметр
statiya_o_vrede_kureniya - значение параметра


Как люди так делают?

http://somedomain.ru/articles/statiya_o_vrede_kureniya


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

Каким образом можно сделать укороченый url?
 

vvs_rostov

Новичок
Добавить функционал для работы с синонимами url.

Т.е. непосредственно перед разбором url, должен проходить поиск по соответствующей таблице alias'ов.После чего, получать более длинный, но понятный для роутера url.

Обычно работу с синонимами дополняют возможностью автоматического создания синонима по шаблону.

В вашем случае, например, при создании статьи, дополнять возможность доступа к ней по адресу вида /articles/ЗАГОЛОВОК_в_ТРАНСЛИТЕ.html
 

AmdY

Пью пиво
Команда форума
Namistai
сначала ты должен понять что роутинг и mvc это две разные вещи. роутинг определяет маршрут для выполнение скрипта, а mvc как раз описывает сам процесч выполенния.

в твоей задаче нужно реврайтить урл и приводить его к твоему стандартному <контроллер>/<экшин>/<параметры> а затем твой маршрутизатор уже работает с ним.
аэто можно делать средствами сервера или языка программирования перед маршрутизацией. тебе нужно посмотреть стандартные реализации
http://framework.zend.com/manual/1.12/en/zend.controller.router.html
http://symfony.com/doc/2.0/book/routing.html
http://kohanaframework.org/3.0/guide/kohana/routing
 

Фанат

oncle terrible
Команда форума
Достаточно в роутере иметь список всех экшенов всех контроллеров.
Тогда роутер просто пробивает второй параметр по списку, видит, что такого экшена нету, и вызывает дефолтный.
 

SiZE

Новичок
А кто-то меняет правила обработки урл из контроллера? =)
 

Фанат

oncle terrible
Команда форума
Ну-ну. потом расскажешь, как получилось.
Особенно как ты нормализуешь пришедший урл перед проверкой.

И сколько всего записей получилось в такой таблице.
 

vvs_rostov

Новичок
Думаю, у автора все будет в порядке.

Подобное решение используется в Drupal 6 (возможно и в других версиях) - http://api.drupal.ru/api/file/includes/path.inc.

С более упрощенной реализацией сталкивался в небольших корпоративных CMS, когда алиасы задавались непосредственно при работе с объектом (страницей, статьей, новостью и т.п).
 

Namistai

Новичок
Фанат

У меня в роутере естественно проверяется наличие контроллеров и экшенов через class_exists и method_exists, только если экшена нет логичнее на 404-й контроллер роутить. Я немного неправильно поставил вопрос, слово "дефолтный" я зря употребил.
vvs_rostov указал верное на мой взгляд направление. А в вашем примере запись по всей видимости будет одна, просто синоним будет представлять собой регулярное выражение.
 

Фанат

oncle terrible
Команда форума
если экшена нет логичнее на 404-й контроллер роутить.
И что же здесь логичного?
С чего ты вдруг так испугался дефолтного экшена? Если дефолтный экшен не найдёт, что показать по переданному параметру - он всё равно выкинет 404.

vvs_rostov
модуль поддержки алиасов и ВЕСЬ роутинг пускать через алиасы - это немного разные вещи.
Особенно меня радуют советы из серии "сам не пробовал но вот чуваки в подъезде сказали".

В общем, ясно. Учитывая урл чистым транслитом, без айди - чувак ещё учится. поэтому советы ему давать бесполезно, ему что собственная фантазия, что чужой опыт - всё равнозначно. А уговаривать каждого такого энтузиаста - банально времени жалко.
 

Фанат

oncle terrible
Команда форума
Ну, это, всё-таки, не напрямую к теме относится. А просто показывает уровень проработки системы.
Тем более, что, в принципе, можно и без id. Если хранить в таблице алиасов все предыдущие варианты заголовка и следить за уникальностью. Но по мне это геморрой, не оправдывающий себя.
При наличии id куда проще делать редирект автоматом при несовпадении тайтла.
 

Namistai

Новичок
Друзья, я пока только изучаю MVC и ООP, в порядке получения экспы пишу "фреймворк", с использованием которого сайт еще только предстоит сделать. Я в целом удовлетворен ответами, в голове малость проянилось, так что спасибо всем, тему можно закрывать.
 
Сверху