2012-06-06 2 views
2

Yii에서 controller/action/id ~ /id의 형식으로 URL을 표시 할 수 있습니까? 또한 한 가지 중요한 문제는 특정 컨트롤러/동작에서만이 작업을 수행해야한다는 것입니다.Yii의 url 제어 :/id에 대한 controller/action/id

인스턴스의 경우 : /user/post/ujjwal이있는 경우 /ujjwal 만 표시해야합니다. 그리고 내가 가지고있을 때 /image/display/ujjwal가 될 수 있습니까?

나는 Yii에서 URL 관리를 읽고 여기에 표시된 내용을 모두 이해합니다. 그러나 나는 'controller/action을 기반으로 URL을 제어하는 ​​방법을 모른다.

도움을 주시면 감사하겠습니다.

감사합니다, Ujjwal에서

+0

yii 설명서가 문제의 해답이 아니라는 링크 중 하나에 댓글을 달았습니다. url 형식과 관련된 구성 파일에서 발췌 한 내용을 게시하십시오. – Orlymee

+0

내가 말한 것은 내 문제에 대한 가능한 해결책을 찾을 수 없다는 것이 었습니다. 또는 제가 그것을 잘 이해하지 못해서 제 문제에 관련 될 수 없었습니다 ... –

답변

1

당신의 config/main.php 두 개 이상의 URL 경로 또는 조치 한 사용자 정의 URL을 매핑 할 수 없습니다 제 생각에는

'urlManager'=>array(
      'urlFormat'=>'path', 
      'showScriptName'=>false, 
         'rules'=>array(
          'user/post/<user:\w+>'=>'<user>', //this should be the very first rule 
          //other rules 
         ), 
      ), 
     ), 
+0

이것은 다른 방법입니다 - 클라이언트 -facing URI는 배열에서 먼저 나온 다음 컨트롤러/액션 쌍으로옵니다. 또한 가장 일반적인 규칙을 맨 위에 올리면 다른 규칙에 도달하지 못하게됩니다. – Ansari

+1

나는 장군님과 관련된 단어를 혼란스럽게 생각합니다. 'user/post/'는'user' 컨트롤러의'post' 액션이 단어 매개 변수를 가지고있을 때만 일치합니다. – adamors

+0

예.하지만 OP는/user/post 작업에 액세스하지 않으려합니다. 매개 변수 이름 만 URL에 넣기를 원합니다. – Ansari

2

을 시도합니다. 다른 사람이 /my_username에 액세스 할 때와 마찬가지로 /user/post/ujjwal 또는 /image/display/ujjwal으로 리디렉션됩니다. 이 패턴/규칙으로 인해 응용 프로그램이 혼란 스러울 것입니다.

그래서 /image/display/ujjwal을 다른 패턴/규칙으로 변경하는 것이 좋습니다. Like /my_username/image

나는 선택된 사용자 이름에 대한 쿼리 문자열로 username을 사용합니다.

'components'=>array(

      ..... 

      'urlManager'=>array(
      'urlFormat'=>'path', 
      'rules'=>array(
       '<username:[\w.]+>'=>'user/post', 
       '<username:[\w.]+>/display'=>'image/display', 
       '<controller:\w+>/<id:\d+>'=>'<controller>/view', 
       '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>', 
       '<controller:\w+>/<action:\w+>'=>'<controller>/<action>', 
      ), 
     ), 

      .... 

누군가가 전에 비슷한 질문을했다 : How to specify a SEO friendly url like twitter www.twitter.com/<name> using YII framework

+1

감사합니다. 이것은 매우 도움이되었고 나는 당신의 지시를 따랐습니다. 그것은 작동! –

+0

@UjjwalPrajapati Cool !!! – aslingga

0

당신이 그러나 몇 가지 부작용, 수행 할 수 있습니다합니다. 당신이 당신의 config/main.php에 넣고 경우

 'urlManager'=>array(
     'urlFormat'=>'path', 
     'showScriptName'=>false, 
     'rules'=>array(
      'image/<action>/<username>' => 'image/action/username', 
      '<username>' => 'user/post/username', 
      ), 
     ), 

먼저 모든보다 구체적인 규칙을 넣고, 그 다음 하나의 단위가 /user/post/something로 이동합니다 다른 모든 것들입니다.