如何将数组从一个控制器共享到另一个控制器
How can I share Array from one Controller to another
我是 Scala 新手。我正在做的是尝试让 Twitter 机器人从 Reddit 收集 post 并将它们 post 发送到 Twitter。我必须控制器,我需要传递一个带有标记的 reddit posts 的数组,该用户想要发推文,从一个控制器到另一个控制器。我试过使用 Singleton 和 Cache,但我不知道为什么,它对我不起作用
Reddit 管理员:
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")
}
)
}
推特控制器
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)
})
//}
}
在我的示例中,您看到了一个单例和一个缓存。你需要小心导入,如果它们稍有错误,一切都会崩溃。我没有让 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))
}
}
控制器缓存测试:
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 页面正在获取缓存和单例内容并显示它。我认为这就是您可以从代码中看到的内容,非常简单。
我是 Scala 新手。我正在做的是尝试让 Twitter 机器人从 Reddit 收集 post 并将它们 post 发送到 Twitter。我必须控制器,我需要传递一个带有标记的 reddit posts 的数组,该用户想要发推文,从一个控制器到另一个控制器。我试过使用 Singleton 和 Cache,但我不知道为什么,它对我不起作用
Reddit 管理员:
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")
}
)
}
推特控制器
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)
})
//}
}
在我的示例中,您看到了一个单例和一个缓存。你需要小心导入,如果它们稍有错误,一切都会崩溃。我没有让 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))
}
}
控制器缓存测试:
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 页面正在获取缓存和单例内容并显示它。我认为这就是您可以从代码中看到的内容,非常简单。