Префикс сопоставления URL в Grails - PullRequest
5 голосов
/ 17 июня 2010

Недавно я пытаюсь перенести свое приложение из CakePHP в Grails.До сих пор это было гладко, все, что я могу сделать с CakePHP, я могу сделать это с гораздо меньшим количеством кода в Grails.Однако у меня есть один вопрос:

В CakePHP есть функция URL-префикса, которая позволяет вам присвоить префикс определенному URL действия, например, если у меня есть эти действия в моем контроллере:

PostController admin_addadmin_editadmin_delete

Я могу просто получить к нему доступ с URL:

mysite / admin / post / addMySite / администратор / запись / редактирование / 1mysite / admin / post / delete / 2

вместо:

mysite / post / admin_addMySite / запись / admin_edit / 1mysite / post / admin_delete / 2

Есть ли способ сделать это в Grails или хотя бы альтернатива этому?

Ответы [ 3 ]

5 голосов
/ 13 декабря 2010

Документация Grails URL Mappings не поможет вам в этом конкретном случае (amra, в следующий раз попробуйте сами и опубликуйте ответ, только если это поможет).Решение Даниэля было близко, но не сработало, потому что:

  1. часть действия должна быть закрыта при динамическом создании
  2. все именованные параметры, исключая "controller", "action"и «id» доступны через объект params

Решение может выглядеть следующим образом:

    "/admin/$controller/$adminAction?/$param?"{
    action = { "admin_${params.adminAction}" }
}

Ключ НЕ в том, чтобы называть параметр «action», потому что онКажется, что он напрямую сопоставлен с действием и не может быть переопределен.

Я также пробовал динамическое решение с общими префиксами, и оно также работает:

    "/$prefix/$controller/$adminAction?/$param?"{
    action = { "${params.prefix}_${params.adminAction}" }
}
1 голос
/ 17 июня 2010

Просто взгляните на Grails Часть документации по URL Mappings

1 голос
/ 17 июня 2010

Я не проверял это, но попробуйте это:

"mysite/$prefix/$controller/$method/$id?"{
    action = "${prefix}_${method}"
}

Он создает имя действия из префикса и метода.

...