【发布时间】:2013-11-21 22:40:57
【问题描述】:
我有一个简单的 Play 应用程序,我需要在其中检查被调用的 url 并相应地使用不同的数据库。我知道在控制器中访问当前 url 很容易,但要使其正常工作,我需要在模型中访问它。
将 url 从控制器传递给模型方法的每次调用会带来很大的不便。有没有其他方法可以解决这个问题?
播放框架 2.2.1 / Scala 2.10.3
更新:这是我的基本示例
控制器 (Application.scala):
package controllers
import play.api._
import play.api.mvc._
import models.Data
object Application extends Controller {
def index = Action {
//Call to model method - model should somehow get the URL without it being passed as a param
val smth: String = Data.getSmth()
Ok(smth);
}
}
型号 (Data.scala):
package models
object Data {
def getSmth: Option[String] = DB.withSession {
val db = //this is where I need the url to decide which database to use
sql"""SELECT #$db.smth FROM smthTable""".as[String].firstOption
}
}
【问题讨论】:
-
我认为无法访问模型中的当前 url。因为该模型与http无关。可能您可以在模型构造函数中定义一个隐式请求参数。但我不认为这是个好主意。
-
@jilen 如何在模型构造函数中定义该参数?我仍然需要通过它或以某种方式访问它。当然,这样的情况应该不少见吧?
-
case class Foo(val bar: Int, val baz: String) case object Foo { def apply(bar: Int)(implicit request: play.api.mvc.Request[_]) = new Foo(bar, request.path) }这样的东西,这确实不是个好主意。 -
@jilen 我认为这不是我想要的。我必须说我很失望,这么明显且常见的问题在 Play 上没有解决方案。
-
有,要么显式传递,要么隐式传递。
标签: scala playframework playframework-2.0