避免在 play 框架中的所有 scala 动作中执行相同的方法
avoid executing the same method in all scala actions in play framework
我有一个每个控制器都继承的特征。要求是检查控制器中定义的所有动作中的url。我发现在每个控制器中执行此方法非常烦人。有没有办法只在一个地方执行这个方法?
特质
trait Validator extends Controller {
def checkurl(implicit request:RequestHeader)={
//code to check url
}
}
控制器
object UserHandler extends Controller with Validator{
def showuser = Action {
implicit request =>
checkurl(request)
Ok("...")
}
你可以定义一个助手def
:
trait Validator extends Controller {
def checkurl(implicit request: RequestHeader)={
//code to check url
}
def checkedAction(block: Request[AnyContent] => Result): Action[AnyContext] =
Action { implicit request =>
checkUrl
block(request)
}
}
object UserHandler extends Controller with Validator {
def showuser = checkedAction { implicit request =>
Ok("...")
}
}
您可以扩展 GlobalSettings
并覆盖 onRequest
方法。它是对您的应用程序发出的所有请求的拦截器。
我有一个每个控制器都继承的特征。要求是检查控制器中定义的所有动作中的url。我发现在每个控制器中执行此方法非常烦人。有没有办法只在一个地方执行这个方法?
特质
trait Validator extends Controller {
def checkurl(implicit request:RequestHeader)={
//code to check url
}
}
控制器
object UserHandler extends Controller with Validator{
def showuser = Action {
implicit request =>
checkurl(request)
Ok("...")
}
你可以定义一个助手def
:
trait Validator extends Controller {
def checkurl(implicit request: RequestHeader)={
//code to check url
}
def checkedAction(block: Request[AnyContent] => Result): Action[AnyContext] =
Action { implicit request =>
checkUrl
block(request)
}
}
object UserHandler extends Controller with Validator {
def showuser = checkedAction { implicit request =>
Ok("...")
}
}
您可以扩展 GlobalSettings
并覆盖 onRequest
方法。它是对您的应用程序发出的所有请求的拦截器。