2012-05-08 2 views
3

Grails 어플리케이션에 두 개의 도메인 클래스가 있습니다 (예 : AuthorBook). 나는 기본 URL 맵핑을 사용하고 있습니다 :Grails URL에 이름을 포함하십시오.

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

그래서 상대 URL은 2 /book/show/2입니다 ID로 책을 표시합니다. ID가 5 인 작성자를 표시하려면 /author/show/5입니다. AuthorBook 클래스는 모두 name 속성을 갖지만 고유 한 것은 아닙니다.

SEO 이유로 인해이 URL에이 이름을 포함하고 싶습니다. URL을 /book/show/2/the+davinci+code으로 표시하고 작성자에게 표시 할 URL을 /author/show/5/dan+brown으로 변경하십시오. 내 페이지에 기존의 (외부) 링크를 깨는 방지하기 위해

, 내가 이상적으로 두 형식을 모두 지원하고 싶은 다음 중 하나가 댄 브라운의 페이지가 표시됩니다 있도록

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

현재 내가있는 위치 (ID가있는 URL 만)에서 내가 원하는 (ID와 이름도 지원되는 URL) 위치로 이동할 수있는 가장 쉬운 방법은 무엇입니까?

답변

0

난 당신이 또 다른 규칙을 추가 할 수 있습니다, 그것을 시도했지만되지 않은 :

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

은 다음 PARAMS 컨트롤러 모두 ID와 이름을 얻을 수있을 것입니다을

def show(id, name) { 

} 
1

Don,

두 가지 옵션이 있습니다. 당신이 (당신이 이미 고유 ID를 가지고 있기 때문에, 옵션처럼 보인다) 전혀 논리에서 이름을 사용하지 않을 경우 첫째, 당신은 다음과 같은 방법으로 URL 매핑을 수정할 수 있습니다

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

이 부가됩니다 모든 요청에 ​​추가 매개 변수. 당신은 당신이 "/ 저자/쇼/10/같은 URL을 일치이

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 
      } 
    } 
} 

먼저 두 가지 규칙처럼 UrlMappings.groovy를 수정해야 만 저자예약 컨트롤러를하고 싶은 경우 dan + brown "및"/ author/show/10 "뿐 아니라 매개 변수 이름 을 통해 show 메서드에서 이름의 매개 변수에 액세스 할 수 있습니다.

관련 문제