Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

Маршрутизация

Форум для авторов расширений для phpBB. Здесь можно попросить помощи в разработке у коллег.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB3.1.x/3.3.x | FAQ | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
Алг
Former team member
Сообщения: 933
Стаж: 11 лет 8 месяцев
Откуда: Израиль
Благодарил (а): 73 раза
Поблагодарили: 248 раз

Маршрутизация

Сообщение Алг »

Хочу поделиться решением проблемы маршрутизации, на поиск которой я сама потратила немало времени.
Как прописать контроллер, описано в документации Controller, но описан самый простой случай
# This is also YML, so the comments above apply here
my_controller:
path: /url/{foo}
defaults: { _controller: service_name:method_name, foo: "bar" }
Это означает, что вы можете вызывать ваш контроллер по адресу

Код: Выделить всё

myforum/mycontroller
или

Код: Выделить всё

myforum/mycontroller/bla-bla
В обоих случаях mycontroller должен иметь паблик-функцию "method_name", которая и будет вызвана и которая должна иметь параметр "foo"
т.е.
public function method_name($foo)
, в первом случае $foo примет значение "bar" ( по умолчанию), во втором -значение "bla-bla"

А как быть, если нужно вызывать разные функции контроллера, а не только method_name?

Это можно сделать, если дописать дополнительные требования к параметрам.

Допустим, у меня есть контроллер, которому я передаю айди форума и определяю функцию init, как дефолтную

Код: Выделить всё

alg_mycontroller_init_controller:
    path: /mycontroller/{forum}
    defaults: { _controller: alg.myext.controller.mycontroller:init }
    requirements:
        forum: \d+
, требование означает, что параметр должен быть числом
далее по тому же пути я прописвываю другой маршрут

Код: Выделить всё

alg_mycontroller_action_controller:
    path: /mycontroller/{action}
    defaults: { _controller: alg.myext.controller.mycontroller:do_action, action:'bla-bla' }
теперь линк

Код: Выделить всё

 myforum/mycontroller/10
вызовет функцию init($forum), которая получит параметр $forum=10,
линк

Код: Выделить всё

myforum/mycontroller/update_something
вызовет функцию do_action($action), которая получит параметр $action = "update_something"
Там упёртость и инертность, могут, кстати, в морду дать.
А ты проявляй интеллигентность, постарайся убеждать...

Т. Шаов

Вернуться в «Для разработчиков»