2015-09-15 31 views
5

這先前的問題可作爲基線什麼「子模塊」是指當前討論的目的:Play Framework [2.4.x] Working with Sub Modules播放框架[2.4.x的]如何解決公有資產在一個子模塊的路由文件

如果您瞭解一個Play子模塊,然後給出該上下文如何進入子模塊的路由條目以公開來自「公共」文件夾的資產?

每當我試圖做一個基本的條目(如下所示),我的整個根模塊無法編譯一個單一的路線,但我沒有得到「可用」錯誤或其他指標可能發生了什麼。

GET /assets/*file controllers.Assets.at(path="/public", file) 

即使我註釋掉根項目中的條目,也會發生編譯器錯誤。

正如我所有的子模塊控制器都有一個前綴我想,(當然)

GET /assets/*file controllers.submodule.Assets.at(path="/public", file) 

唉,不工作,要麼但至少我得到一個有用的錯誤告訴我type Assets is not a member of package controllers.submodule

有什麼建議麼?

PS:是的,我也試過的情況下,採取進入了根的路由文件它只是一個名字空間衝突......

回答

4

您的子模塊控制器包來創建一個資產控制器:

package controllers.submodule 

class Assets extends AssetsBuilder(DefaultHttpErrorHandler) 

然後宣佈路線此控制器在路由器文件的子模塊(它應該被命名爲submodule.routes):

GET /submodule/public/*file controllers.submodule.Assets.versioned(path="/public", file: Asset) 

這是更好地使用子模塊的名稱爲路由添加前綴,以避免在其他子模塊名稱與靜態路由條目匹配的情況下進行路由切換。

一兩件事:

lib/submodule/css... 
lib/submodule/js... 

所以,你必須更新你的看法那樣:

<script type="text/javascript" src="@controllers.submodule.routes.Assets.versioned("lib/submodule/js/your-submodule-script.js")"></script> 

所有靜態文件都在你的根模塊的「LIB」文件夾託管編輯:不要忘記將其添加到您的根模塊的路由文件(命名路由)

->/submodule.routes 
+0

在主要路徑文件中(主要項目的路由感覺),我有這個小寶石:' - >/submoduleNAME submodule.Routes',它實際上從外部角度給出了子模塊的別名。好奇的是,這是否會適用,但大聲思考,我懷疑它甚至不重要... – Techmag

+0

並且在哪裏可以找到錯誤處理程序? '構造函數AssetsBuilder沒有足夠的參數:(errorHandler:play.api.http.HttpErrorHandler)controllers.AssetsBuilder.' – Techmag

+0

我沒有提到它,但是您必須將此行添加到根模塊的路徑文件中。我只是編輯我的回答 – Maxime