【问题标题】:Why Zend_View_Helper_Url returns relative path when using the default route and absolute path when using a custom route?为什么 Zend_View_Helper_Url 在使用默认路由时返回相对路径,而在使用自定义路由时返回绝对路径?
【发布时间】:2013-05-02 09:48:25
【问题描述】:

我有一个在 Zend Framework 1.12 上运行的应用程序,我正在使用 URL 视图帮助程序。我还有一些与 URL 帮助程序一起使用的自定义路由来清理代码。

当我使用这样的格式时:

$this->url(array('module' => 'myapp', 'controller' => 'index', 'action' => 'index'), 'default', true)

生成的字符串是操作的相对路径 - /myapp/index/index

但是当我使用自定义路由时:

$this->url(array('var' => 'value'), 'custom-route', true)

生成的字符串是绝对路径 - http://www.domain.com/custom-route

我不明白为什么会发生这种情况,也无法在网上找到有关此行为的任何信息。此外,我想知道是否有办法防止它发生并在 URL 视图助手的工作方式上产生一致性(最好始终返回相对路径)。

谢谢。

【问题讨论】:

  • 自定义路由是主机名路由吗?如果不是,我不确定这会如何发生
  • 据我所知,这是一条常规路线。 Zend_Controller_Router_Route

标签: zend-framework url zend-route view-helpers


【解决方案1】:

我认为这就像您的第一个示例一样简单,即默认类型 Zend_Controller_Router_Route_Module 通常是相对的路由。

您的第二个示例是 named 路由,因此它需要包含基本 url 才能有效。我不相信重写的路线可以是相对的,因为路线可能会或可能不会指代实际位置。

我做了一些有限的测试,我相信如果您设置 baseUrl 值,第一个示例也将包含主机地址。因此,为了保持一致性,您的网址将始终是绝对的。

//application.ini
resources.frontController.baseurl = http://www.domain.com

希望这会有所帮助。

【讨论】:

  • 在路由定义中我只提供模块、控制器、动作和自定义参数(如果有的话),没有任何类型的域。我看不出为什么 URL 不应该是相对的。我仍然希望有一种方法可以使两者都相对而不是绝对。
  • 查看Zend_Controller_Router_RouteZend_Controller_Router_RewriteZend_Controller_Router_Route_Module 中的assemble() 方法,了解不同的路由是如何组合在一起的。只有您的第一个示例属于 module 类型。
猜你喜欢
  • 1970-01-01
  • 2010-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多