2011-12-30 1 views
2

가벼운 MVC 프레임 워크 용 URL 라우터 클래스를 만드는 중입니다. 나는 간단한 배열 기반의 시스템을 구현하고 어떤 매개 변수가 일련의 루프를 통해 어디서 왔는지 등을 파악했다. 장고 책을 읽었고 패턴을 일치시키는 시스템과 마찬가지로 클래스와 메소드를 호출하면 패턴 일치. 잘 작동하지만 두 개의 다른 패턴을 매핑하는 데 집착하고 있으며 정규식에서 최고가 아니라고합니다. preg_match - regex - 명명 된 하위 패턴과 동일한 문자열로 시작하는 패턴을 구별합니다.

은 그래서 URL 패턴 및 해당 클래스/메소드 배열이 있습니다

'/^\/users\/(?P<username>\w+)$/' => array('class' => 'userController', 'method' => 'detailUserAction'), 

'/^\/users\/update$/' => array('class' => 'userController', 'method' => 'updateUserAction'), 

을 첫 번째 패턴은 항상 함께/사용자 시작하고 이후에 다른 뭔가가 아무것도 전에 일치합니다.

나중에 코드에서 나는 배열을 통해 반복하고이 코드를 실행 오전 :

if (preg_match($urlPattern, $pathString, $matches)){ 
       $this->invokeObject($command, $matches); 
       exit; 
      } 

나는이 두 URL을 구분하는 데 사용할 수있는 패턴에 어떤 아이디어?

한 사용자/사용자 이름

/이고 다른 하나는 사용자/난 그냥 배열의 순서로 먼저 다른 사람을 항상 포함 할 수 있습니다 생각

를 업데이트/인, 나의 최선의 선택이다?

+3

예. 특정 라우터를 먼저 (예 :/users/update) 넣고 끝에 모든 라우터를 넣으십시오 (예 :/users/username) – emaillenin

답변

0

이 경우 URI 디자인을 개선해야한다고 생각합니다. 사용자가 "업데이트", "추가"또는 "삭제"로 불리는 경우 어떻게해야합니까? 나중에 사용자 이름 패턴에 특별한 경우가 추가되고 유지 보수/확장이 쉽지 않습니다.

하지만 사용자 ID를 의미하는 경우 하위 패턴을 (? P \ d +)로 변경하면 모호성을 제거 할 수 있다고 생각합니다.

+0

님께 약간의 생각을 드렸습니다. 다른 프레임 워크가 방지하기 위해 무엇을 할 것인지 궁금합니다. URL 패턴을 정의 할 때 이런 일이 발생하지 않았습니까? 내 자생적 접근법에 대해 생각하고 있는데, URL을 업데이트 할 때 URL에 예약어와 충돌하는 사용자 또는 무언가를 등록 할 때 충돌이 있는지 확인하기 위해 URL 라우팅 구성 배열을 검사 할 수 있습니다. –

관련 문제