2012-02-15 4 views
2

私の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}) { 
    } 

答えて

1

コマンドあなたの簡単な使用することはできませんを達成しようとしています何の例を示します。

grails install-templates 

次にコントローラを修正しますか? GuideおよびReference

ちょうど

static scaffold = *MODEL* 

を使用してコントローラを設定し、カスタム足場を書くことについて、私はちょうど記事を仕上げ

+0

上記のように、私は静的な足場を変更することができます。つまり、私は自分の変更を追加してコントローラを生成できますが、**すべて**を書きます。私はカスタムコードのいくつかの行を追加するために何百もの定型文を見たいとは思わない。特に、カスタムコードを混乱の中で見つけることができないことを考えると、 –

+0

更新された応答を参照してください – Wavyx

+0

それはそれをしたようです。私が以前に試したことは不思議で、うまくいかなかった。私は "static scaffold = true"ではなく、 "static scaffold = domainclass"よりも違いがあるかもしれませんか? –

1

生成するコントローラを使用して生成する必要はありません/src/templates/scaffolding/Controller.groovy

への変更を適用します動作。内側の動作はgrailsのソースコードscaffolding pluginからコピーされます。実際のgrails code heremy articleを見ることができます。

+1

あなたの記事は正確に何を言いますか?リンク腐敗が発生した場合はどうなりますか? – Ivan

関連する問題