Как расшириться/переопределить действия контроллера плагинов?

Плагин (Гибкие 0.3) я использую в своем приложении чаш Грааля, включает некоторые контроллеры и связанные действия. Я хочу изменить (немного) некоторое поведение действий, и я задавался вопросом, как я могу достигнуть этого.

Я могу создать дочерний контроллер, который наследовался моему сменному контроллеру, и переопределите часть реализации действия?

Или, я могу создать другой Контроллер с тем же именем как сменный контроллер, но расположенный в другом пакете?

Хорошо на самом деле то, что я действительно должен понять: как Grails определяет, какое действие контроллера назвать, когда существуют конфликты имен?

7
задан Esko 6 February 2010 в 22:47
поделиться

2 ответа

Предположим, у вас есть контроллер подключаемого модуля с именем 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, если вы вызываете старую «несопоставленные» действия контроллера. Вам нужно будет создать grails-app / views / errors / notFound.gsp, чтобы отобразить соответствующую страницу 404.

Первое сопоставление URL-адресов гарантирует, что будет вызвано ваше переопределенное действие. Второй направляет все остальное к исходному контроллеру. А третий отправляет 404 для прямого доступа.

8
ответ дан 7 December 2019 в 01:21
поделиться

Я бы создал подкласс исходного класса и переопределил бы нужное вам поведение. Я часто делаю это с другим плагином, и он отлично работает.

Альтернативный способ - это, конечно, использовать встроенный плагин и просто изменить исходный код, но это еще хуже, поскольку у вас возникнут проблемы с обновлениями.

Я также являюсь пользователем Nimble, и если вы думаете, что ваше расширение может использоваться другими, то вы могли бы внести свой вклад - nimble, безусловно, постарался сделать его максимально расширяемым.

0
ответ дан 7 December 2019 в 01:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: