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
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