2013-08-06 45 views
4

我知道我可以在返回一個動作時在Ok(...).withCookies(...)中設置cookie。不過,我想知道是否有辦法通過操作request對象來設置一些cookie。所以我可以在我的模型中設置一些cookie,我的控制器只需要將它們發回。在Play Framework 2中返回操作之前,我可以設置Cookie嗎?

+0

如果我理解正確的問題,你想在從你的請求對象和基本得到一些信息一些其他的計算設置cookie? 'withCookies'有什麼問題?你可以在所得到的數組上創建一個'Cookie'數組,最後爲數組提供'withCookies'。 – Jatin

回答

5

我這樣做只是爲了鍛鍊,並且還表明Play框架非常靈活,並且不限制您的任何意義。我想通過Play源代碼純粹做到這一點,它非常乾淨,易於閱讀。這是不是在Play中使用Cookie或確實與HttpRequest對象一起使用的首選方式。由於Jatin建議您應將您的Cookie解碼爲適當的模型,將這些模型傳遞給您的服務,然後將您的服務結果轉換爲play.api.mvc.Result,從而保持您的http和業務邏輯層分離。

下面的代碼(你可以看到,Headers對象不打算使用這種方式):

import play.api.http.HeaderNames.COOKIE 

val cookies = Cookies(request.headers.get(COOKIE)).cookies 

val myCookies = cookies + ("cookieName" -> Cookie("cookieName", "cookieValue")) 

val headersMap = request.headers.toMap 

val myHeaderMap = headersMap + 
     (COOKIE -> Seq(Cookies.encode(myCookies.values.toSeq))) 

val myHeaders = new play.api.mvc.Headers { 
    val data:Seq[(String, Seq[String])] = myHeaderMap.toSeq 
} 

val modifiedRequest = request.copy(headers = myHeaders) 
相關問題