специфичные для модуля маршруты в Zend Framework без указания имени модуля в маршруте

Мне нужно создать некоторые маршруты для конкретных модулей, но без явного упоминания имени модуля в маршруте. Прямо сейчас у меня есть отдельный файл конфигурации для каждого модуля (MODULE / configs / module.ini), и в начальной загрузке модуля я помещаю эти маршруты в Zend Framework. Файл INI содержит информацию о маршрутах, но в нем упоминается имя модуля. например

routes.contents.route = "Contents /(.*)"
routes.contents.defaults.module = Contents
routes.contents.defaults.controller = index
routes.contents.defaults.action = index
+ другие подробности по маршруту.

Вы можете видеть, что имя модуля («Содержание») явно упоминается в маршруте. Я хочу, чтобы в маршрутах я просто упоминал часть после имени модуля, и он автоматически добавлял имя модуля перед маршрутом. Так что позже, если я переименую модуль, скажем, в CMS, мне не придется менять каждый маршрут на «CMS / xxxx».


person Bryan    schedule 23.11.2010    source источник


Ответы (1)


Указанный вами «маршрут» может быть любым. Если Zend Framework соответствует ему, он выполнит маршрут на основе значений по умолчанию, установленных ниже.

resources.router.routes.products.regex = "somethingawesome/(.*)"
resources.router.routes.products.defaults.module = "ModuleName"
resources.router.routes.products.defaults.controller = "awesome"
resources.router.routes.products.defaults.action = "cool"

Вышеупомянутый «маршрут» использует совпадение регулярного выражения для - mysite.com/somethingawesome/whatever и направляет его в модуль: ModuleName, контроллер AwesomeController.php и запускает coolAction ()

Есть много других совпадений, которые вы можете выполнить в этом регулярном выражении, но строка «somethingawesome» полностью зависит от вас. Все дело в том, что вы хотите сопоставить в URL-адресе и куда вы хотите его отправить.

person Darryl E. Clarke    schedule 23.11.2010
comment
Я использую его, но в большинстве модулей маршруты начинаются с имени модуля. somethingawesome = имя модуля. поэтому я искал способ, чтобы я просто вводил маршрут после косой черты после чего-то потрясающего, и приложение автоматически добавляло имя модуля (что-то потрясающее). Допустим, мое имя модуля - realestate, и я хочу направить realestate /(.*) в module = ›realestate, controller =› index, action = ›index и получить значение (. *) С помощью getParam. Я хочу только добавить /(.*) в конфигурацию маршрута, поэтому, если позже я переименую модуль в коммерческий, мне не придется менять все маршруты. - person Bryan; 23.11.2010
comment
Если вы хотите, чтобы / realestate перешел в модуль с именем somethingelse, вы просто измените его в строке конфигурации '.module'. Регулярное выражение маршрута, установленное для / realestate, вообще не должно меняться. Если вы хотите, чтобы / realestate был / и перейти к чему-то еще, измените обе строки. Я думаю, вам также может потребоваться отключить маршруты по умолчанию, если вы хотите, чтобы / realestate перестал работать, когда он настроен как просто /. - person Darryl E. Clarke; 23.11.2010
comment
Теперь, когда я думаю об этом, маршрут /(.*) будет перехватывать все, и все остальные модули / маршруты не будут работать. Просто предупреждаю. - person Darryl E. Clarke; 23.11.2010