【问题标题】:Zend Framework Url View Helper adds "id" by defaultZend Framework Url View Helper 默认添加“id”
【发布时间】:2011-05-12 01:06:52
【问题描述】:

我正在创建一个简单的 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'?
  • 是的,我有一个视图列出了某个类别的所有链接。那个“特定类别”有一个id,url是example.com/category/view/id/3

标签: zend-framework url view-helpers


【解决方案1】:

默认情况下,Url ViewHelper 使用当前请求参数合并并覆盖给定参数。就像在你的情况下 id 参数一样。如果你想重置所有参数,你必须使用 view-helper 的第三个参数:'reset':

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

这将强制 viewhelper 不使用当前请求作为未设置参数的“后备”。如果您只想更改当前请求的一个或两个参数(如操作)但不想设置所有参数(或者您甚至不知道所有参数),则默认行为特别有用。

【讨论】:

  • 谢谢!我将编辑我的问题以添加用于获取所需 URL 的完整语法。你不觉得这是默认的一种奇怪的行为吗?
  • 不,行为是完美的。这缩短了许多用途的语法。想象一下,您有一个带分页的服务器端可排序列表。对于分页和可排序标题,您只需使用 $this->url('order' => 'ASC');更改顺序。页面、过滤器等所有其他参数将保持不变。在您看来,您根本不必关心它们 :)
  • 这确实是它的完美用例!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多