我花了一些时间试图了解baseUrl是什么(来自学习Zend Framework),但令人惊讶的是,对于这样一个无处不在的实用程序,没有一个“专家”或博客甚至试图定义baseUrl以便学习者拥有知道它是什么。他们都假设你知道它是什么,然后继续推导它,每个人都用他自己的方法来得出他自己的结果。从我到目前为止所读到的内容:
有些人认为它是一个主页 - 网址,这是我自然认为的(如名称所示),可由$_SERVER["HTTP_HOST"]
或$_SERVER["SERVER_NAME"]
访问,但令人惊讶的是这些似乎是属于少数。
有些人认为这是附加到服务器名称的$_SERVER["REQUEST_URI"]
或$_SERVER["PHP_SELF"]
访问的当前页面
虽然其他人认为它可以是上述任何一个或任何网址(好吧,至少这是我得到的印象),取决于用户想要如何使用它。
所以有人可以准确地解释一下baseUrl是什么,而不是假设我也是“专家”以及为什么我可能需要它。谢谢。
编辑: baseUrl应该在大多数Zend项目中自动设置,但显然不是我的情况。即使我做echo $this->baseUrl()
或var_dump($this->baseUrl())
,我也什么也得不到。所以我真的不知道这个实用程序的用途。
答案 0 :(得分:18)
您需要拥有baseUrl()
设施的简短答案是:
部署应用程序的位置应该是配置问题,而不是核心应用程序功能问题
在许多情况下 - 甚至是大多数情况下,应用程序的base-url将只是$_SERVER['HTTP_HOST']
或$_SERVER['SERVER_NAME']
。
但情况并非总是如此。
最容易考虑的例子是标准网站,其中包含常用页面:
http://example.com/
http://example.com/contact
http://example.com/about
// etc
现在您编写(或购买或下载为OSS软件包)您希望在网址下部署的博客应用程序:
http://example.com/blog
博客可以包含以下链接:
http://example.com/blog/post/my-post-slug
http://example.com/blog/categories/some-category
//etc
所有这些链接都位于/blog
下。
博客应用程序本身应该关注仅与博客中的链接/页面/路由。虽然您的博客模板可能很好地包含返回到网站其余部分的页眉/页脚链接,但核心博客应用程序功能的其余部分不应该知道您网站的其余部分。不知何故,博客应用程序需要知道,当他生成博客帖子和博客类别以及所有其他博客相关页面的链接时,它们都必须以http://example.com/blog
为前缀。
值$_SERVER['HTTP_HOST']
或$_SERVER['SERVER_NAME']
未反映此环境/部署信息。使用base-url值配置(!)应用程序并在生成链接时始终使用某种baseUrl()
函数(使用此配置)是保持核心应用程序功能专注于自己业务的好方法而不是外部部署因素。
答案 1 :(得分:2)
您的网站由一系列网页组成。每个网页都有一个完整的统一资源定位符(URL),如http://www.your.com/intro.htm。 您的网页网址通常以同一组字母开头,例如http://www.your.com/。这个通用前缀就是我们所说的基本URL。
使用基本网址可以简化您的工作,因为您不需要查看或输入您要引用的每个网页的完整网址。
或者
分配给页面的URL,通过添加文档名称或尾部斜杠/“
”将“相对URL”转换为“绝对URL”要了解zend网址,请参阅此link