2010-09-13 57 views
1

是否可以配置grails來解析控制器和使用它們作爲子文件夾的包的操作?將控制器名稱映射到URL(包)

例如,說我有以下目錄結構:

/grails-app/controllers/HomeController.groovy (with action index) 
/grails-app/controllers/security/UserController.groovy (with actions index, edit) 
/grails-app/controllers/security/RoleController.groovy (with action index, edit) 

我想Grails的自動生成以下URL映射:

http://localhost:8080/myApp/ => HomeController.index 
http://localhost:8080/myApp/security/user/ => UserController.index 
http://localhost:8080/myApp/security/user/edit => UserController.edit 
http://localhost:8080/myApp/security/role/ => RoleController.index 
http://localhost:8080/myApp/security/role/edit => RoleController.edit 

回答

3

我會有點警惕將它們映射到直接到您的軟件包名稱。這樣做會使你很難在將來重構,特別是一旦你的應用程序出現在外面。這也違背了Grails的傳統性質。

但是,您仍然可以手動構建您的URL以映射到不同的路徑。對於你的問題,這裏有一個例子:

// grails-app/conf/UrlMappings.groovy 

'/security/user/$action?/$id?' (controller: 'user') 
'/security/role/$action?/$id?' (controller: 'role') 

// the rest of the default UrlMappings are below 
'/$controller/$action?/$id?' {} 

由於控制器通常是按名稱引用的,例如, 「用戶」在你的情況下,違背這個約定並不容易,它會試圖打擊框架,而不是讓它爲你做這項工作。

這可能是可能要做到這一點基於包(也許使用反射,或者什麼?),但不建議。

+0

我看到了不希望直接映射它們的情況,以免稍後需要重構代碼。但是由於無論如何,控制器應該是非常愚蠢的,他們不應該真的需要重構。另外,我想重構控制器的時候,我通常會隨着它們一起改變視圖。我的目標主要是讓團隊中的其他開發人員更容易找出哪些控制器屬於哪些操作。 – Blacktiger 2010-09-13 18:44:17

+0

@Blacktiger - 我會同意控制器不應該是複雜的事情。但是,我認爲你可能會在這裏解決你的問題。開發人員應該很容易通過查看所有控制器名稱來找出他們需要的控制器/操作。通過將它們放入單獨的包中,您可能實際上正在努力找到它們,因爲開發人員必須查看樹中的多個目錄才能看到控制器名稱。 – 2010-09-13 18:56:19

+0

@Blacktiger - 我的回答可能沒有足夠強調,但我最終想說的是,使用軟件包名稱與Grails正在嘗試爲常規做的事情不符。 – 2010-09-13 18:57:23

1

我相信你正在尋找Grails的urlMapping中約束。看看這裏:Grails - URL mapping

+0

鏈接損壞,目前http://docs.grails.org/latest/guide/theWebLayer.html#urlmappings(或者在特定版本中可能更穩定http://docs.grails.org/2.5.5/guide/ theWebLayer.html#urlmappings) – 2016-08-17 18:23:49