Как я могу заменить свои собственные динамические методы скаффолдинга - PullRequest
2 голосов
/ 15 февраля 2012

Моему приложению grails необходимо определить дополнительное поведение для многих стандартных динамических методов скаффолдинга для каждого класса домена.

Я знаю, что могу дублировать методы, которые мне нужно добавить для каждого контроллера, и это действительно то, чем я сейчас занимаюсь.Это означает, что мой пользовательский код скрыт стандартными лесами.

Я также пытался импортировать и изменять шаблоны, но они, похоже, включаются, только если я генерирую статические леса в своих контроллерах.Излишне говорить, что это не очень помогает.

Кажется, что перехватчики тоже не то, что я хочу, поскольку они заключают в себе действие, а не вставляются в него.Я думал о том, чтобы каким-то образом перехватить вызов GORM, но это не совсем то, чего я хочу.

Что я действительно хочу сделать, так это заменить базовые динамические методы скаффолдинга на те, которые имеют хук в местах, где яхочу иметь возможность изменять.

Ниже приведен пример того, чего я пытаюсь достичь

    // standard "save" dynamic scaffold method decorated with hooks for custom code
    def save() {
        def ${propertyName} = new ${className}(params)

        saveBeforeSave(${propertyName})

        if (!${propertyName}.save(flush: true)) {
            render(view: "create", model: [${propertyName}: ${propertyName}])
            return
        }

        saveAfterSave(${propertyName})

        flash.message = message(code: 'default.created.message', args: [message(code: '${domainClass.propertyName}.label', default: '${className}'), ${propertyName}.id])
        redirect(action: "show", id: ${propertyName}.id)
    }

    // Placeholders hooks to be overridden in controller as necessary
    def saveBeforeSave(${propertyName}) {
    }
    def saveAfterSave(${propertyName}) {
    }

Ответы [ 2 ]

1 голос
/ 29 ноября 2012

Я только что закончил статью о написании собственного поведения лесов. Внутренняя работа копируется из плагина скаффолдинга исходного кода Grails. Вы можете посмотреть действительный код grails здесь и мою статью .

1 голос
/ 15 февраля 2012

Разве вы не можете просто использовать команду:

grails install-templates

Затем изменить контроллер? Руководство и Ссылка .

Просто настройте свой контроллер на

static scaffold = *MODEL*

и примените ваши изменения к /src/templates/scaffolding/Controller.groovy

Нет необходимости генерировать для использования generate-controller

...