避免在play框架中的所有scala操作中执行相同的方法

时间:2015-01-26 10:22:44

标签: scala playframework

我有一个每个控制器继承的特征。要求是检查控制器中定义的所有操作中的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("...")
}

2 个答案:

答案 0 :(得分:3)

您可以定义帮助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("...")
  }
}

答案 1 :(得分:2)

您可以扩展GlobalSettings并覆盖onRequest方法。它是对您的应用程序发出的所有请求的拦截器。