将控制器名称映射到URL(包)

时间:2010-09-13 17:46:16

标签: grails

是否可以使用它们作为子文件夹的包来配置grails来解析控制器和操作?

例如,假设我有以下目录结构:

/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

2 个答案:

答案 0 :(得分:3)

我会对将直接映射到您的包名称有点谨慎。这样做会使你将来很难重构,特别是一旦你的应用程序出现在外面。这也违背了Grails的传统特性。

但是,您仍然可以手动构建网址以映射到不同的路径。对于你的问题,这是一个例子:

// 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?' {}

由于控制器通常通过名称引用,例如在你的情况下,“用户”,违反这一惯例并不容易;它试图与框架作斗争,而不是让它为你工作。

可能可能基于包执行此操作(可能使用Reflection,或其他什么?),但不建议。

答案 1 :(得分:1)

我相信您正在寻找Grails URLMapping约束。看这里:Grails - URL mapping