如何将Array从一个Controller共享到另一个Controller

时间:2016-08-05 12:55:01

标签: scala twitter reddit

我是斯卡拉的新手。我在做什么是试图让twitter机器人从Reddit收集帖子并将它们发布到Twitter。我必须控制器,我需要传递一个带有标记的reddit帖子的数组,用户想要推文,从一个控制器到另一个控制器。我尝试过使用Singleton和Cache但是,我不知道为什么,它不能为我工作

RedditController:

var pickedToTwitter : List[RedditJsonData] = _
  def pickedRedditsPost = Action { implicit  request =>

    redditsForm.bindFromRequest.fold(
      formWithError => {
        formWithError.errors.foreach(er => Logger.debug(er.message))
        Ok(views.html.main("asd")(Html("error")))
      },
      goodOne => {
        sessionCache.set("1",pickedToTwitter = redditsJson.filter(el => goodOne.redditsList(redditsJson.indexOf(el)).checked))

        //Ok(views.html.main("asd")(Html(pickedToTwitter.mkString)))
        Redirect("/redditsSend")
      }
    )
  }

TwitterController

  val tweet : Option[List[RedditJsonData]] = sessionCache.get[List[RedditJsonData]]("1")


    def send = Action.async { request =>
      //for(i <- 0 to tweet.toList.length)  {
      val data = Map(
        "status" -> "asf"
      )

      var rt: RequestToken = new RequestToken(request.session.get("token").get, request.session.get("secret").get)

      ws.url("https://api.twitter.com/1.1/statuses/update.json?status=" + tweet.get(0).url).sign(OAuthCalculator(KEY, rt)).post("ignored").map(response => {
        Ok(views.html.main("asd")(Html(response.body)))
        //Redirect(response.body)
      })
    //}
  }

1 个答案:

答案 0 :(得分:0)

在我的示例中,您会看到Singleton和Cache。你需要小心导入,如果它们稍有错误,一切都会崩溃。我没有让CacheAPI工作,错误需要更多关注。

单身人士:

package controllers.singletons
import javax.inject.Singleton

@Singleton
class Test() {
  val message:String = "Test"
}

控制器应用程序:

package controllers
import javax.inject.Inject
import controllers.singletons.Test
import play.api.Play.current
import play.api.cache._
import play.api.mvc._

class Application @Inject()(test:Test)extends Controller {
  def index = Action {
    Cache.set("a", "this is a test")
    Ok(views.html.index(test.message))
  }
}

Controller CacheTest:

package controllers
import play.api.cache.Cache
import play.api.Play.current
import play.api.mvc.{Action, Controller}

class CacheTest  extends Controller{
  def cache = Action {

    Ok(views.html.cacheWorks(Cache.get("a").getOrElse("Not Working").asInstanceOf[String]))
  }
}

我有两条路线

GET     /                           controllers.Application.index
GET     /cache                      controllers.CacheTest.cache

有两个HTML页面可以获取缓存和单例内容并显示它。我认为这是你可以从代码中看到的,这很简单。