【问题标题】:Play2 for Scala: is Action Chaining a missing feature?Scala 的 Play2:Action Chaining 是缺少的功能吗?
【发布时间】:2014-03-12 04:27:01
【问题描述】:

几天前,我遇到了 Play 最终缺失的一个功能,那就是动作链。这就是我的意思:

我有一个带有两个动作的控制器,我想从另一个动作中调用一个动作以保持 DRY。我的目标是在用户登录后自动登录。

object MyController extends Controller {

   def signOn = Action {
      // ... do stuff to sign the user on
      signIn  // call the next Action
   }


   def signIn = Action {
      // ... do stuff to sign the user in
      Ok("Welcome, Dude!") 
   } 
}

我在这里找到了这个不错但过时的解决方案(适用于 Play 2.0.x)

http://www.natalinobusa.com/2012/07/chained-actions-in-play-framework-20.html

现在我正在尝试在 Play 2.2.x 上编写类似的东西,但我想知道它是否真的是一个缺失的功能,以及你们中的一些人是否已经实现了类似的东西。

最后:您认为在框架中加入它会很好吗?

【问题讨论】:

  • 官方文档中的这个页面没有回答你的问题? playframework.com/documentation/2.2.2/ScalaActionsComposition
  • 在某种程度上,是的,它可以解决我的需求,但我正在寻找一种不同的方法。 Johan 发布的解决方案正是我想要的。无论如何,谢谢,我很感激你的建议。
  • 对不起,我很挑剔。 :-) 但是接受的答案中显示的方法也记录在该页面中(在组合操作下,第二个代码块)。
  • 糟糕!你说得对,我没注意到

标签: scala playframework-2.0


【解决方案1】:

那样做怎么样?

def signOn = Action.async { request => 
  // ... do stuff to sign the user on
  signIn(request)  // call the next Action
}

def signIn = Action {
  // ... do stuff to sign the user in
  Ok("Welcome, Dude!")
}

【讨论】:

    【解决方案2】:

    Johan 提出的解决方案正是我所寻找的。我最终得到了这个(不错的?)解决方案,用于一个整洁的链式动作控制器

    package controllers
    
    import play.api._
    import play.api.mvc._
    
    object TestCtrl extends Controller {
    
      def signOn = Action.async { request => 
      // ... do stuff to sign the user on
        if ( true ) 
          signIn(request)  // call the next Action
        else
          stopChaining( Ok("Stop") )(request)
      }
    
      def signIn = Action {
        // ... do stuff to sign the user in
        Ok("Welcome, Dude!")
      }
    
      private def stopChaining(result: SimpleResult) = Action {
        // ... do nothing, just return the result
        result
      }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2015-05-15
      • 1970-01-01
      • 2018-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多