Action 在游戏框架(Scala)中意味着什么?

What does Action mean in play framework (Scala)?

我是 Play Framework 的新手,正在尝试理解 SimpleRouter class。在 Play 文档中,我看到一个简单的例子:

val router = Router.from {
  case GET(p"/hello/$to") =>
    Action {
      Results.Ok(s"Hello $to")
    }
}

但是我不确定什么是Action,它的意义是什么?我看到它也在所有其他路由方法中大量使用。这是文档的 link:https://www.playframework.com/documentation/2.8.x/ScalaSirdRouter

我的参考代码:

import play.api.mvc._
import play.api.routing.Router._
import play.api.routing._
import play.api.routing.sird._


class CacheRouter extends SimpleRouter {



  override def routes: Routes = {
    case GET(p"/") =>
      Action {
        Results.Ok(s"Hello")
      }

//    case POST(p"/") =>
//      controller.process
//
//    case GET(p"/$id") =>
//      controller.show(id)
  }

}

根据 Play 文档 here 的 Action 是

basically a (play.api.mvc.Request => play.api.mvc.Result) function that handles a request and generates a result to be sent to the client.

换句话说,一个 Action 是 http 请求的服务器端的完整实现,能够接受 play.api.mvc.Request 并做一些工作,并且 return play.api.mvc.Result

在您的示例中,操作不使用请求中的任何内容,return是一个静态 HTTP 200 响应,内容为 hello

编辑: 从此处的评论看来,您遇到的问题是代码示例中的 Action 未得到解决。 这样做的原因是,这实际上不是对 play.api.mvc.Action 的引用,而是构造 Actions.

的辅助方法。

此辅助方法在 play.api.mbc.AbstractController 中定义,您可以对其进行扩展以使用它。

例如:

  class CacheRouter @Inject()(cc: ControllerComponents) extends AbstractController(cc) with SimpleRouter {
    override def routes: Routes = {
      case GET(p"/") =>
        Action {
          Results.Ok(s"Hello")
        }
    }
  }
}

请记住,以上是使用 Plays guice 集成进行依赖项注入,但这只是众多可用选项之一。