2013-12-12 10 views
5

Play 2.2.1 kullanıyorum ve GlobalSettings'deki onRouteRequest işlevini geçersiz kılmaya çalışıyorum. Çevrimiçi bulduğum tüm örnekler Play 2.2.x'ten önce ve 2.2.x'de çalışmıyor gibi görünüyor. Temel olarak tüm yanıtlar için yanıt başlığında bazı özel şeyler ayarlamak istiyorum.Play'da özel işleyicide onRouteRequest'i geçersiz kılma! scala

Şimdiye kadar, hiçbir şey Aksiyon [_] maçları Ancak bu işe yaramazsa this:

object Global extends GlobalSettings { 

    override def onRouteRequest(request: RequestHeader): Option[Handler] = { 
    super.onRouteRequest(request).map { handler => 
     handler match { 
     case a: Action[_] => CustomAction(a) 
     case _   => handler 
     } 
    } 
    } 

dayalı olarak aşağıdakileri denedim.

Tüm yardımlar için şimdiden çok teşekkürler!

cevap

4

Action yerine EssentialAction eşleşmesi gerekir. İşte 2,2

import play.api._ 
import play.api.mvc._ 
import play.api.Play.current 
import play.api.http.HeaderNames._ 

object Global extends GlobalSettings { 

    def NoCache(action: EssentialAction): EssentialAction = EssentialAction { request => 
    action(request).map(_.withHeaders(PRAGMA -> "no-cache")) 
    } 

    override def onRouteRequest(request: RequestHeader): Option[Handler] = { 
    if (Play.isDev) { 
     super.onRouteRequest(request).map { handler => 
     handler match { 
      case a: EssentialAction => NoCache(a) 
      case other => other 
     } 
     } 
    } else { 
     super.onRouteRequest(request) 
    } 
    } 
} 

kod önceki Play Framework sürüm hedeflenen sen atıfta için olan sorudan taşıdık Play Framework her istek için "Pragma" başlığını için "no-cache" nasıl ayarlanacağını gösteren bir örnektir . Ayrıca doFilter yerine onRouteRequest ait kullanabilirsiniz Play Framework 2.1 yana

aynı ulaşmak için:

override def doFilter(action: EssentialAction) = EssentialAction { request => 
    if (Play.isDev) { 
    action(request).map(_.withHeaders(
     PRAGMA -> "no-cache" 
    )) 
    } else { 
    action(request) 
  } 
}