2011-01-11 3 views
2

저는 매우 가벼운 MVC 프레임 워크를 (Router 클래스없이) 실행하고 있습니다. 실행할 컨트롤러와 동작을 알고 싶습니다. REQUEST_URI에 적용된 라이브러리 또는 regexps를 사용하고 있습니다. 뭔가 같은 ...PHP 응용 프로그램에서 페이지 URL을 작성하십시오.

$regexps = array(
    '/admin/categories/' => array(
     'controller' => 'AdminCategories', 
     'action'  => 'index' 
    ), 
    '/admin/categories/add/' => array(
     'controller' => 'AdminCategories', 
     'action'  => 'add' 
    ), 
); 

모든 것이

URL을 구축 할 수있는 가장 좋은 방법은 무엇입니까 ... 잘 작동하지만?

BuildUrl('Controller', 'action', array('var1' => 'val1', 'var2' => 'val2')); 

(예를 들어 내가 10 개 개의 서로 다른 필터링 옵션 테이블을위한) 현재의 URL을 수정할 수있는 가장 좋은 방법은 무엇입니까?

ModCurrentUrl(array(...)); 

응용 프로그램에서이 문제를 어떻게 해결합니까?

추신 : 저는 코roller의 액션 파라미터를 사용하지 않았습니다. 모든 파라미터는 $ _GET에서 가져 왔습니다.

내 영어를 사용해 주셔서 감사합니다.

+0

은 질문의 일부분 만 해결하고 너무 바빠서 댓글을 달지 못합니다. http://us2.php.net/manual/en/function.http-build-query.php – Gordon

답변

0

우수 사례 (제가보기에) 정적 메서드가 포함 된 Routing (기본 클래스)이라는 라이브러리가 있어야합니다. 그런 다음

여기
+0

감사합니다. 당신의 코멘트를 위해! 정적 메소드를 만드는 것은 꽤 명확하지만 다른 문제를 보게됩니다. 예를 들어,/admin/categories/view/{{id}} /? filter1 = a & filter2 = b'; 이 url은'view' 액션으로'AdminCategories' 컨트롤러로 보내집니다. 이제'Routing :: buildUrl (...) '을 사용하여 그러한 URL을 만들고 싶습니다. 'array '('id '=> 123,'filter1 '=> a,'filter2 '=> b)'를'buildUrl'에 건네주고 패스에 있기 때문에 id 매개 변수에 문제가 있습니다. QUERY_STRING에 없습니다. 우리는 이러한 URL을 많이 가질 수 있으므로 각각에 대해 분리 된 메서드를 만들어야합니까? – Kirzilla

+0

그게 디자인 문제, 당신은'controller, action, pathArray, queryArray' 매개 변수를 받아들이 기 위해 buildUrl() 메소드를 재고해야합니다. pathArray와 queryArray 매개 변수로 어디서 얻었는지 보시겠습니까? –

+0

제발, 설명해 주시겠습니까! – Kirzilla

0

당신을 위해 몇 가지 좋은 링크입니다 (... modCurrentUrl 같은) Routing::buildUrl(...)를 사용하고, 모든 URI를 사용합니다 관련 방법을 채울 수 : http://robap.github.com/php-router/ http://code.google.com/ p/routemap/ 그리고 예제에서 하위 디렉토리의 흔적이 보이지 않습니다. 큰 프로젝트에서는 괜찮을 수 있습니다. 먼저 라우터 클래스의 메소드에 요청하십시오. 거기에서 경로에 대한 실제 데이터를 얻습니다. 두 번째로이 데이터를 응용 프로그램을 시작하는 디스패처에 저장합니다.

+0

좋은 링크지만 다른 행동에 대해 이야기하고 있습니다. 라우팅이 아닌 URL 작성 및 수정. – Kirzilla

+0

나는 똑같은 것을 말하고있다 :) 거기에서 해결책을 확인해 보라. 코드는 아주 간단하다. 두 단어로 '컨트롤러/액션/: id'와 같이 경로의 동적 요소를 어떻게 든 표시해야합니다. 그런 다음 동적으로 변경하려는 뷰 (또는 어디에서든지)에서이를 인식 할 수 있습니다.그리고 그것들을 buildUrl (array ('controller'=> '컨트롤러', 'action'=> 'action', 'id'=> $ _GET [ 'id']))과 같이 동적으로 빌드하면됩니다. – kos

관련 문제