我的play/scala项目中有几个模板。我想访问我的主模板中当前登录的用户。(这样我就可以将欢迎的‘用户名’文本放到所有模板的页面顶部,而不仅仅是“登录页面”)
我可以在我的主模板中放置一个参数:
@(user: User)但是,我有几个模板引用了主模板,这些模板没有访问登录用户的权限。像关于,联系等的页面。
唯一能够访问登录用户的模板是“登录”页面。就像用户配置文件,用户设置。从那里,我可以将登录的用户对象传递给主模板。但从其他几页上看我做不到。
如果我将主模板中的参数" user“作为可选参数,那么无论如何都会出现问题,因为如果用户登录,我将在所有页面上使用登录用户数据。
我怎么能解决这个问题?
如果你需要更多的投入,请告诉我。
发布于 2013-11-22 17:49:14
您需要使用会话来存储标识用户的id,例如,使用用户电子邮件作为id,将从控制器中的任何操作中检索用户,在存储在会话中的id的基础上从db检索用户,并将“用户名”作为模板的选项,在没有登录用户的情况下使用选项,如下所示:
def about = Action { implicit request =>
val username:Option[String] = User.findUserName(request.session.get(userSession))
Ok(views.html.Applications.about(username)
}有关模板的示例,只需将用户名传递给主模板即可。
@(username:Option[String])
@main(username) {
// your content
}主模板示例,如果定义了用户名,则显示用户名
@(username: Option[String])(content: Html)
@if(username.isDefined) {
<p> username.get</p>
}发布于 2013-11-22 16:39:00
如果我对你的理解是正确的,你需要这个:
控制器(Application.scala):
object Application extends Controller {
def index = Action {
val user = "smth" //assign your user name here
val parameter = "another parameter"
Ok(views.html.yourTemplate(user, parameter))
}
}模板(yourTemplate.scala.html):
@(user: String, parameter: String)
<!--main template wrapping yourTemplate-->
@main("Welcome") {
<p>Hello, @user</p>
}https://stackoverflow.com/questions/20148523
复制相似问题