Zend框架的Url视图助手默认添加"id"参数

6
我正在创建一个简单的CRUD来添加链接到分类中。每个分类都有一个id。我有一个视图列出了某个分类的所有链接。在那个视图中,我有一个链接到添加表单,它是这样的:
http://example.com/link/add/categoryId/3

我目前在视图中使用以下语法构建该链接。

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

我认为可以通过使用Url View Helper更加简洁地完成这个任务。

<?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);

你当前的请求中是否有参数'id'? - Fge
1
是的,我有一个视图,列出了某个类别的所有链接。这个“某个类别”有一个ID,URL是http://example.com/category/view/id/3。 - Niels Bom
1个回答

9

默认情况下,Url ViewHelper 会将给定的参数与当前请求参数合并和覆盖。就像在您的情况下 id 参数一样。如果您想重置所有参数,则必须使用视图助手的第三个参数:'reset':

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

这将强制视图助手不使用当前请求作为“回退”来处理未设置的参数。默认行为特别有用,如果您只想更改当前请求的一个或两个参数(比如操作),但不想设置所有参数(或者可能您甚至不知道它们全部是什么)。


谢谢!我会编辑我的问题,添加完整的语法以获取我想要的URL。你不觉得这是默认行为有点奇怪吗? - Niels Bom
不,这个行为是完美的。这缩短了许多用法的语法。想象一下,你有一个带分页的服务器端可排序列表。对于分页和可排序的标题,您只需使用 $this->url('order' => 'ASC'); 来更改顺序。所有其他参数,如页面、过滤器等等...都将保持不变。在视图中,您根本不需要关心它们 :) - Fge
这确实是它的完美应用案例! - Niels Bom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接