2012-12-07 9 views
0

라우팅에 PHP와 ToroPHP을 사용하고 있습니다. 자식 페이지의ToroPHP 라우팅 - 하위 URL로 URL 재 작성

알 수

그것은 잘 작동하지만 내 경우에는 내가 부모가 childpages이의 알 수없는 번호가 있습니다 차일 부모와 페이지를 추가 할 수 있습니다.

ToroPHP에서

은 다음과 같습니다 나는 최대 깊이 루프는 다음이 될 수 있습니다 알아낼와 문자열에서 을 추가 할 수 있습니다

  1. // My Path: http://www.test.com/product/house/room/table/leg/color/ 
    
    Toro::serve(array(
        "/" => "Home", 
        "/:string/:string/:string/:string/:string/:string/" => "Page" 
    )); 
    
    class Page { 
        function get($slug, $slug2, $slug3, $slug4, $slug5, $slug6) { 
         echo "First slug: $slug"; 
        } 
    } 
    

    문제 "/ : string"매개 변수를 포함하지만 그 패턴은 이 아닙니다.

  2. 페이지 클래스의 get 함수는 알 수없는 숫자 인 을 사용합니다. 함수 밖에서 최대 깊이를 계산할 수는 있지만 취할 값의 수를 알 수있는 함수가 필요합니다.

질문

  1. 다른 식으로 문제 하나가 있습니까? 아마 어떤 정규 표현식일까요?
  2. 함수에 알 수없는 수의 매개 변수를 사용하려면 어떻게해야합니까?
  3. 어쩌면 나는 이것을 잘못된 방향으로 풀려고하고 처음 두 질문은 관련이 없다. 그것이 맞으면 나를 정정하십시오.

답변

2

모든 매개 변수를받는 액션에 대한 위해를, 당신은 당신의 정규식을 캡처 할 필요가있다. 괄호를 사용하여 정규식에서 값을 캡처합니다. :string([a-zA-Z]+)의 별칭 일뿐입니다. 이 같은 첫 번째 세그먼트 후 와일드 카드를 적용 할 수 :

"/product/(.*?)" => "Page" 

그러나, 이것은 당신이 중 하나를 매우 깨끗없는 액션에 직접 URL을 구문 분석 할 필요가 있음을 의미한다. 이 특별한 경우 더 깨끗한 확인하려면

, 옵션이 str_repeat 사용하는 것입니다 :

Toro::serve(array(
    "/" => "Home", 
    "/" . str_repeat(":string/", 6) => "Page" 
)); 

ToroPHP은 아주 간단한 라이브러리, 그것은 하드 그것을 포크에 구부리 것을 안 당신의 뜻. 이상적으로이 경로를 어떻게 정의 하시겠습니까? 어쩌면 /:string*6 같은 경로일까요?


PHP 함수에 정의 된 것보다 더 많은 또는 더 적은 수의 매개 변수를 전달할 수 있습니다. 전달 된 매개 변수를 모두 얻으려면 func_get_args을 사용하고 전달 된 매개 변수의 수를 얻으려면 func_num_args을 사용하십시오.

+0

1+ 나는 이것을 내일 시험 할 것이다. str_repeat는 첫 번째 질문에 대해 저에게 충분합니다. 부모님과 자녀가있는 페이지와 관리 페이지가있는 페이지가 많습니다. 그러므로 나는 toroPHP를 사용할 수 있기를 희망합니다. 왜냐하면 매우 작기 때문입니다. 지금까지 감사드립니다! –

+0

str_repeat가 예상대로 작동했습니다. ToroPHP를 포크/벤딩하는 것을 선호하지 않습니다. 왜냐하면 코어를 변경하면 향후 업데이트를 막을 수 있기 때문입니다. –

0

질문 2에 대한 응답으로 배열에 GET 매개 변수를 포맷 한 다음 개별 값이 아닌 배열을 전달할 수 있습니까?

어쩌면 좋아 :

$allSlugs = array($slug, $slug2, $slug3, $slug4, $slug5, $slug6); 

// Pass $allSlugs into your instance of Page::get($allSlugs); 

class Page { 
    function get($getValues) { 
     echo isset($getValues[0]) ? "First slug: ".$getValues[0] : ''; 
    } 
} 
+0

예, 일반적으로 작동하지만 ToroPHP에서는 작동하지 않습니다. –