例:
pkg1.foo.HelloController と pkg2.bar.HelloController を共存させられるか?
答え:不明。多分Grailsのデフォルトの機能としては提供されてない。でもある程度デメリットを受け入れればカスタマイズ出来るかも。 (Grails-2.1.x時点)
※あくまでも2012-10-08時点での調査結果になります。Grailsのバージョンアップや、自分自身のGrailsの習熟により受け入れられる水準の運用による対応やカスタマイズ方法が出てきたらその時また追記していきます。
あまり断言できるほど調査できてないのですが、StackOverflowでも似たような質問が幾度も繰り返され、すべて玉砕している状況から多分今のところ、Grailsのデフォルトの機能としては提供されていないんじゃないかと思われます。
リクエスト上げてみても良いかもですが・・・。
パッケージによりマッピングを分ける、という技法はあるらしいんですよ。
myapp.user.MyAccount ... ログイン中のユーザが自分のアカウント情報を確認 myapp.admin.UserAccount ... 管理者によるユーザアカウント管理
みたいな構成にしておいて、
"myapp.user"以下のController -> "/user/$controller/$action?" にマッピング "myapp.admin"以下のController -> "/admin/$controller/$action?/$id?/" にマッピング
というのは出来る。ただし、コントローラ名の重複までは許されない・・・らしい。(順不同でどっちかに上書きされる?)
このへん、Grails内部でのController管理がどうなっているのか、に依ってくると思います。そのへんは現時点ではまだまだ調査不足です。
もしかしたら上記技法の応用で、厳密にクラス名のFQNを使ってURLをマッピングすることも出来るかもしれません。
しかし、UrlMappingsを調整できたとしても・・・TagLibの"<g:link>"や"<g:createLink>", "<g:form>"などにも影響してきます。これらのGrailsタグのcontroller属性においても、クラスのFQNにしたがってマッピングされているURLを逆引きする機能が必要な・・・ハズ、です(内部実装全く調べてないので推測でしか無いのですが)。
ただしこの制限も、"<g:createLink>"や"<g:link>", "<g:form>"などで"controller", "action"パラメータを指定するだけで済ませる場合、の制限になります。もしかしたら"url"パラメータに指定するmapと、UrlMappingsのURLパターン中のパラメータをうまく突き合わせることで、色々と回避する方法があるかもしれません。
以下、色々と漁ってみた資料です。
コメント