В настоящее время я просматриваю и обрабатываю примеры в Начало работы с Grails, второе издание Скотта Дэвиса и Джейсона Рудольфа.
Эта книга была написана с использованием Grails 1.2.
У них есть образец кода, где они создают метод debug()
, который вызывается beforeInterceptor
, и объясняет, что, поскольку debug()
- это метод, он не отображается пользователю через URL. Они объясняют, что Closures отображаются как действия контроллера для конечного пользователя, но методы - нет.
Я также видел на документации Grails 1.3, они ссылаются на обычный метод:
def auth() { ... }
рассматривается как закрытый, поскольку это метод, а не закрытие. Это было так же, как и у Grails 1.3.
Однако, с Grails 2.0.0, Действия с контроллером могут быть реализованы как в обоих методах, так и в закрытии.
Это заставило меня задаться вопросом (и попытаться выяснить) способ репликации функциональности, доступной в pre-Grails 2.0.0, для создания метода в контроллере, который не будет отображаться конечному пользователю.
Я подумал о двух возможных подходах и задавался вопросом, что будет лучше стиль/практика и почему?
- Установка доступа как частного, т.е.
private def auth()
-
Настройка allowMethods для пустого метода:
static allowedMethods = [save: "POST", update: "POST", delete: "POST", auth: ""]
оба подхода, казалось, достигли желаемого эффекта. Однако первый подход дает код ошибки 404 HTTP, а второй подход дает код ошибки HTTP 405.
Кто-нибудь знает, какой подход предпочтительнее? Кроме того, существуют ли какие-либо другие подходы или "техника наилучшей практики" для этого?