Tôi có đơn giản hóa mẫu thiết lập sau:Chơi 2.0 truy cập để yêu cầu trong các mẫu
- Main (template)
- Trang chủ
- Chi tiết
Bây giờ khi một người dùng đăng nhập, thuộc tính phiên username
được đặt để tôi có thể tìm nếu người dùng đăng nhập hay không. Để giúp tôi để tìm ra nếu người dùng đang đăng nhập hay không, tôi có đối tượng session helper sau:
object SessionHelper {
val sessionKey = "username"
def authenticated(implicit request: RequestHeader) = {
request.session.get(sessionKey).exists(_ => true)
}
}
nào tôi có thể sử dụng trong một mẫu mà phải mất một đối tượng implicit
yêu cầu, ví dụ:
(implicit request: play.api.mvc.RequestHeader)
...
@if(SessionHelper.authenticated) {
<strong>Authenticated!</strong>
}
...
kể từ — như xa như tôi có thể nói — đây là cách duy nhất để có được một tiềm ẩn biến trong một khuôn mẫu, nó có nghĩa là ở khắp mọi nơi tôi làm cho một cái nhìn, tôi cần phải rõ ràng "xác định" theo yêu cầu tiềm ẩn biến. Ví dụ:
def index = Action { implicit request =>
Ok(views.html.index(myStuff))
}
Nếu không có tuyên bố implicit request =>
thì không biên dịch. Bây giờ trong khi điều này hơi khó xử, miễn là tôi ở trong bất kỳ "khung nhìn phụ" nào (ví dụ: Trang chủ hoặc Chi tiết) thì tốt vì mỗi lần xem tôi có một phương thức điều khiển và cũng như truy cập vào các ẩn số RequestHeader
ví dụ. Tuy nhiên, khi tôi cần truy cập vào phiên trong mẫu của tôi (ví dụ: Chính), điều này không hoạt động vì nó không bao giờ được hiển thị một cách rõ ràng bởi bộ điều khiển.
Tôi không thấy ngay cách truy cập phiên trong mẫu và Google nhanh chóng không tiết lộ nhiều hơn một vài câu hỏi về cùng một chủ đề mà không có giải pháp. Bất kỳ ý tưởng?
Cập nhật: có vẻ như điều này có phần liên quan đến this question.
Với Play 2.3.x, tôi nhận được "không tìm thấy: Yêu cầu giá trị". – Wrench
@Wrench: Nhìn vào câu trả lời của kaka, anh ấy đưa ra một lời giải thích. Tóm lại: bạn có thể có sẵn một số nội dung ẩn. Đào vào lớp học đó –