私の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}) {
}
上記のように、私は静的な足場を変更することができます。つまり、私は自分の変更を追加してコントローラを生成できますが、**すべて**を書きます。私はカスタムコードのいくつかの行を追加するために何百もの定型文を見たいとは思わない。特に、カスタムコードを混乱の中で見つけることができないことを考えると、 –
更新された応答を参照してください – Wavyx
それはそれをしたようです。私が以前に試したことは不思議で、うまくいかなかった。私は "static scaffold = true"ではなく、 "static scaffold = domainclass"よりも違いがあるかもしれませんか? –