FrontController, как грамотно построить?

snitko

Новичок
FrontController, как грамотно построить?

Не очень много опыта в такого рода вещах, но требуется реализовать, чтобы не обливаться слезами потом.

Хотелось бы узнать, как правильно организовать FrontController, который должен парсить УРЛ и затем в зависимости от того, что получилось - инклудить те или иные контроллеры. Есть ли какие-нибудь не очень сложные примеры? (Гугл как-то не очень помог).

Или, если несложно, был бы благодарен за пару строчек разъяснений или абстрактного кода. Спасибо.
 

snitko

Новичок
Спасибо, прочел. Но тема сисек не ракскрыта. Там больше про то, что такое Front Controller. Совсем простой пример со switch - это не совсем то.

Попробую углубить и расширить свой вопрос )
И так, пользователь заходит на сайт, вбивая в строке адреса какой-нибудь ЧПУ. ЧПУ состоит в моем случае из нескольких частей - /имя-контроллера/действие/аргумент. В задачу FrontControllera входит:

1) разобрать url на массив
2) проверить, есть ли контроллер с таким именем
3) подключить файл с кодом контроллера
4) подготовить (или как-то передать) контроллеру данные о "действии" и "аргументе".

Вот я и мучаюсь, как это организовать. Где хранить массив с разобранным путем (есть ли смысл создавать например класс Path, который будет заниматься пунктами 1,2 и 4? И должен ли этот класс заниматься пунктом 3, т.е. вызывать из одного из своих методов файл с контроллером. Вот тут путаница.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
ZFW, например.
А велосипед изобретать дело неблагодарное.
 

zerkms

TDD infected
Команда форума
1) разобрать url на массив
2) проверить, есть ли контроллер с таким именем
3) подключить файл с кодом контроллера
4) подготовить (или как-то передать) контроллеру данные о "действии" и "аргументе".
у тебя есть конкретный алгоритм, возьми его и реализуй

Где хранить массив с разобранным путем (есть ли смысл создавать например класс Path, который будет заниматься пунктами 1,2 и 4? И должен ли этот класс заниматься пунктом 3, т.е. вызывать из одного из своих методов файл с контроллером. Вот тут путаница.
прежде всего программируй так, как удобно тебе

Mr_Max
А велосипед изобретать дело неблагодарное.
велосипеды - это опыт
 

snitko

Новичок
Автор оригинала: zerkms
у тебя есть конкретный алгоритм, возьми его и реализуй

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

zerkms

TDD infected
Команда форума
Но я не пойму, как мне удобно, потому что не видел примеров
удобство - штука чертовски субьективная. то, что удобно автору книги - может для тебя быть вообще абсурдным

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

AmdY

Пью пиво
Команда форума
очень советую, кладезь полезных идей http://framework.zend.com/manual/ru
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
zerkms
велосипеды - это опыт
Я с Вами полностью согласен.
Но в данном случае вряд-ли за оптимальное количество времени и на нормальном уровне один програмист (или команда) сможет реализовать уже реализованное в том-же ZFW. Да и стОит ли...
А опыт и при других задачах достигается.

AmdY
+1
 

cDLEON

Онанист РНРСlub
Mr_Max
Вот от таких программистов умирают новые идеи для реализации тех, либо других задач. Сидите, используйте биктрикс, ну и помалкивайте.

snitko
Вопрос, на мой взгляд, слишком обширный и, мне кажется, филосовский....Пишите так, как вам нравится.
Если хотите, могу свою систему к примеру привести.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Сидите, используйте биктрикс, ну и помалкивайте.
Я бы попросил не затыкать мне рот.
Битркс не использовал и, надеюсь, никогда не прийдётся использовать это извращение.

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

AP

Новичок
ru.sun.com/pdf/patterns/pattern6.pdf - уж очень хорошее описание
 

cDLEON

Онанист РНРСlub
Я бы попросил не затыкать мне рот.
Битркс не использовал и, надеюсь, никогда не прийдётся использовать это извращение.
Если вы называете программистом, человека, который пользуется только уже готовым решением прикладных задач(видите ли вы, ему так проще), то мне вас жаль.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
cDLEON
Если вы называете программистом, человека, который пользуется только уже готовым решением прикладных задач(видите ли вы, ему так проще)
Я где-то такое говорил?

я называю програмистом того, кто использует не так как сказали Вы _только_, а
"Использует в своей работе _и готовые_ решения."
Пишете все с нуля? - пишите на здоровье
Я, например, не вижу в этом никакого смысла.
 

AmdY

Пью пиво
Команда форума
писать с нуля имет смысл лишь когда уверен, что получится лучше. а в случае когда человек спрашивает "как правильно реализовать", то ему желательно показать готовые решения.
умение использовать чужие решения - это признак профессианализма, но это не обозначает, что нельзя писать что-то своё.
cDLEON, и зачем так ложать битрикс? иногда лучше собрать за день-два готовый проект на битриксе или джумле, чем изобретать велосипед.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
.Mr_Max, cDLEON, личный флейм - в личку, please. Это вообще-то "теория", люди сюда подумать заходят.

Front Controller на PHP не всегда имеет смысл, IMHO.
Мне лично удобнее синхронизировать структуру сайта со структурой скриптов, и по ней воспроизвести структуру шаблонов с теми же именами файлов.
Это очень облегчает дебаг и модификацию в будущем, когда я забываю, какой скрипт что и как делает.

Удобно обернуть все "статические" страницы в один скрипт, а вывод форм и их обработку все-таки лучше разделять...

Собственно, в чем предполагаемая цель использования Front Controller, расскажите?
 

AP

Новичок
grigori Front Controller - контроллер который обрабатывает все запросы к веб-сайту (по Фаулеру)
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Автор оригинала: AP
grigori Front Controller - контроллер который обрабатывает все запросы к веб-сайту (по Фаулеру)
Это я понимаю. Но в чем его цель на PHP?
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Как везде...
Вот смотри: get,post,cookie,сессии в PHP уже глобальные, вывод заголовков автоматизирован.
Языковые настройки при правильном построении на логику влиять не будут.
Буферизацию вывода и автоматическую подгрузку библиотек до и после исполнения во все скрипты можно сделать через опции php.
PHP уже реализует большую часть того, для чего, по моему мнению, нужен Front Controller.

Единственная цель, которая приходит мне в голову - интеграция сторонних приложений в виде модулей.
Может быть, есть другие причины?
 
Сверху