在Zend Framework视图脚本中使用baseUrl()很重要吗?

时间:2012-09-21 13:18:35

标签: php zend-framework

有些人报告了在视图脚本中从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()确实提供了什么样的面向未来的稳健性或其他好处?到目前为止,我根本没有使用它,没有问题。但是我继承了一些使用它的代码,我倾向于在编辑包含它们的视图脚本时删除这些用法。我以后会后悔吗?

2 个答案:

答案 0 :(得分:4)

以这种方式使用,它不是很有用,但另一方面,以这种方式使用

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

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

修改

我在您继承的代码中找到了baseUrl()的用法:

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

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

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

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

让它发挥作用,并且所有链接都将以该部分为前缀

答案 1 :(得分:1)

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