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}) {
    }
4

2 に答える 2

1

次のコマンドを簡単に使用することはできません。

grails install-templates

次に、コントローラーを変更しますか? ガイドリファレンス

コントローラを設定するだけです

static scaffold = *MODEL*

変更をに適用します/src/templates/scaffolding/Controller.groovy

generate-controllerを使用するために生成する必要はありません

于 2012-02-15T10:15:29.060 に答える
1

カスタムスキャフォールディングビヘイビアの記述に関する記事を終えたところです。内部の仕組みは、grailsソースコードのscaffoldプラグインからコピーされます。ここで実際のgrailsコード私の記事を見ることができます。

于 2012-11-29T19:26:20.320 に答える