home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

Groovy/Grails/同じコントローラクラス名を、パッケージだけ分けて共存できるか?

Groovy/Grails/同じコントローラクラス名を、パッケージだけ分けて共存できるか?

Groovy / Grails / 同じコントローラクラス名を、パッケージだけ分けて共存できるか?
id: 1111 所有者: msakamoto-sf    作成日: 2012-10-08 20:39:30
カテゴリ: Grails Groovy 

例:

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パターン中のパラメータをうまく突き合わせることで、色々と回避する方法があるかもしれません。

以下、色々と漁ってみた資料です。



プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2012-10-08 21:00:22
md5:56ddb0bc80fcb5089c6c3d045e4e2a37
sha1:1ab9f94262a388607a988d68b21157b3bd540d40
コメント
コメントを投稿するにはログインして下さい。