2012-09-27 4 views
8

私はGrails 2.1.1と協力しており、コントローラアクションに対応するカスタマイズされたURLをいくつか追加したいと考えています。Grails UrlMapping DRYを維持するためのリダイレクト

私はそれを行うことができますが、元のマッピングはまだ機能しています。

例えば、私は次のように私のUrlMappingsにマッピングadd-property-to-directoryを作成:

class UrlMappings { 

    static mappings = { 
     "/add-property-to-directory"(controller: "property", action: "create") 
     "/$controller/$action?/$id?"{ 
      constraints { 
       // apply constraints here 
      } 
     } 

     "/"(view:"/index") 
     "500"(view:'/error') 
    } 
} 

を、私は/mysite/add-property-to-directoryを打つことができると私が期待するとして、それは、PropertyController.createを実行します。

しかし、私はまだ/mysite/property/createを打つことができ、同じPropertyController.createメソッドを実行します。

DRYの精神で、/mysite/property/createから/mysite/add-property-to-directoryに301リダイレクトしたいと思います。

UrlMappings.groovyでこれを行う方法が見つかりませんでした。誰でもGrailsでこれを達成できる方法を知っていますか?

ありがとうございました!

UrlMappings.groovy

class UrlMappings { 

    static mappings = { 

     "/add-property-to-directory"(controller: "property", action: "create") 
     "/property/create" { 
      controller = "redirect" 
      destination = "/add-property-to-directory" 
     } 


     "/$controller/$action?/$id?"{ 
      constraints { 
       // apply constraints here 
      } 
     } 

     "/"(view:"/index") 
     "500"(view:'/error') 
    } 
} 

RedirectController.groovy

class RedirectController { 

    def index() { 
     redirect(url: params.destination, permanent: true) 
    } 
} 
01:ここでUPDATE

はトムの回答に基づいて、私は実装ソリューションです。

+1

現在のところ不可能です。 URLマッピングでリダイレクトを指定できるようにするための機能要求があります。http://jira.grails.org/browse/GRAILS-5994を参照してください。 –

+0

@sudhirありがとう、それは私の質問に答える。私はそれを受け入れることができるようにあなたのコメントを回答にコピーしてください。 –

+0

@sudhir、あなたのコメントと役に立つリンクをありがとう...トムは彼の答えを編集し、私は彼の答えを受け入れたので、探していたことをするために正しい道を私を導いた。 –

答えて

3

これを達成することが可能である:

"/$controller/$action?/$id?" (
    controller: 'myRedirectControlller', action: 'myRedirectAction', params:[ controller: $controller, action: $action, id: $id ] 
) 

"/user/list" (controller:'user', action:'list') 

、あなたが値を取得するアクションでは、のparamsにnormallny:Grailsの2.3のよう

log.trace 'myRedirectController.myRedirectAction: ' + params.controller + ', ' + params.action + ', ' + params.id 
+0

答えてくれてありがとうございますが、 'controller/action/id'のGrails規約に従っている他のコントローラがあるので、メインのマッピングをリダイレクトコントローラに変更できません。明示的なリダイレクトができることを期待していました。 –

+0

標準マッピングで少量のコントローラしか持っていない場合、追加の特定のルールを用意することができます。私は1つを含むように私のコメントを更新しました。 –

+0

ありがとう、トム。私はあなたの答えを受け入れ、それは正しい道で私を導いた。私は実際に 'RedirectController'を作成しましたが、'/$ controller/$ action?/ $ id? 'をそれにマッピングするのではなく、 'property/create'のエントリを作成してURLごとに行います –

0

、行うことが可能であるに直接リダイレクトUrlMappings、リダイレクトコントローラの必要はありません。元の要求の一部であったリクエストパラメータがリダイレクトに含まれます

"/property/create"(redirect: '/add-property-to-directory') 

documentationあたりのように、あなたがこれまでにアップグレードする場合には、あなたは、そのようなUrlMappingsにリダイレクトすることができます。

関連する問題