0

グローバル関数、つまりヘルパー メソッドのようなコントローラー間で使用できる関数を作成できるようにしたいと考えています。

したがって、1つのコントローラーでできること

useful_function(string)など...これは可能ですか?

src/groovy に という名前のクラスを作成しましたSiteHelperが、正しい方向に進んでいますか? クラスのメソッドをSiteHelperコントローラー全体で使用できるようにしたい。

4

4 に答える 4

4

はい、あなたはほとんど正しい軌道に乗っています。サービス層の一部として作成することを検討することをお勧めします。

http://grails.org/doc/latest/guide/services.html

于 2013-02-04T20:07:27.947 に答える
3

たとえば、BootStrap.groovy次のように、すべてのコントローラー クラスのメタクラスに追加できます。

class BootStrap {

   def grailsApplication

   def init = { servletContext ->
      for (cc in grailsApplication.controllerClasses) {
         cc.clazz.metaClass.useful_function = { String s ->
            return ...
         }
      }
   }
}
于 2013-02-04T21:41:30.673 に答える
0

Grails のさまざまなコンポーネント間でロジックを共有する標準的な方法は、それをサービスに配置するか、代わりに、リクエスト/レスポンス/params/session/flash などの Web レイヤーにアクセスする必要がある関数の場合は taglib に配置することです。任意のコントローラー アクションからメソッドとして taglib タグを呼び出すことができます。

MyTagLib.groovy

class MyTagLib {
  def sayHello = { attrs, body ->
    out << "Hello ${attrs.name}"
  }
}

MyController.groovy

def someAction() {
  def greeting = sayHello(name:"Ian")
  // ...
}
于 2013-02-04T21:45:32.363 に答える
-2

これについて何が重要なのかわかりません。Apache のStringUtilsクラスまたはIOUtilsクラスが行うこととまったく同じように聞こえます。はい、SiteHelper静的メソッドを使用して を作成し、それをインポートすると、必要なことが行われます。これは、Java の影響を受けた (および他の多くの) 言語での典型的な方法です。

于 2013-02-04T20:02:45.493 に答える