Посмотрите на команду create-script.
create-script quick ref...
create-script User Guide
Это позволит вам создать свой собственный сценарий, чтобы сделать генерацию кода, но я не верю, что позволяет получить доступ к свойствам домена Горм в Grails 3. (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
№ 'generate-controller' создает фактический файл/класс для контроллера scaffoldin g конкретный класс домена. Посмотрите на ситуацию, когда у вас есть десятки таких файлов, и вы хотите изменить какое-либо поведение в приложении, например «каждое действие сохранения должно перенаправить обратно на предыдущий контроллер, вызывающий действие редактирования» - десятки файлов для изменения. И 'templates/Controller.groovy' был файлом, который запустил каждый динамический эшафот, созданный« на лету »с помощью' static scaffold = domain.class' внутри контроллера. – mkr