13

我花了一些时间试图理解什么是 baseUrl(通过学习 Zend 框架),但令人惊讶的是,对于这样一个无处不在的实用程序,甚至没有一个“专家”或博主尝试定义 baseUrl 以便学习者知道什么是它是关于。他们都假设您知道它是什么,然后继续推导它,每个人都使用自己的方法来得出自己的结果。从我到目前为止所读到的:

有些人认为它是一个主页-Url,这就是我自然认为的(正如名称所暗示的那样),可供访问,$_SERVER["HTTP_HOST"]或者$_SERVER["SERVER_NAME"]但令人惊讶的是,这些似乎是少数。

有些人认为它是当前页面,由服务器名称访问$_SERVER["REQUEST_URI"]$_SERVER["PHP_SELF"]附加到服务器名称

而其他人认为它可以是上述任何一个或任何 url (嗯,至少这是我得到的印象),这取决于用户想要如何使用它。

所以有人可以准确解释什么是baseUrl,而不是假设我也是“专家”以及为什么我可能需要它。谢谢你。

编辑: baseUrl 应该在大多数 Zend 项目中自动设置,但显然不是我的情况。即使我做echo $this->baseUrl()or var_dump($this->baseUrl()),我什么也得不到。所以我真的不知道这个实用程序是关于什么的。

4

2 回答 2

22

为什么你需要一个baseUrl()设施的简短答案是这样的:

应用程序的部署位置应该是配置问题,而不是核心应用程序功能问题

在许多(甚至可能是大多数)情况下,应用程序的 base-url 将只是$_SERVER['HTTP_HOST']or $_SERVER['SERVER_NAME']

但情况并非总是如此。

最容易考虑的例子是一个标准的网站,它有通常的页面:

  • http://example.com/
  • http://example.com/contact
  • http://example.com/about
  • // etc

现在您编写(或购买或下载为 OSS 包)一个您想在 url 下部署的博客应用程序:

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()功能(使用此配置)是保持核心应用程序功能专注于其自身业务而不是外部部署因素的好方法。

于 2013-02-21T08:19:22.503 回答
4

您的网站由一系列网页组成。每个网页都有一个完整的统一资源定位器 (URL),例如http://www.your.com/intro.htm。您的网页 URL 通常以相同的一组字母开头,例如http://www.your.com/在这种情况下。这个通用前缀就是我们所说的基本 URL。

使用基本 URL 可以简化您的工作,因为您无需查看或输入要引用的每个页面的完整 URL。

或者

分配给页面的 URL,通过添加文档名称或尾部斜杠 / 将“相对 URL”转换为“绝对 URL”

要了解 zend url,请参考此链接

于 2013-02-21T07:00:36.497 回答