3

私の Grails アプリには、 と などのドメイン クラスがいくつかありAuthorますBook。デフォルトの URL マッピングを使用しています。

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

したがって、ID 2 の本を表示するための相対 URL は/book/show/2. ID 5 の著者を表示するには、/author/show/5. AuthorBookクラスの両方にnameプロパティがありますが、一意であるとは限りません。

SEO の理由から、これらの URL にこの名前を含めたいと思います。たとえば、本を表示する/book/show/2/the+davinci+codeURL と著者を表示するURL を変更します/author/show/5/dan+brown

私のページへの既存の (外部) リンクを壊さないようにするために、次のいずれかでダン・ブラウンのページが表示されるように、両方の形式をサポートしたいと考えています。

  • /author/show/5
  • /author/show/5/dan+brown

現在いる場所 (ID 付きの URL のみ) から目的の場所 (ID と名前付きの URL もサポート) に到達するための最も簡単な方法は何ですか?

4

2 に答える 2

1

ドン、

2つのオプションがあります。まず、ロジックで名前を使用する予定がまったくない場合(すでに一意のIDを持っているため、オプションのように見えます)、次の方法でURLマッピングを変更できます。

static mappings = {
  "/$controller/$action?/$id?/$extra?"{
    constraints {
      // apply constraints here
    }
  }
}

これにより、すべてのリクエストにオプションのパラメータが追加されます。AuthorBookコントローラーに対してのみ実行する場合は、UrlMappings.groovyを次のように変更する必要があります。

static mappings = {
    "/author/show/$id?/$name?" (controller:"author", action: "show")
    "/book/show/$id?/$name?" (controller:"book", action: "show")
    "/$controller/$action?/$id?" {
          constraints {
          // apply constraints here
          }
    }
}

最初の2つのルールは、「/ author / show / 10 / dan+brown」や「/author/ show / 10」などのURLに一致し、 params.nameを介してshowメソッドからnameパラメーターにアクセスできます。

于 2012-05-08T22:55:08.560 に答える
0

試したことはありませんが、別のルールを追加してみてください。

"/author/show/$id/$name"{
    constraints {
        controller='author'
        action='show'
    }
}

そうすれば、コントローラーのパラメーターでIDと名前の両方を取得できるようになります。

def show(id, name) {

}
于 2012-05-08T13:45:28.517 に答える