5

Ok(...).withCookies(...)アクションを返すときにCookie を設定できることはわかっています。requestただし、オブジェクトを操作していくつかの Cookie を設定する方法があるかどうかは疑問です。モデルにいくつかの Cookie を設定できるように、コントローラーはそれらを送り返すだけで済みます。

4

1 に答える 1

6

私はこれを演習としてのみ行っています。また、Play フレームワークが非常に柔軟であり、いかなる意味でも制限がないことを示すためにも行っています。Play のソース コードから純粋にこれを行う方法を見つけました。非常にクリーンで読みやすいコードです。これは、Cookie や実際に Play のオブジェクトを操作するための推奨される方法ではありません。JatinHttpRequestが提案したように、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)
于 2013-08-07T08:36:30.850 に答える