2

我知道 baseUrls 大多是在 zend 项目中自动设置的,当从子文件夹运行应用程序时它们会派上用场,但我是从根public文件夹运行我的应用程序,使用 server-name myzend.loc

所以当我做echo $this->baseUrl()or时var_dump($this->baseUrl()),我得到一个空字符串''。这是正常的,并且是没有从子文件夹运行应用程序的结果吗?还是我手动设置baseUrl;例如$request->getHelper('baseUrl')->setBaseUrl($_SERVER['SERVER_NAME']);

4

3 回答 3

2

$this->baseUrl()由zend框架设置..你不需要设置..你得到一个空baseurl的原因是在你的apache httpd.conf中你的Virtualhost documentroot被设置到项目目录

DocumentRoot "/usr/local/apache2/docs/yourproject"

于 2013-02-28T11:11:07.683 回答
2

尽管有名称,但baseUrl返回绝对路径,而不是 URL。它返回一个空字符串将是您对不在子文件夹中的普通 ZF 项目所期望的。

于 2013-03-03T12:13:04.353 回答
2

快速回答是,在我的 ZF1 应用程序服务于虚拟 Web 主机根目录的站点上,我还得到一个空字符串:

Zend_Controller_Front::getInstance()->getBaseUrl()

正如@TimFountain 指出的那样,它本身不会返回真正的URL,并带有httphttps协议前缀。因此,它可以更多地解释为文件路径而不是 URL。但它更多的是相对文件路径:相对于 docroot 的路径。

而且,当然,如果您将baseUrl- 可能设置为带有协议前缀的真实 URL - 那么所有解释都将关闭:它只会返回您设置的任何内容。

还值得注意的是关于在baseUrl()中实现的 view-helper的两件事Zend_View_Helper_BaseUrl

  1. 它使用上面的前置控制器getBaseUrl()方法。

  2. 这需要争论!

对于(2),根据我的经验,许多人使用baseUrl()视图助手如下(例如在视图脚本中):

<?php echo $this->baseUrl() . '/assets/css/styles.css'; ?>

但我发现写起来更简洁:

<?php echo $this->baseUrl('/assets/css/styles.css'); ?>

对我来说,这不仅仅是几个额外字符的问题。更多的是应用程序的核心应该知道他自己的内部结构,而不是他的部署细节。以这种方式使用baseUrl()view-helper 隐含地承认需要一些部署感知映射来解析内部部署独立资产引用到其部署后对应项。

于 2013-03-03T15:12:16.270 回答