Comments 37
>> Зачем? Зачем Битрикс любит Windows-1251? Без понятия. Но это будет продолжаться вечно (и это инсайдерская информация).
шел 2016 год… просто слов нет.
почему люди этим пользуются? неужели у них не бывает клиентов скажем из Германии? или из того же Китая?
Есть возможность ставить Битрикс под UTF-8, но это не основная кодировка, по-умолчанию 1251.
А по поводу клиентов: вряд ли)))
Скорее всего из СНГ только, да и то все равно 1251 не спасет.
Что только не делают битриксоиды, лишь бы не писать нормальный код.

Роутер — одна из самых простых частей приложения, особенно в парадигме MVC: подай на вход Request, на выходе получи Route, как некий внутренний путь по приложению, и решай, что с этим путем делать. Ну ОК, еще обработай исключение «Соответствие не найдено», превратив его в ответ 404.

Чтобы не заморачиваться, создай конфиг роутинга в виде массива, где ключами будут шаблоны, на соответствие которым проверяется Request, а значениями — функции, которые получат этот Request, группы совпавшие в шаблоне, замкнут на себя контекст и вернут Route.

Всё!

Что все эти люди делают с этой простейшей концепцией? Зачем? Ради чего вы вообще пишете вот такой код?
В Битриксе UrlRewrite — это статичный конфиг, в котором кроме копания ручками ещё автоматически вносятся роуты от виджетов, поэтому никаких функций там нет, при его архитектуре они там не нужны.
Вы сейчас прослушали миниатюру «Битрикс: нам не нужно нормально программировать, потому что у нас такая вот архитектура»
Вы сейчас прослушали миниатюру «Есть только MVC и PSR пророк его, всё остальное от лукавого».
MVC — нет, конечно. Архитектур много, все они разные. Нет ничего плохого в чем-то, что не вписывается в прокрустово ложе MVC.

PSR — да. Если вы не уважаете стандарты, принятые сообществом — вон из профессии.
А при чем тут уважение стандарта и его использование? И что еще за «принятие сообществом» такое? Где то было совещание PHP разработчиков, на котором подписали договор о безоговорочном следовании PSR всеми участниками сообщества, иначи им запрещается использовать в своей работе данный ЯП?
Где то было совещание PHP разработчиков


Да, конечно.
Вот например: http://www.php-fig.org/psr/psr-4/meta/#6-votes
Если вы не считаете этих людей авторитетами для себя, у меня для вас плохие новости — вы за бортом современного PHP.
А где там речь об исключение из профессии тех, кто не придерживается PSR?
Если вы не считаете этих людей авторитетами для себя

При чем здесь то, кем я для себя считаю этих людей? Не надо подменять понятия.
вы за бортом современного PHP

Какой ужас, модное, современное, молодежное проходит мимо меня!
Я не боюсь отстать, я боюсь убить свое время на нечто переходное. PSR это хорошо, но не нужно быть таким категоричным, это же всего лишь стандарт.
Потому что в Битриксе нет единой точки входа, и поэтому роутер не всегда подключается, а только когда обращение идет не к существующему файлу.

А в чем сложность собственно? Алгоритм:
1. Получили URI.
2. Привели соответствие с шаблонами.
3. Подключили нужный файл, либо 404 выплюнули.

По поводу конфига: да, вероятно вы правы, стоит добавить возможность добавить массово конфиг.

А теперь по поводу кода: чем он вам не по нраву?
Он не семантичен. Что такое run()? Зачем нужен end()?

Не проще ли:

try {
  $request = ...;
  $route = (new Router(
    new Config(ROUTE_CONFIG_PATH)
  ))->processRequest($request);
}
run — проверка шаблона на соответствие (если приятней глазу читайте как process).

По сути весь этот велосипед строился ради runRecursive.

end — кидает на Битриксовый обработчик, если в текущем нет нужных правил, т.к. данный роутер вспомогательный, стандартные компоненты вряд ли будут ему следовать.

Request в вашем примере, в данному случае это URI, по нему идет маршрутизация, другие данные не нужны.
Маршрутизация основана только на URI, методы в счет не идут. Остальной обработкой занимаются либо сами страницы, либо компоненты в них подключенные.
В Битрикс нет «стандартного» MVC (контроллер, модель, представление). После роутинга, подключается страница, а не действие контроллера.
Тобишь внутри страницы еще один роутер? А почему тогда это не реализовать на уровне веб-сервера?
Чтобы правила были доступны из PHP, для той же генерации ссылок по шаблону.
Битрикс также позволяет генерировать шаблоны маршрутизации из админки, сохраняются они соответственно в PHP.
Как по мне, писать напрямую правила маршрутизации в htaccess — не круто.
Согласен.
Это вопросы к архитектуре.
Скорее всего (и это мое личное мнение), роутинг в компонентах сделан для удобной настройки компонентов из административного интерфейса, и только.
А что мешало взять любой готовый пакет для роутинга и подключить его?

мне полюбился TDD, так что рефакторинг остановился до тех пор пока не напишу тесты

Тесты это круто, конечно, но чуствую я, «эра» Juggernaut начинает подходить к концу.
А что мешало взять любой готовый пакет для роутинга и подключить его?

Прокачка скилла. (А вообще FastRoute хорош).

Тесты это круто, конечно, но чуствую я, «эра» Juggernaut начинает подходить к концу.

Спасибо за веру)))
Атата! Не меняйте смысл слов, Вы спросили про роутинг, а не Juggernaut)))

На самом деле роутер писался глядя в код FastRoute, а не использовал я его из-за неполного понимая open-source лицензий.

А по поводу прокачки скилла: juggernaut в некоторых местах рефакторит битрикс, но в некоторых что-то привносит свое. Он создан для удобства, если только для моего, то так тому и быть, меньше париться с документацией)
Не в таком виде.
В juggernaut я планирую сделать «нормальную» точку входа, чтобы можно было маршрутизировать в формате «контролер / действие».
Собственно сделать единственный кофинг для роутера, с возможностью последующей генерации ссылок по шаблону.
>include /urlRewrite.php

Там же вроде не camelCase…

>include dbconn.php

Там вроде не только база, а и другие настройки…

Ваш роутер подтягивает битриксовские правила роутинга?

>Что все эти люди делают с этой простейшей концепцией? Зачем? Ради чего вы вообще пишете вот такой код?

А я вообще не пишу код роутинга, он в нгинксе. :)
Там же вроде не camelCase…

В статье: что-то вроде псевдокода

Там вроде не только база, а и другие настройки…

И опять вроде))) В основном там база, да и из названия это следует. Помимо базы также присутствуют константы кеша и еще парочку непонятных/неизвестных мне. Но в любом случае это не должно подключаться до роутинга, с учетом того, что данные константы вряд ли там используются (не факт)

Ваш роутер подтягивает битриксовские правила роутинга?

Если в роутере не сработало ни одно из правил, то далее уже подключается стандартный роутинг
>И опять вроде)))

Я с Битриксом 2 года не работаю уже, поэтому могу ошибаться, поэтому вроде. :)

>В основном там база.

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

>да и из названия это следует

Название неочевидное… :)

>это не должно подключаться до роутинга

http://dev.1c-bitrix.ru/api_help/main/general/pageplan.php

>Если в роутере не сработало ни одно из правил, то далее уже подключается стандартный роутинг

А в конфиг вашего роутинга пишутся параметры с вызуального редактирования параметров комплексного компонента?
http://dev.1c-bitrix.ru/api_help/main/general/pageplan.php


Знаю такую страницу, только не понимаю к чему это?

А в конфиг вашего роутинга пишутся параметры с вызуального редактирования параметров комплексного компонента?


Нет они пишутся в файл '/urlrewrite.php' (не путать с 'bitrix/urlrewrite.php' который отвечает за маршрутизацию), не вижу смысла подключать его, если в дальнейшем (если нет подходящих правил) все равно маршрутизацией будет заниматься битирксовый роутер
>Знаю такую страницу, только не понимаю к чему это?

Почему это все подключается…
В том файле не только БД ну и остальное.

>Нет они пишутся в файл '/urlrewrite.php' (не путать с 'bitrix/urlrewrite.php' который отвечает за маршрутизацию), не вижу смысла подключать его, если в дальнейшем (если нет подходящих правил) все равно маршрутизацией будет заниматься битирксовый роутер

Боже, роуты пишутся вручную или с редактора параметров компонента?
Почему это все подключается… В том файле не только БД ну и остальное.

Вообще нет. В том файле определяются только константы, а страница грузиться начинает после подключения /bitrix/header.php или файла пролога (собственно после маршрутизации).

Боже, роуты пишутся вручную или с редактора параметров компонента?

Вы сначала мозги включите, а потом божечку вспоминайте. У Битрикса свой формат роутинга (маршрутов, подстановки параметров, ...), и опять напишу, что не вижу смысла писать, потому как затем подключается битриксовый роутер, а в данный маршрутизации писать нужно ручками
Так /bitrix/header.php и подключает их все… :)

Я знаю, что у битрикса свой формат.
Я спрашиваю, пишете ли вы в свой файл. :)
Битрикс ужасен… И ужасен во всем за исключением того что делает его битриксом (сертификация ФСТЭК и прочие необходимые пряники). Чем меньше в сайте битрикса тем лучше для сайта… Тем лучше для его овнера… Тем лучше для сапорта и криэйтеров проекта… А это «чем меньше» достигается связкой Silex/Slim/Lumen плюс API Bitrix плюс любимый JS+CSS фреймворк. Да это похоже на «мерседес» замаскированный под костыли… Но многолетний опыт разработки на этой «платформе» порой приводит к таким вот странным решениям…
Only those users with full accounts are able to leave comments. Log in, please.