2

有些人报告了baseUrl()在视图脚本中访问、设置或获取正确值的问题。但我想知道为什么有必要使用它,至少在像我这样的情况下,ZF 应用程序位于虚拟私有主机(Amazon EC2)上,我可以完全控制目录结构和 apache 重写规则,以及路线。

例如,我知道在文件系统foo.jpg中存在public/images/foo.jpg,并且应用程序的 mod_rewrite 会将所有请求定向到public- 所以在我看来脚本中,编写类似的东西要简单/清晰和高效得多

<img src="/images/foo.jpg" />

代替

<img src="<?php echo $this->baseUrl();?>/images/foo.jpg" />

baseUrl()使用真正提供了什么样的面向未来的稳健性或其他好处?到目前为止,我还没有使用它,也没有任何问题。但是我继承了一些使用它的代码,我倾向于在编辑包含它们的视图脚本时去掉这些用途。我以后会后悔吗?

4

2 回答 2

4

用这种方式,它不是真的有用,但是另一方面,这种方式使用它

echo $this->baseUrl('/images/foo.jpg')

将来可能会被证明是有用的,因为您可以在打印 URL 之前添加逻辑。想象一下,几年后您的网站增长超出您的预期,您必须将所有静态内容移动到Content delivery network (CDN)您必须手动(或使用搜索和替换)更正所有图像/css/js 实例 URL 的位置。使用baseUrl()(或命名它assetUrl())您只需要添加您的 CDN 的 url,它将在您的应用程序的任何地方得到修复。

编辑

baseUrl()我在你继承的代码中发现了一个用途:

如果您的网站不在域的根目录下,它将允许您向所有链接和引用添加公共 URL 部分

i.e. : www.mysite.com/zf-app/

在您的配置文件中,您只需添加

resources.frontController.baseUrl = "/zf-app/"

让它工作,你所有的链接都会在那个部分前面

于 2012-09-21T14:17:22.203 回答
1

完美的例子。我有几个在不同系统上构建的基本 Zend-y 实用程序。在我的测试平台上,我只是用自己的文档根虚拟主机。通常我通过远程 Web 浏览器访问这些工具,但这需要我通过 VPN 连接到运行它的系统,因为我没有将这些工具创建在子网之外的任何东西上,也不想将它们暴露给面向 Internet 的站点. 因此,随之而来的是 android 手机和诸如 bitweb 服务器之类的东西,它允许您在袖珍手机上以最小化的形式运行 lighttpd、php 和 mysql。唯一的问题是,它并没有真正强大到足以在 android 操作系统上进行虚拟主机。没问题,它将允许基本的混叠,所以我只是将所有工具都移动到我的 sdcard 上它们自己的子目录中,并使用 lighttpd mod_alias 定义指向每个工具,然后为每个子目录创建重写规则。但这导致我写这篇文章和其他喜欢它的人来修复所有指向 href="/some/path/to/static/content" 的静态 url,我什至不得不将一些 url 更新为 zend 工具,这些工具是使用的绝对路径{view}->url() 改为调用。通过将 baseUrl 调用添加到静态内容的前面,并使用视图 url() 方法调用控制器操作,我现在可以将任何一个独立工具的整个 Zend MVC 移动到我想要的任何目录中并让它们运行从我想要的网络树深处。Zend 完成了剩下的工作,只需要在 lighttpd conf 文件中设置 2-3 个格式正确的条目。

于 2013-07-19T15:11:07.197 回答