Frage

Das Plugin (Nimble 0,3) ich in meiner Grails-Anwendung verwenden, enthält einige Controller und die damit verbundene Aktionen. Ich möchte Veränderung (leicht) einige Aktionen Verhalten , und ich frage mich, wie ich das erreichen kann.

Kann ich ein Kind Controller , dass erbt von meinen Plugin-Controller und einige der Maßnahmen Implementierung außer Kraft setzen?

Oder kann ich einen anderen Controller mit dem gleichen Namen erstellen als Plugin-Controller, aber in einem anderen Paket liegt

Naja, eigentlich, was ich wirklich verstehen muß, ist: wie Grails bestimmt, welche Controller-Aktion zu Anruf , wenn es Namenskonflikte

War es hilfreich?

Lösung

Angenommen, Sie ein Plug-Controller mit dem Namen PluginController und eine Aktion ‚foo‘, dass Sie außer Kraft setzen möchten, können Sie den Controller Unterklasse:

class MyController extends PluginController {

   def foo = {
      ...
   }
}

aber Sie müssen einige Arbeit in urlMappings tun:

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")
   }
}

und dies hängt von einer 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'
   }
}

, die eine 404-Seite macht, wenn Sie die alten „nicht zugeordneten“ Controller-Aktionen aufrufen. Sie benötigen Grails-app / views / errors / notFound.gsp erstellen eine entsprechende 404-Seite zu zeigen.

Das erste URL-Mapping sorgt dafür, dass Ihre überschriebene Aktion aufgerufen wird. Die 2. Routen alles andere an den ursprünglichen Controller. Und der dritte sendet 404s für den direkten Zugriff.

Andere Tipps

Mit Grails 1.3.7 und Nimble Plugin 0,4 Ich fand, dass Burts UrlMapping Lösung nicht für mich arbeiten. Doch einfach einen Controller zu schaffen, dass beide Unterklassen das Plug-Controller und hat den gleichen Namen gearbeitet, pro Burts andere Antwort

class AuthController extends grails.plugins.nimble.core.AuthController{

    private static String TARGET = 'grails.plugins.nimble.controller.AuthController.TARGET'

    def login = {
        // custom logic here    
    }
}

würde ich die ursprüngliche Klasse Unterklasse und das Verhalten außer Kraft setzen Sie benötigen. Ich tue viel, dass mit einem anderen Plugin, und es funktioniert super.

Eine andere Möglichkeit ist natürlich das Plugin Inline zu verwenden und nur die ursprüngliche Quelle zu ändern, aber das ist noch schlimmer, da ein Problem mit Upgrades haben werden.

Ich bin auch ein Benutzer von Nimble, und wenn Sie denken, dass Ihre Erweiterung von anderen verwendet werden könnte, dann könnte man beitragen - flink sicher zu machen versucht, sicher, es ist sehr dehnbar.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top