2016-02-08 7 views
6

は、テンプレートのような動的な足場のためのCRUDアクションを生成するために使用されたsrc/templates/scaffolding/Controller.groovyが命名した2.4.X:Grails3コントローラテンプレートは、Grailsので

Grailsの3(3.1.xへ)このファイルを交互に
class BookController { 
     static scaffold = domain.Book 
     static responseFormats = ['html', 'json'] 
} 

(おそらく3.0.x install-templatesが私のために作成したもの)は機能しません。 grails 3(.1)の動的スキャフォールディングのデフォルト動作を変更する方法はありますか? install-templatessrc/main/templates/scaffolding/ScaffoldedController.groovyというファイルを作成しますが、コンテンツは私のBookControllerクラスのように見えます。ドキュメンテーションはそれについて何も言わない。

答えて

0

私はあなたがgenerate-controllerを探していると思います。

+0

いいえ 'generate-controller'はコントローラの実際のファイル/クラスを作成しますscaffoldin特定のドメインクラス。このようなファイルが数十ある場合を考えてみましょう。たとえば、「すべての保存アクションは、編集アクションを呼び出す前のコントローラーにリダイレクトする必要があります」など、アプリケーション全体の動作を変更したいと考えています。 'templates/Controller.groovy'は、コントローラ内の' static scaffold = domain.class'によってオンザフライで作成されたすべての動的スキャホールドをテンプレート化したファイルでした。 – mkr

1

create-scriptコマンドを見てください。あなたは、コード生成を行うには、独自のスクリプトを作成することができますが、私はそれはあなたがGrailsの3でGORMドメインのプロパティへのアクセスを取得することができます信じていません

create-script User Guide

create-script quick ref...

(1) 。 How can I access GORM object properties in a GroovyScriptCommand?

最初にinstall-templatesコマンドを実行してから、必要に応じてcreate-scriptコマンドを実行しましたが、表示するテンプレートが限られていました。

私が作成した例です。私はprintlnステートメントを置くだけで、モデル上のさまざまなプロパティが私が扱わなければならないことが分かりました。彼らは、あなたが入力したコマンドラインの引数に基づいており、実際のGrailsの成果物のインスタンスではないので、少し制限されています。

のsrc /メイン/スクリプト/下駄作成画面-グルーヴィー:

import grails.build.logging.ConsoleLogger 

description("Creates a GETA scaffolded controller, views, and integration test artifacts") { 
    usage 'geta-create-screen [domain name]' 
    completer org.grails.cli.interactive.completers.DomainClassCompleter 
    argument name:'Controller Name', description:"The name of controller", required:true 
    flag name:'force', description:"Whether to overwrite existing files" 
} 

def model = model(args[0]) 
def overwrite = flag('force') ? true : false 

println "DAC: model.className:..... ${model.className}" 
println "DAC: model.fullName:...... ${model.fullName}" 
println "DAC: model.propertyName:.. ${model.propertyName}" 
println "DAC: model.packageName:... ${model.packageName}" 
println "DAC: model.simpleName:.... ${model.simpleName}" 
println "DAC: model.lowerCaseName:. ${model.lowerCaseName}" 
println "DAC: model.packagePath:... ${model.packagePath}" 

render template: template('scaffolding/EtaController.groovy'), 
    destination: file("grails-app/controllers/${model.packagePath}/${model.convention("Controller")}.groovy"), 
    model: model, 
    overwrite: overwrite 

render template: template('scaffolding/EtaDomainObject.groovy'), 
    destination: file("grails-app/domain/${model.packagePath}/${model.convention("Domain")}.groovy"), 
    model: model, 
    overwrite: overwrite 

render template: template('scaffolding/EtaService.groovy'), 
    destination: file("grails-app/services/${model.packagePath}/${model.convention("Service")}.groovy"), 
    model: model, 
    overwrite: overwrite 

render template: template('scaffolding/EtaGsp.gsp'), 
    destination: file("grails-app/views/${model.packagePath}/${model.propertyName}/${model.propertyName}.gsp"), 
    model: model, 
    overwrite: overwrite 

render template: template('scaffolding/EtaGspTabHeader.gsp'), 
    destination: file("grails-app/views/${model.packagePath}/${model.propertyName}/_tabHeader.gsp"), 
    model: model, 
    overwrite: overwrite 


return true 

テンプレート:実行するには のsrc /メイン/テンプレート/足場/ EtaController.groovy

<%=packageName ? "package ${packageName}" : ''%> 

class ${className}Controller { 

    static scaffold = ${className} 

    def index(){ 
     render view: "${packageName.replaceAll('\\\\', '/')}/${propertyName}/${propertyName}.gsp" 
    } 

} 

コマンド: grails geta-create-screen my.package.MyClass --force --stacktrace --verbose

+0

面白いですが、これは全く異なる機能です。私の質問は、ダイナミックスキャフォールディング(CRUDアクションをいくつか使用して実行時にコントローラを設定するもの)を対象としていました。コマンドスクリプトは、これらのアクションを生成時にフリーズし、維持することはずっと困難です。変更が必要な場合は、生成されたすべてのコントローラをリファクタリングまたは再生成する必要があります。 grails 2.xでは、動的な足場は、アプリケーションのコンパイル時に「静的な足場」を持つすべてのコントローラーの再生成のように機能しました。そこで使用されているテンプレートを変更すれば十分でしたが、grails 3ではこれが機能しません。 – mkr

関連する問題