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