2014-04-27 48 views
3

我使用Gii生成的動作在一個模塊中表示News。我有一個與id參數一起工作的普通視圖操作(如example.com/news/view/id/1)。
當我使用這行代碼:Yii app() - > createUrl用於查看動作

Yii::app()->createUrl("news/view",array("id"=>$data->primaryKey)) 

它生成example.com/news/1(如果$data->primaryKey爲1)。這是不正確的。
當我使用這行代碼:

Yii::app()->createUrl("news/view/id/",array("id"=>$data->primaryKey)) 

它生成example.com/news/id/id/1(如果$data->primaryKey爲1)。

我很困惑!在第一種情況下,該函數不會生成id作爲參數名稱,而在第二種情況下,它會生成!但手動添加ID後。
我該如何使用此功能製作正確的網址格式?

編輯:新聞是一個模塊。我改了行的代碼:

Yii::app()->createUrl("news/default/view/id/",array("id"=>$data->primaryKey)) 

它產生example.com/news/default/view/id/1這是正確的,但我不希望默認!

+0

in yii2 use:'<?= Yii :: $ app-> urlManager-> createUrl([「post/view」,「id」=> $ post-> id])>> –

回答

3

在配置文件中,你有這樣的事情:

'urlManager'=>array(
      'urlFormat'=>'path', 
      'rules'=>array(
       '<controller:\w+>/<id:\d+>'=>'<controller>/view', 
       '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>', 
       '<controller:\w+>/<action:\w+>'=>'<controller>/<action>', 
      ), 
     ), 

這創造怎麼看的URL。

因爲是默認值,所以在創建URL時不需要編寫id參數。看在urlmangaer規則:

Yii::app()->createUrl("news/view/",array("id"=>$data->primaryKey)) => example.com/news/id/1 

在模塊defaut:

Yii::app()->createUrl('/news/default/view', array('id' => $data->primaryKey)) 

您需要創建urlmanager規則......你怎麼想看看您的網址。更多詳情here

+0

我在配置文件中有這樣的代碼行。 – JalalJaberi

0

使用

'rules'=>array(
    'news/<controller:\w+>/<id:\d+>'=>'news/<controller>/view', 
    'news/<controller:\w+>/<action:\w+>/<id:\d+>'=>'news/<controller>/<action>', 
    'news/<controller:\w+>/<action:\w+>'=>'news/<controller>/<action>', 
), 

如果你有一個模塊名稱news

你可以嘗試用正則表達式代替news,但是如果你的正則表達式太寬泛,你將會遇到由幾個正則表達式匹配的URL。使用規則數組鍵中的<module:news|accounting|people>和規則數組值中的<module>

如果您需要更復雜的網址管理,或者如果您無法使用正則表達式解決您的任務,則始終可以擴展CUrlManager。

0

試圖在此目錄中檢查它:protected/config/main.php sir。


urlManager'=>array(
      'urlFormat'=>'path', 
      'rules'=>array(
       '<controller:\w+>/<id:\d+>'=>'<controller>/view', 
       '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>', 
       '<controller:\w+>/<action:\w+>'=>'<controll<>er>/<action>', 
      ), 
     ), 

請注意的是,路由呢? :)

相關問題