グローバル関数、つまりヘルパー メソッドのようなコントローラー間で使用できる関数を作成できるようにしたいと考えています。
したがって、1つのコントローラーでできること
useful_function(string)
など...これは可能ですか?
src/groovy に という名前のクラスを作成しましたSiteHelper
が、正しい方向に進んでいますか? クラスのメソッドをSiteHelper
コントローラー全体で使用できるようにしたい。
はい、あなたはほとんど正しい軌道に乗っています。サービス層の一部として作成することを検討することをお勧めします。
たとえば、BootStrap.groovy
次のように、すべてのコントローラー クラスのメタクラスに追加できます。
class BootStrap {
def grailsApplication
def init = { servletContext ->
for (cc in grailsApplication.controllerClasses) {
cc.clazz.metaClass.useful_function = { String s ->
return ...
}
}
}
}
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")
// ...
}
これについて何が重要なのかわかりません。Apache のStringUtils
クラスまたはIOUtils
クラスが行うこととまったく同じように聞こえます。はい、SiteHelper
静的メソッドを使用して を作成し、それをインポートすると、必要なことが行われます。これは、Java の影響を受けた (および他の多くの) 言語での典型的な方法です。