2010-11-18 121 views
6

我正在創建一個簡單的CRUD用於添加鏈接到一個類別。每個類別都有一個ID。我有一個視圖,列出了某個類別的所有鏈接。在這個觀點我有一個鏈接到加載形式是:Zend Framework Url View Helper默認添加「id」

http://example.com/link/add/categoryId/3 

我目前在建使用以下語法認爲鏈接。

<?php echo $this->baseUrl();?>/link/add/categoryId/<?php echo $this->category['id']; ?> 

認爲這是可以做到通過使用URL視圖助手清潔。

<?php echo $this->url(array('controller'=>'link','action'=>'add','categoryId'=>$this->category['id'])); ?> 

但是,這給了我以下網址

http://example.com/link/add/id/3/categoryId/3 

..這有一個額外的 「ID/3」。 我讀過但沒有完全理解Url View Helper的代碼。怎麼會有一個額外的ID/3在那裏?

謝謝!

@Fge給出了正確的答案,下面是我更新的完整語法。

echo $this->url(array('controller'=>'link','action'=>'add','categoryId'=>$this->category['id']),null,true); 
+0

你當前的請求中是否有任何參數'id'? – Fge 2010-11-18 13:49:01

+1

是的,我有一個視圖,列出了某個類別的所有鏈接。該「特定類別」有一個ID,網址是http://example.com/category/view/id/3 – 2010-11-18 13:55:23

回答

9

默認情況下,地址視圖助手合併,並覆蓋與當前請求參數給定的參數。就像你的情況一樣,id參數。如果要重置所有參數,你必須使用視圖助手的第三個參數:「復位」:

$this->url(array(), 'route'(= null to use the default), true); 

這將迫使視圖助手不使用當前請求爲「回退」爲沒有設置參數。如果您只想更改當前請求的一個或兩個參數(如操作),但不想設置所有參數(或者您甚至不知道全部參數),則缺省行爲尤其有用。

+0

謝謝!我將編輯我的問題以添加我用來獲取我想要的URL的完整語法。 難道你不認爲這是默認的行爲嗎? – 2010-11-18 14:21:10

+0

沒有行爲是完美的。這縮短了許多用途的語法。想象一下,你有一個分頁的服務器端可排序列表。對於分頁和可排序的頭文件,你只需要使用$ this-> url('order'=>'ASC');改變順序。所有其他參數,如頁面,過濾器等...將保持不變。你根本不需要關心它們:) – Fge 2010-11-18 14:32:52

+0

這確實是一個完美的用例! – 2010-11-18 14:48:03