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

前端之家收集整理的这篇文章主要介绍了避免在play框架中的所有scala操作中执行相同的方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个每个控制器继承的特征.要求是检查控制器中定义的所有操作中的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("...")
  }
}

猜你在找的Scala相关文章