Во-первых, может быть лучше поместить все ваши группы в подпуть, что значительно упрощает управление контроллерами, например:
mappings = {
"/$controller/$action?/$id?"()
"/g/$groupUrl?/$action?/$id?"(controller: "group")
"/g/$groupUrl?/events/$action?/id?"(controller: "groupEvents")
}
Во-вторых, Grails Отображения URL учитывает динамические контроллеры и действия, поэтому вы можете использовать небольшой код для выбора правильного контроллера, например:
mappings = {
"/$controller/$action?/$id?"()
"/g/$groupUrl/$group_c?/$action?/$id?" {
controller = {
(params.group_c in [null, '', 'group']) ?
'group' :
'group' + params.group_c.capitalize()
}
}
}
Это не идеально, но в основном это допускает следующие URL-адреса:
- / g / mygroup / -> GroupController.index
- / g / mygroup / group / view / 45 -> GroupController.view
- / g / mygroup / event /list / 64 -> GroupEventController.list
Однако он не позволяет отображать действия GroupController
без пути /group/
.Вы можете обойти это, жестко закодировав список действий в GroupController
, и, если group_c
находится в этом списке, увеличьте group_c
до action
и увеличьте action
до id
.Это было бы некрасиво.