2011-07-30 1 views
0

내가 YII r1.8에 Custom URL Rule Classes을 활용하기 위해 노력하고YII는 사용자 정의 URL 규칙 클래스 사용 r1.8

I 표시하는 대신 여러 조직 /보기/아이디/24과 같은 일을하고 애 쓰고 db의 Name으로 식별되는 조직의 이름 (즉, www.mysite.com/orgs/view/id/24를 www.mysite.com/jaysshop으로 동적으로 변경). 불행히도 나는 그것을 작동시키지 않을 것이다. 여기

내 코드입니다 :

class OrgsUrlRule extends CBaseUrlRule 
{ 
    public $connectionID = 'db'; 

    public function createUrl($manager,$route,$params,$ampersand) 
    { 
     if ($route==='orgs/view/id') //even tried 'orgs/view' or 'orgs/index' 
     { 
      if (isset($params['Name'])) 
       return $params['Name']; 
      else if (isset($params['Name'])) 
       return $params['Name']; 
     } 
     return false; 
    } 

    public function parseUrl($manager,$request,$pathInfo,$rawPathInfo) 
    { 
     if (preg_match('%^(\w+)(/(\w+))?$%', $pathInfo, $matches)) 
     { 
     } 
     return false; 
    } 
} 

urlManager :

array(
    'class' => 'application.components.OrgsUrlRule', 
    'connectionID' => 'db', 
), 
+0

여기서 무엇을하고 싶은지 완전히 명확하지 않습니다. 고객이 org/view/id/24 URL을 입력하고 jaysshop으로 리디렉션하고 싶습니까? 아니면 코드에서 표시 할 URL을 만들려고합니까? createUrl 함수에 대해 잘못된 생각을했을 수도 있습니다. 귀하의 사이트 어딘가에서 createUrl 기능을 사용할 때 사용됩니다. 실제로 페이지 뷰를 만들고 싶다면 url을 "번역"하려면 parseUrl 함수가 필요합니다. – Blizz

+0

@Blizz 당신이 말하는 바를 이해 합니다만, Yii r1.8 (링크 된 위)에있는이 새로운 기능을 사용하면 URL 재 작성을 처리하는 urlManager가 표시됩니다. urlManger에서 'events'=> 'events/index'와 같이 www.mysite.com/events/index 대신 www.mysite.com/events를 입력하도록 할 수 있습니다. 내가 읽었을 때 맞춤 URL 규칙 클래스를 사용하면보다 광범위하지만 세분화 된 방식으로 동일한 작업을 수행 할 수 있습니다. – enfield

+0

@Blizz이 포럼 질문에서 [사용자 이름이있는 URL 필요, 페이스 북과 유사] (http://www.yiiframework.com/forum/index.php?/topic/10829-need-of-url-with-usernameame) -symilar-to-facebook /) 그들은 변수로 무엇을하고 싶은지 알았지 만 이해와 사용을 위해 노력하고있는 Yii r1.8의 추가 기능이 출시되기 훨씬 전에 – enfield

답변

2

내가 당신에게 당신이 트리거 URL에서 상점의 이름을하려는 가정에서이 예제를주고있어

public function parseUrl($manager,$request,$pathInfo,$rawPathInfo) 
{ 
    $aParts = explode('/', $pathInfo); 
    if (count($aParts) == 1) // It's only 1 piece, so a possible "shop name" 
    { 
     if (isAValidNameForAShop($aParts[0])) 
     { 
     $_REQUEST['id'] = $aParts[0]; // Store it to retrieve it in the controller 
     return 'orgs/view'; 
     } 
    } 
    return FALSE; // Seems like something else, we don't apply 
} 
: 그것은 예를 들어

에 컨트롤러/액션

약간의 도움이되는 희망.

+0

@ Blizz, 입력 해 주셔서 감사합니다. 나는 이것을 내일 시도하고 통합 할 것이다. – enfield