Pregunta

El plug-in (0,3 ágil) estoy usando en mi solicitud griales, incluye algunos controladores y las acciones asociadas. Quiero cambiar (ligeramente) un comportamiento acciones , y me preguntaba cómo puedo lograr eso.

¿Puedo crear un niño controlador que hereda de mi regulador del complemento y reemplazar algunos de la implementación acción?

O, puedo crear otro controlador con el mismo nombre como el controlador de plug-in, pero situado en un paquete diferente?

Bueno, en realidad lo que realmente hay que entender es:? cómo Griales determina qué controlador de la acción a la llamada cuando hay conflictos de nombre

¿Fue útil?

Solución

Asumiendo que tiene un controlador plug-in llamado PluginController y una acción 'foo' que desea anular, puede subclase el controlador:

class MyController extends PluginController {

   def foo = {
      ...
   }
}

pero tendrá que hacer algún trabajo en 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")
   }
}

y esto depende de una 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'
   }
}

que hace que una página 404 si se llama a las viejas acciones del controlador "sin asignar". Tendrá que crear Grails-app / views / errores / notFound.gsp para mostrar una página apropiada 404.

La primera asignación de dirección URL asegura que su acción se llama reemplazado. El 2º rutas todo lo demás para el regulador original. Y el tercero envía 404 para el acceso directo.

Otros consejos

Con Grails 1.3.7 y ágil plugin de 0,4 encontré que la solución UrlMapping de Burt no funcionó para mí. Sin embargo, la simple creación de un controlador que ambas subclases el controlador plugin y ha trabajado el mismo nombre, por otra respuesta

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

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

    def login = {
        // custom logic here    
    }
}

Me subclase de la clase original y reemplazar el comportamiento que necesita. Estoy haciendo mucho de eso con otro plugin, y funciona muy bien.

Una forma alternativa es, por supuesto, utilizar la línea plugin y basta con modificar la fuente original, pero que es peor, ya que tendrá un problema con las actualizaciones.

También soy un usuario de ágil, y si considera que su extensión podría ser utilizada por otras personas, entonces se podría contribuir - ágil, sin duda trataron de asegurarse de que es muy extensible.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top