2011-03-22 3 views
1
은 나를 crud 모듈에 대한 기본 경로 인 것으로 판단 할 수있는 방법이있다

/admin, 메인 경로 파일을 직접 구문 분석하는 것 외에? Router 클래스가이 정보를 유지하는 것으로 나타나지 않습니다.얻기 모듈 경로 가져 오기 경로

궁극적 인 목표는 각 모듈에 대한 메뉴를 만드는 것입니다. /useradmin에 가져온 사용자 관리 모듈이있는 경우 /useradmin/users/useradmin/groups이 포함 된 메뉴를 생성하고 /useradmin/users/new과 같은 하위 하위 항목은 생성하지 않습니다. /useradmin이 무언가에 전달되면 메뉴 라벨의 링크로 사용하고, 그렇지 않으면 일반 텍스트 라벨 만 표시합니다.

내가 모르는 사이에 그것을 가짜로 만들 수는 있지만, 모듈의 실제 기본 URL을 알고있는 것이 /modules/useradmin에 가져온 모듈 또는 손자 손길이있는 모듈과 같은 다양한 특수한 케이스를 처리 할 수있는 최선의 방법이라고 생각됩니다. 자식 경로는 없습니다 (/useradmin/users/new이지만 /useradmin/users은 없음).

답변

2

질문 : 왜 파일을 구문 분석하거나 '/ admin'이 기본 파일인지 확인해야합니까? 재생을 사용하면 reverse routing을 사용하여 경로를 가져올 수 있습니다. 예를 들어

,이 경로의 정의와 : 위의 링크에서

코드에서
GET /clients/{id}  Clients.show 

, 당신은 Clients.show 호출 할 URL을 생성 할 수 있습니다

map.put("id", 1541); 
String url = Router.reverse("Clients.show", map).url; // GET /clients/1541 

충분해야합니다.

+0

대부분의 경우 당신은 옳을 것입니다. 그러나 나는 알고 싶은 정당한 이유가 있다고 생각합니다. 나는 당신이 있었던 곳의 메뉴 바와 빵 부스러기를 생성하는 모듈을 만들고 있습니다. 현재 모듈에 대한 메뉴를 생성하는 가장 좋은 방법은 모듈이 경로에서 "시작"하는 위치를 결정한 다음 그 아래 하나의 경로가 가능한 경로를 찾는 것입니다. –

+0

@Bemace 생성하고자하는 기능에 대해 더 자세히 설명 할 수 있습니까? 나는 그것을 이해할 수 있을지 모르겠다. (질문에 이것을 추가하면 도움이 될 것이다.) –

1

지금 당장은 경로를 파싱하는 것 외에는 다른 것을 볼 수 없습니다. IMO 및 기능 다음 play.mvc.Router 클래스에서 봐는 :

static void parse(VirtualFile routeFile, String prefix) { 
    String fileAbsolutePath = routeFile.getRealFile().getAbsolutePath(); 
    int lineNumber = 0; 
    String content = routeFile.contentAsString(); 
    if (content.indexOf("${") > -1 || content.indexOf("#{") > -1 || content.indexOf("%{") > -1) { 
     // Mutable map needs to be passed in. 
     content = TemplateLoader.load(routeFile).render(new HashMap<String, Object>(16)); 
    } 
    for (String line : content.split("\n")) { 
     lineNumber++; 
     line = line.trim().replaceAll("\\s+", " "); 
     if (line.length() == 0 || line.startsWith("#")) { 
      continue; 
     } 
     Matcher matcher = routePattern.matcher(line); 
     if (matcher.matches()) { 
      String action = matcher.group("action"); 
      // module: 
      if (action.startsWith("module:")) { 
       String moduleName = action.substring("module:".length()); 
       String newPrefix = prefix + matcher.group("path"); 
       ... 

그것은 당신이 찾는 부분이다 접두사를 추출합니다.