2013年1月14日

Grails 好用的 LinkGenerator 與 MimeUtility 隱藏版 Helper

Grails 2.x 之後的版本帶來兩個好用的 Helper,可惜在官方文件沒有太多介紹,算是隱藏版的功能。

### LinkGenerator ###

一般來說,產生 Grails 的連結有幾種方式:
  1. <g:link ... />
  2. <g:resource ... />
  3. ${createLink(...)}
  4. ${resource(...)}

但有些特殊網址不容易透過這種標準方式產生,但很該死的在舊版 Grails 並沒有方便的標準方法,可以拿到「Base URL」,例如「http://compnay.com/app」這種!

雖然透過 request 物件,也可以自己將 URL 組合出來;但是不免還是要懷疑,一個 Web Framework 怎麼連這麼基本的東西都沒有?!

Grails 2.x 之後可以利用 LinkGenerator 幫忙,在 Controller / Service 程式中,可以定義一個 grailsLinkGenerator 變數來取得此物件實例(透過 Injection 方式)。

    class XxxController {
        def grailsLinkGenerator // Injection
    }

如此就能在程式中存取其方法:

    grailsLinkGenerator.contentPath
    grailsLinkGenerator.serverBaseURL
    grailsLinkGenerator.link ...
    grailsLinkGenerator.resource ...

特別是在設計 TagLib 時,LinkGenerator 就有很多用處了。

### MimeUtility ###

這是用來取得 Mime Types 的物件,雖然 Grails 內建能辨別的 Mime Types 並不多,但至少可以依循這個標準的介面來擴充。

使用方式同樣是透過 Injection,

    class XxxController {
        def grailsMimeUtility // Injection
    }

以下是幾種使用範例。

    log.info grailsMimeUtility.knownMimeTypes
    log.info grailsMimeUtility.getMimeTypeForExtension('html')
    log.info grailsMimeUtility.getMimeTypeForURI('http://example.com/test.html')

沒有留言:

張貼留言

lyhcode by lyhcode
歡迎轉載,請務必註明出處!