リクエストに基づいてデータを入力し、コントローラーに渡すためplay.api.mvc.Action
に使用できるカスタムを作成しようとしています。CustomerAccount
CustomerAccount
Play 2.2.xのドキュメントに従ってAction
andを作成しましたが、アクション内で fromActionBuilder
を返すことができないようです。CustomerAccount
私の現在のコードは次のとおりです。
case class AccountWrappedRequest[A](account: CustomerAccount, request: Request[A]) extends WrappedRequest[A](request)
case class Account[A](action: Action[A]) extends Action[A] {
lazy val parser = action.parser
def apply(request: Request[A]): Future[SimpleResult] = {
AccountService.getBySubdomain(request.host).map { account =>
// Do something to return the account like return a new AccountWrappedRequest?
action(AccountWrappedRequest(account, request))
} getOrElse {
Future.successful(NotFound(views.html.account_not_found()))
}
}
}
object AccountAction extends ActionBuilder[AccountWrappedRequest] {
def invokeBlock[A](request: Request[A], block: (AccountWrappedRequest[A]) => Future[SimpleResult]) = {
// Or here to pass it to the next request?
block(request) // block(AccountWrappedRequest(account??, request))
}
override def composeAction[A](action: Action[A]) = Account(action)
}
注:block(request)
関数はAccountWrappedRequest
入力できない型を想定しているため、これはコンパイルされません。ストレートを使用するとコンパイルされますRequest
さらに...
最終的には、このアカウント アクションを認証アクションと組み合わせて、認証アクションCustomerAccount
に渡して、その顧客のアカウントに基づいてユーザー認証を提供できるようにしたいと考えています。次に、顧客アカウントとユーザーをコントローラーに渡します。
例えば:
Account(Authenticated(Action))) { request => request.account; request.user ... }
カスタムリクエストオブジェクトを必要としない個々のオブジェクトとして。