Play 1.2.X でできること
Router.addRoute("GET", "/somePath", "controller.methodName");
モジュール内のコントローラーによって処理される「ルート」を追加するモジュールを作成しています。これは OAuth ハンドラーであり、ユーザーが OAuth ハンドシェイクなどを処理する必要がないように簡単にしたいと考えています。
Play 2.0 でこれを行うにはどうすればよいですか?
Play 1.2.X でできること
Router.addRoute("GET", "/somePath", "controller.methodName");
モジュール内のコントローラーによって処理される「ルート」を追加するモジュールを作成しています。これは OAuth ハンドラーであり、ユーザーが OAuth ハンドシェイクなどを処理する必要がないように簡単にしたいと考えています。
Play 2.0 でこれを行うにはどうすればよいですか?
プログラムで Routes オブジェクトに追加することはできませんが、Web リクエストをインターセプトして、オーバーライドすることで自分で処理できますGlobalSettings.onRouteRequest
。例えば:
override def onRouteRequest(request: RequestHeader): Option[Handler] = {
//do our own path matching first - otherwise pass it onto play.
request.path match {
case "/injectedRoute" => Some(controllers.Application.customRoute)
case _ => Play.maybeApplication.flatMap(_.routes.flatMap {
router =>
router.handlerFor(request)
})
}
}
これが推奨されるアプローチであるかどうかはわかりませんが、私にとってはうまくいきます。github のサンプルは次のとおりです: https://github.com/edeustace/play-injected-routes-example
できるかどうかわかりません。
Play 2.0 のコンセプトは、routes ファイルを含む型安全性に焦点を当てることでした。ルート ファイルは、実行時に解釈されるのではなく、コンパイルされるようになりました。ルート ファイルのコードを見ると、ルート ファイル自体から scala クラスが生成されます。したがって、実行時の操作は単純に無視されます。
残念ながら、http リクエストをインターセプトして特定のルートを自分でチェックする意思がない限り、ルートは routes ファイルで定義する必要があるように見えます。
ルート ファイルに一般的なルートを追加できます (宣言の場所に基づいて優先度が評価されるため、ファイルの最後に)。
GET /:page controllers.Application.showPage(page)
実行時に実行したいロジックをコントローラークラスに入れます
public static Result showPage(String page){
if(page.contains("abc"){
.....
} else {
//return 404
}
}
それがあなたの要件に適合するかどうかはわかりませんが、ほとんどのシナリオでは十分です.
* play2.0 * *この行をルート ファイルに追加します* GET /somePath controller.methodName()