Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013 Откуда: Ставропольский край
Помог: 10 раз(а)
[+]
Всем привет!
Столкнулся я с небольшой проблемой.
Вобщем все пишу я свой блог. Структура примерно такова:
Есть папка с классами - каждый класс в отдельном файле. Классы подгружаются автолоадом.
Есть папка с модулями:
auth - авторизация и регистрация пользователей. Использует класс Users.
articles - отвечает за добавление и вывод статей. Использует класс Articles.
Ну и так далее...
Каждый модуль имеет свой класс. Есть еще и вспомогательные классы, например, класс для работы с БД, класс для различной обработки текста и прочие.
Теперь вот озадачился я написанием некоего маршрутизатора, который будет парсить адресную строку и подключать нужные модули. Вот тут у меня случился творческий ступор.
Читал я про MVC, но не очень понимаю, как его применить.
Модели - ну это наверное мои модули.
Представление и маршрутизация - это наверное модуль content и собственно маршрутизатор, который я все никак не могу написать.
Модуль content отвечает за вывод контента. Контент - это в первую очередь статьи. То есть модуль content использует модуль articles. Модуль content также использует модуль auth - выводит в область контента формы авторизации и регистрации.
То есть модуль content - это модуль, который по сути использует любые нужные ему модули, чтобы вывести какой-то контент.
Модуль content использует класс ContentRouter. В классе происходит разбор адресной строки и подключение нужных модулей. Класс только начал писать и умеет он пока мало.
Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013 Откуда: Ставропольский край
Помог: 10 раз(а)
[+]
Okula
Смотрел-смотрел ваш код - слишком его много, ничего не понял.
Сейчас попробую поискать про регулярки
----- ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
Okula
Отправлено: 12 Августа, 2013 - 20:17:49
Участник
Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010
Помог: 42 раз(а)
Hapson, там уже готовый каркас под новые приложения + шаблонизатор Twig.
В том коде есть тестовое приложение на которое и нужно обратить внимание, а особенно на класс роутер.
Обрати внимание на метод getLinkList() там и прописываются регулярные выражения для загрузки конкретной модели. https://github[dot]com/Okula/dzsyste[dot][dot][dot]dules/Router.php
caballero
Отправлено: 12 Августа, 2013 - 20:34:01
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
регулярка на самом деле нужна только для отправки запроса на index.php
дальше уже можно обрабатывать без всяких регулярок
Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010
Помог: 42 раз(а)
caballero, зато у меня нет жёсткой привязки к файловой системе, полная свобода действия. Ссылки я могу формировать так как хочу. Передавать параметры в ссылке тоже любым образом.
caballero
Отправлено: 12 Августа, 2013 - 21:05:36
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
caballero, зато у меня нет жёсткой привязки к файловой системе, полная свобода действия. Ссылки я могу формировать так как хочу. Передавать параметры в ссылке тоже любым образом.
Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013 Откуда: Ставропольский край
Помог: 10 раз(а)
[+]
Okula
Спасибо за ссылку на ваше творение, но увы - разобраться не могу.
Нет ли у вас на примете ссылок, где можно почитать про азы маршрутизации?
То что я написал больше похоже на банальный switch...case, хоть это и класс...
Короче опять у меня ступор.
----- ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
caballero
Отправлено: 12 Августа, 2013 - 21:22:08
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
То что я написал больше похоже на банальный switch...case
Короче в адресной строке появляется что-то... ну на данном этапе это имя модуля и действие. Это что-то ловит модуль content и передает в класс ContentRouter методу start.
Метод start разбирает адресную строку и подрубает модуль с нужным действием. Ну и выводит результат этого действия в область контента. В данном случае это форма регистрации.
Я уж думал делать в БД какую-то табличку. Ну типа если register, то это значит нужно запустить auth и выполнить register...
Однако! Все это нужно будет расширять. Появятся другие модули. Появится больше параметров в адресной строке. Уже сейчас вот хочется например убрать auth из адресной строки... (Добавление)
Hapson пишет:
Метод start разбирает адресную строку и подрубает модуль с нужным действием. Ну и выводит результат этого действия в область контента
Точнее метод start подрубает модуль, указывает модулю на нужное действие, а модуль его выполняет и выводит на экран результат своей работы. Дальше этот модуль может продолжить взаимодействие с юзером при необходимости. (ну регистрация здесь или авторизация) (Добавление)
Вот мой мега роутер ))) Это очень черный черновик
Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013 Откуда: Ставропольский край
Помог: 10 раз(а)
[+]
_Dark_
Спасибо.
Много видел похожего, но ваш пример как-то очень понятен.
Надо в этом направлении шевелить мозгами...
----- ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
caballero
Отправлено: 12 Августа, 2013 - 22:30:51
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
лично у меня все просто
все адресные строки которые не содержат ? & . и т.д. предназначены для роутера
RewriteRule ^(\/index\.php.{0,}|[-#a-zA-Z0-9\/_]+)$ /index.php [L,QSA]
далее в каждом модуле есть предопределенная функция которая вполняет роутинг для кажлого модуля
это функция распознает "свои" маршруты и выполняет чего надо с этим выполнять)
если это не "свой" маршрут выполняется роутинг для следующего модуля
Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010
Помог: 42 раз(а)
Hapson, а что именно тебе не понятно в моём каркасе?
В папке www лежит файл index.php который принимает и обрабатывает все запросы к сайту (единая точка входа).
Ну а в папке src нужно распологать своё приложение.
src/classes - там лежат все классы связанные с приложением. В принципе папка Test и есть папка с тестовым приложением.
В папке src/views лежат все файлы шаблоны шаблонизатора Twig (представление страниц).
В папке src/config все конфигурационные файлы.
digi
Отправлено: 13 Августа, 2013 - 10:09:00
Посетитель
Покинул форум
Сообщений всего: 406
Дата рег-ции: Янв. 2012
Помог: 4 раз(а)
Hapson, попробуй http://symfony[dot]com/doc/current/c[dot][dot][dot]ntroduction[dot]html покрутить, штука очень удобная. также позволяет скомпилировать все маршруты в один пхпфайл и положить в кеш, откуда он будет забираться очень быстро конфигурировать тоже можно по разному, самый удобочитаемый для человека вид это yaml.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.