2012-06-06 31 views
2

我們可以在Yii中以controller/action/id/id的格式顯示url嗎?此外,還有一個主要問題是我只需要在特定的控制器/操作上執行此操作。控制Yii中的url:controller/action/id到/ id

例如:如果我有/user/post/ujjwal那麼我只需要顯示/ujjwal。當我有/image/display/ujjwal那麼它可以像它一樣?

我已經閱讀了Yii的url管理,並理解了那裏顯示的任何內容。但我不知道如何控制基於controller/action的網址。

任何幫助,將不勝感激。

感謝, Ujj​​wal

+0

您評論了yii文檔不是您問題的答案的鏈接之一。請將您的配置文件中與網址格式相關的摘錄張貼出來。 – Orlymee

+0

我的意思是我無法找到解決我的問題的可能辦法..或者可能是我不太瞭解它,我無法將它與我的問題聯繫起來...... –

回答

1

在你config/main.php嘗試

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

這是另一種方式 - 客戶端面向URI首先在數組中,然後是控制器/動作對。另外,將最普通的規則放在最上面可以確保沒有其他規則可以達到。 – Ansari

+1

我覺得你把這個詞混淆了一般。 'user/post/'只會在用戶控制器的'post'動作有匹配詞參數時匹配。 – adamors

+0

是的,但OP不想以這種方式訪問​​/ user/post操作 - 他只希望參數名稱在URL中。 – Ansari

2

在我看來,你不能在一個自定義的URL映射到兩個或更多的URL路徑或動作。就像有人訪問/my_username時,將被重定向到/user/post/ujjwal/image/display/ujjwal。由於這種模式/規則,應用程序會感到困惑。

因此,我建議您將/image/display/ujjwal更改爲其他模式/規則。像/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酷! – 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