5

我正在尝试开发一个具有“根”内容(例如 www.mydomain.com/about)但还将支持基于请求的子域的“项目”的 grails 应用程序;例如 myproject.mydomain.com > www.mydomain.com/myproject。作为第一遍,我有以下 URL 配置:

"/$controller/$action?/$id?" {
 ...
}

"/$project/$controller/$action?/$id?" {
    constraints {
    }
}

到目前为止的主要缺点是 $project 变量必须手动注入每个链接(乏味而不是 DRY):

<g:link controller="foo" action="bar" params="${[project: params.project]}">link</g:link>

有没有办法自动将 $project 参数注入所有链接(如果存在),还是有更好的方法来解决这个问题?

4

2 回答 2

1

基本上,您可以创建一个grails 插件,该插件将向控制器注入一个新project参数,其值基于自定义 TagLib <g:project bean="myproject"/>(例如)

它会强制你在项目的每个 gsp 页面上定义这个 tagLib,但它仍然比每个链接更干燥。

希望能帮助到你,

法比安。

于 2009-11-20T22:27:46.923 回答
0

我能想到几件事。

a)您可以在您的应用服务器前面放置一个代理(Apache 或其他东西)并进行一些 url 重写。奖励:这也将允许您对静态资源进行一些缓存。

b) 这个解决方案在技术上更有趣。您可以根据 http 主机标头(子域部分)查找项目。这将使您免于重写所有 url,所有 Grails 约定仍然适用,因此您不应该遇到任何第三方插件等问题。

于 2009-11-22T12:29:12.520 回答