PluginControllerという名前のプラグインコントローラーと、オーバーライドするアクション'foo'があるとすると、コントローラーをサブクラス化できます。
class MyController extends PluginController {
def foo = {
...
}
}
ただし、UrlMappingsでいくつかの作業を行う必要があります。
class UrlMappings {
static mappings = {
"/$controller/$action?/$id?" {
constraints {}
}
"/myController/foo/$id?"(controller: "myController", action: "foo")
"/myController/$action?/$id?"(controller: "pluginController")
"/pluginController/$action?/$id?"(controller: "errors", action: "urlMapping")
"/"(view:"/index")
"500"(view:'/error')
"404"(controller: "errors", action: "notFound")
}
}
これはErrorsControllerに依存します:
class ErrorsController {
def notFound = {
log.debug "could not find $request.forwardURI"
}
def urlMapping = {
log.warn "unexpected call to URL-Mapped $request.forwardURI"
render view: 'notFound'
}
}
古い「マップされていない」コントローラーアクションを呼び出すと、404ページがレンダリングされます。適切な404ページを表示するには、grails-app / views / errors/notFound.gspを作成する必要があります。
最初のURLマッピングにより、オーバーライドされたアクションが確実に呼び出されます。2つ目は、他のすべてを元のコントローラーにルーティングします。そして3番目は直接アクセスのために404を送信します。