2010-11-18 89 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