Опять про "фонарные" ЧПУ

Духовность™

Продвинутый новичок
Опять про "фонарные" ЧПУ

Кто-нибудь РЕАЛЬНО разрабатывал систему, при которой можно было бы создавать произвольные URL-адреса, в которых не передавалось бы название обрабатывающего модуля?

Т.е. если стандартный путь URL адреса это /модуль/действие/id_элемента, то хотелось бы создать систему, при которой можно было бы создавать URL с любым именем.
 

Фанат

oncle terrible
Команда форума
а в чем разница?
тебе не по барабану, что передавать?
не нравится имя модуля - передай что-нибудь другое.
 

Духовность™

Продвинутый новичок
передай что-нибудь другое.
Я понимаю, что нужно хранить связь "виртуальный_путь-модуль", но понять, каким образом и по какой логике должен работать код, отвечающий за парсинг URL, не могу!

Допустим, у нас есть 3 модуля: новости, статьи, гостевая книга.

Нужно создать три гипотетических вида URL-адресов, у каждого вида будут подвиды:

новости
/moi_novosty/2007/12/09/novost.html
/moi_novosty/2007/12/09/
/moi_novosty/2007/12/
/moi_novosty/2007/
/moi_novosty/

статьи
/moi_stati/pub/politics/vibory/ldpr.html или
/moi_stati/pub/politics/vibory/
/moi_stati/pub/politics/

гостевая книга
/moy_guestbook/pages/1/
/moy_guestbook/


Т.е. по-видимому нужно для каждого модуля хранить свои какие-то правила парсинга? Как это делается вообще? (
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Вот интересное решение на днях увидел: Horde/Routes. Сам ещё не пробовал, так что поделись впечатлениями.
 

HraKK

Мудак
Команда форума
Рассказываю как это делаю у меня. Это мое ИМХО, возможно не верное.
Получаю весь урл допустим
/moi_novosty/2007/12/09/novost.html
Пршу получаю массив moi_novosty,2007,12,09
Передаю в фронте хандл 1 action
moi_novosty
Если за этот екшен отвечает модуль передаю туда остаток масива урл
там внутри опять получаю 1 action
2007
модуль сам смотрит что с ним делать обрабатывать внутри или передать дальше управление.
 

HraKK

Мудак
Команда форума
не важно как, там надо смотреть по ситуации. Посмотри как тебе надо.
Незная потребностей нельзя точно дать ответ.

В фронт-странице у меня есть параметр доступный администратором в котором указывается кто отвечает за нее, по дефолту PageController.
Для бек-енда по другому.
В других системах тоже по другому.
 

dark-demon

d(^-^)b
http://php.ru/forum/viewtopic.php?p=55787#55787

новости
/news_item:release_2.1.1/
/news_list/day:09.12.2007/
/news_list/month:12.2007/
/news_list/year:2007/
/news_list/

статьи
/article:ldpr_zzzshot/
/article_list:politics.vibori/
/article_list:politics/

гостевая книга
/guestbook/page:1/
/guestbook/


да, и я категорически против штатной передачи управления от контроллера к контроллеру, как предлагает ХряКК, ибо система получается неоправданно жёсткой.
 

cDLEON

Онанист РНРСlub
Я обозвал каждую хрень после слеша "коммандами".
PHP:
//Возвращает первую комманду но ни чего не удаляет.
$cmd=Engine::firstCmd();
//Устанавливает титл для текущей позиции в модуле.
Engine::setTitle($title);
//Удаляет самую первую комманду.
Engine::delCmd();
 

boombick

boombick.org
tf
Ну уж тебе-то не знать :)

Через mod_rewrite все урлы, кроме статики, заворачиваются на front-controller, который парсит урл и по регам или абсолютному соответствию определяет модуль и подключает его. Или (по крайней мере я так делаю), если соответствие не найдено, выдает 404-ю страничку : )
 

HraKK

Мудак
Команда форума
dark-demon
Что в твоем понимании "жесткость"?
 

jonjonson

Охренеть
Если вернутся к протоколу HTTP, то URL (ЧПУ или не ЧПУ) нужен для идентификации определённого ресурса. Для работы с ресурсом существуют HTTP методы GET, POST, PUT, DELETE. GET - запрос ресурса (нельзя через этот метод ресурс изменять) соответствует SELECT в SQL. POST соответствует INSERT в SQL; PUT - UPDATE; DELETE - DELETE (согласно архитектуре приложений REST). URL не должен содержать никаких action, как это пытаются реализовать в ZF и некоторых других фреймвоках. Исторически сложилось, что методы PUT и DELETE не поддерживаются браузерами (разве что через Ajax можно использовать), по этому RoR и pythonщики пытаются эти два метода эмулировать через метод POST. И всё это изобреталось для единообразной работы с ресурсами по HTTP.
 

dark-demon

d(^-^)b
HraKK, в том, что в процессе всплытия каждый модуль выполняет определённый код не зависимо от нужд целевого модуля. а нужды бывают разные...

-~{}~ 11.11.07 11:54:

jonjonson, допустим есть задача: "считать количество просмотров картинки". что нам говорит на это рест? правильно, "вы не должны этого хотеть" ^_^
любые логи действий пользователя совершенно не вписываются в принципы реста.

рест умер, да здравствует веб2.0 с обучаемыми социальными сетями ^_^
 

HraKK

Мудак
Команда форума
dark-demon
А по подробнее, я не понял что ты имеешь ввиду. Желательно с примером, если не затруднит.
 
Сверху