2016-07-30 53 views
0

我需要在視圖中創建URL時隱式傳遞一些變量。播放框架2:隱式值視圖

我有行動控制器:

class HomeController extends Controller{ 

    def index(implicit lang: Lang) = Action.async { implicit request => { 
     Future[Result] { 
     Ok(views.html.home.index(lang)) 
     } 
    } 

    ... 
    } 

這裏是index.scala.html片段:

@()(implicit lang: Lang) 
@main("Home page") { 
    <ul> 
     <li><a href="@routes.HomeController.index()"><span>Home</span></a> 
    ... 
    </ul> 
} 

但我在@ routes.HomeController.index編譯錯誤( ),方法沒有足夠的參數

爲什麼它是一個錯誤?我如何隱式通過變量創建網址?

+0

從反向路由調用中刪除括號:'@ routes.HomeController.index'。儘管你可能最終會遇到問題,試圖在'index'方法中使用隱式'Lang'。 –

+0

我試過這個,還沒有工作。 「在類ReverseHomeController中缺少方法索引的參數」 – Teimuraz

+0

保持parens並嘗試「def index()(implicit lang:Lang)' –

回答

1

試試這個:

class HomeController extends Controller { 
def index = Action.async { implicit request => { 
     Future[Result] { 
     Ok(views.html.home.index) 
     } 
    } 
    ... 
    } 

不顯式地傳遞朗PARAM進入功能。播放Controller包含從請求到lang的暗示轉換,此lang將自動提供到您的視圖中。

+0

我必須在index方法中使用lang param,因爲我已經定義了這樣的路由:GET/$ lang controllers.HomeController.index(lang:play.api.i18n.Lang)。基本上,我不需要在索引方法中通過lang param,我只需要路由/ 中的一部分,(實際的語言解析器是過濾器中的處理程序,這個我只需要路由)。但沒有/ $ lang ...它不起作用,如果我在路由模式中提供$ lang,比我應該將它傳遞給索引方法,否則我得到編譯器錯誤 – Teimuraz

+0

我不知道我理解你的問題,但是如果你想在方法中保留lang參數,那麼你需要以這種方式重新查看'Ok(views.html.home.index()(lang))' – mgosk