2016-02-08 12 views
6

şablon gibi dinamik yapı iskeleleri için CRUD işlemleri üretmek için kullanılmıştır src/templates/scaffolding/Controller.groovy orada seçildi 2.4.x:Grails3 kontrol şablon grails olarak

grails 3 (3.1.x) bu dosyayı alternatif olarak
class BookController { 
     static scaffold = domain.Book 
     static responseFormats = ['html', 'json'] 
} 

(Muhtemelen 3.0.x install-templates benim için bir tane oluşturdu) sadece çalışmıyor. 3 (.1) numaralı sınıftaki dinamik iskelenin varsayılan davranışını değiştirmenin bir yolu var mı? install-templates bazı src/main/templates/scaffolding/ScaffoldedController.groovy dosya oluşturur, ancak içeriği benim BookController sınıfına benziyor. Belgeler bu konuda hiçbir şey söylemiyor.

cevap

0

generate-controller ürününü arıyorum.

+0

Hayır. "create-controller" denetleyici scaffoldin için gerçek dosya/sınıf oluşturur Belirli bir alan sınıfı. Düzinelerce dosyaya sahip olduğunuzda ve uygulama genelindeki bazı davranışları değiştirmek istediğinizde, örneğin, 'her kaydetme eylemi, düzenleme eylemini çağırmak için önceki denetleyiciye yeniden yönlendirmelidir' - düzinelerce dosya değiştirmek için duruma bakın. Ve 'templates/Controller.groovy', denetleyicinin içindeki statik scaffold = domain.class' tarafından oluşturulan her dinamik scaffold'u tempize eden dosyaydı. – mkr

1

Create-script komutuna bir göz atın. Kod nesil yapmak için kendi komut dosyası oluşturmak için izin verecek, ama sen Grails 3'te Gorm alanı özelliklerine erişmek için izin verir inanmıyorum

create-script User Guide

create-script quick ref...

(1) . Bu soruyu kendi kendime gönderdim: How can I access GORM object properties in a GroovyScriptCommand?

Önceden kurulum-şablonları komutunu çalıştırdıktan sonra komut dosyası komutunu çalıştırdım, gerekip gerekmediğinden emin değilim, ancak bana bakmak için bazı sınırlı örnek şablonlar verdi.

Burada, oluşturduğum bir örnek var. Println ifadelerini, modelde farklı özelliklerin birlikte çalışmak zorunda olduğumu görebilmeleri için koyuyorum. Kendilerini biraz sınırlı hissederler çünkü hepsi gerçek bir Grails artefaktının bir örneğini girip girmediğiniz komut satırı argümanına dayanır.

src/main/komut/geta oluşturun ekran-groovy:

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 

şablonu: src/main/templates/iskele/EtaController.groovy

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

class ${className}Controller { 

    static scaffold = ${className} 

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

} 

yürütmek için command: grants geta-create-screen my.package.MyClass --force --stacktrace --verbose

+0

İlginç, ancak bu tamamen farklı bir işlevsellik. Sorum şu: dinamik bir yapı iskelesi - bazı CRUD eylemlerini kullanarak çalışma zamanında denetleyiciyi kuran bir şey. Komut dosyası, bu eylemleri üretim süresinde donduruyor ve sürdürülmesi çok daha zor. Bir şeyi değiştirmek zorunda kalırsanız, oluşturulan tüm denetleyicileri yeniden düzenlemeniz veya yeniden oluşturmanız gerekir. Mezarlarda 2.x dinamik iskele, uygulama derlemesinde 'statik iskelet' bulunan her denetleyicinin yeniden üretilmesi gibi çalıştı, bu yüzden orada kullanılan şablonu değiştirmek yeterliydi, ancak 3'te bu işe yaramadı. – mkr