11. Роутинг
11.1 Введение
Роутинг предоставляет удобный механизм вызова расширений.
Сразу пример:
misc.php?r=my_reputation/reputation/view/uid/2
параметр r содержит информацию для роутинга. а именно - расширение/контроллер/экшн/параметры
в данном примере это значит:
расширение - my_reputation
контроллер - reputation
метод контроллера (или action) - view
параметры - uid=2
Хелпер, отслеживает вызовы misc.php и обнаружив параметр роутинга r производит его разбор
выделяет расширение, контроллер, метод, параметры (если они есть) и осуществялет
последовательно инициализацию класса контроллера, инициализацию переменных класса, переданных
в параметрах, а затем производит вызов метода класса.
В нашем примере у контроллера появится свойство uid, которому будет присвоено значение 2:
echo $my_reputation->uid;
Дальше хелпер осуществляет рендеринг вывода и зщавершает работу.
Для осуществления роутинга в своем расширении необходимо придерживаться правил именования
описанных в п.3 "Автоматическая загрузка классов".
С точки зрения разработчика расширений, использование роутинга позволяет отказаться от
самостоятельного поиска места перехвата вызова, чтобы осуществить передачу управления
своему скрипту и программирования манифеста.
Кроме этого из строки запроса всегда видно куда конкретно ведёт запрос, это всегда:
расширение/контроллер/метод . Ну и кроме того, такое соглашение об именовании гарантирует, что
строка запроса GET вашего расширения не вступит в конфликт с другим расширением, т.к. имена расширений
уникальны.
Итак, если мы хотим получить управление в свои руки при переходе по нашей ссылке,
то мы должны сделать 2 вещи: создать ссылку в соответствии с соглашением и создать контроллер.
При переходе по такой ссылке хелпер вызовет наш контроллер автоматически.
11.2 Виды Роутинга
PunBB имеет особенность, которая наложила отпечаток на Роутинг.
Особенность обусловлена дополнительными меню, которые присутствут и отличаются друг от друга
в админ-центре, в профиле, и отсутствуют в остальных частях форума.
Таким образом получилось 3 вида роутинга и соответствующие строки запроса:
1) Профиль: profile.php?r=
2) Админ-центр: admin/settings.php?section=route&r=
3) Всё остальное: misc.php?r=
Это не очень красиво и на вид избыточно, но таков PunBB и такое разделение позволяет
получить управление в нужном контексте.