Я хотел бы узнать больше о настройке генерации контроллера Grails, но я не могу найти никакой документации.
В частности, моя мотивация заключается в том, что я работаю с устаревшей базой данных, и это только для чтения. Поэтому я хотел бы настроить генерацию кода таким образом, чтобы, если класс домена находился в определенном пакете, например: toppackage.readonly, тогда генерировался только код только для чтения, только методы list и show на контроллерах.
Я немного поиграл с этим, и я не уверен, как именно они разбирают шаблоны. Они содержат теги <%%> и кажутся чувствительными к семантическому пробелу.
Я знаю, что проектные намерения для строительных лесов должны были дать вам отправную точку, но часто случается, что что-то пересматривается позже и изменяется, и восстановление вещей снова кажется расточительным. Также обязательно должны быть соглашения, специфичные для проекта, которые относятся к фазе генерации кода. В нашем случае существуют некоторые требования безопасности, которые относятся к фазе генерации кода.
Как ввести переменную в шаблон кода?
Как оцениваются теги? это форма OGNL?
Пока я делаю это ужасным, уродливым способом, помещая доменные классы в пакет с именем readonly и этим в шаблоне контроллера:
<%=!(packageName=~/\readonly/) ? """ def save = {\n
def ${propertyName} = new ${className}(params)\n
if (${propertyName}.save(flush: true)) {\n
flash.message = \"\${message(code: 'default.created.message', args: [message(code: '${domainClass.propertyName}.label', default: '${className}'), ${propertyName}.id])}\"\n
redirect(action: \"show\", id: ${propertyName}.id)\n
}\n
else {\n
render(view: \"create\", model: [${propertyName}: ${propertyName}])\n
}
}""" : ''%>