我手动设置我的zend baseUrl吗?

时间:2013-02-28 10:07:24

标签: zend-framework

我知道baseUrls主要是在zend项目中自动设置的,当从子文件夹运行应用程序时它们会派上用场,但是我从root public文件夹运行我的应用程序,使用server-name { {1}}。

因此,当我执行myzend.locecho $this->baseUrl()时,我会得到一个空字符串var_dump($this->baseUrl())。这是正常的,是不是从子文件夹运行应用程序的结果?或者我手动设置baseUrl;例如''

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

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

Zend_Controller_Front::getInstance()->getBaseUrl()

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

当然,如果你设置baseUrl - 可能是一个带有协议前缀的真实URL - 那么所有的解释都是关闭的:它只返回你设置的任何内容。

值得注意的是baseUrl()中实现的Zend_View_Helper_BaseUrl视图助手的两件事:

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

  2. 需要一个参数!

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

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

    但我觉得写得更简洁:

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

    对我而言,这不仅仅是一些额外角色的问题。更重要的是,应用程序的核心应该知道自己的内部结构,而不是他的部署细节。以这种方式使用baseUrl()视图助手隐式地确认需要一些部署感知映射来解析对其部署后对应的内部部署独立资产引用。