Zend Framework $ this-> baseUrl()总是返回当前页面:(为什么

时间:2009-08-26 06:50:20

标签: php zend-framework

查看此网站www.fltdata.com。出于某种原因,无论您进入哪个页面而不是指向主页,主页链接都指向当前页面。它在我的localhost上工作正常但在线它的行为就像这样。主链接的href值只是:$ this-> baseUrl()

这里错了..

===编辑===

我已经创建了一个帮助程序,如下所示:

class Zend_View_Helper_BaseUrl
{
    protected $_baseUrl;

    function __construct()
    {
        $fc = Zend_Controller_Front::getInstance();
        $this->_baseUrl =  $fc->getBaseUrl();
    }

    function baseUrl()
    {
        return $this->_baseUrl;
    }
}

这是我想每当我打电话给$ this-> baseUrl时都会被调用。这可能是问题 - 但它在我的本地主机上工作正常而不在线 - 所以必须是某种配置问题 - 我应该在哪里看?

4 个答案:

答案 0 :(得分:15)

如果不了解有关ZF设置和e.h的更多详细信息,很难说出这里出了什么问题。网址重写设置。 Zend_Controller_Request_Http::getBaseUrl()背后的逻辑 - 如果在前端控制器中没有明确设置Zend_View_Helper_BaseUrl::baseUrl(),那么你的baseUrl调用就会被解决 - 这是非常复杂的并涉及4个不同的服务器变量(和在确定当前请求URI的过程中还有一些。)

解决此问题的最简单方法可能是在引导程序中的前端控制器上设置baseUrl(相对于服务器根目录)。如果你正在使用新的Zend_Application - bootstrapping,你只需要添加

resources.frontController.baseUrl = "/subdir"

到你的配置。

修改

您的帮助程序或多或少类似于ZF随附的原始baseUrl - 帮助程序。原始的也代理Zend_Controller_Front::getBaseUrl()。你使用哪个版本的ZF?您有没有理由不使用随附的baseUrl - 帮助器?

您是否尝试明确设置引导中的baseUrl

答案 1 :(得分:6)

我通常使用配置对象作为基本URL,然后在index.php中定义它 在public / index.php

    $config = new Zend_Config_Ini(
        APPLICATION_PATH . '/configs/application.ini', APPLICATION_ENV);
    $baseUrl = $config->baseHttp;
    define('BASE_URL', $baseUrl);`
在configs / application.ini中的

我在生产部分

[production]
baseHttp                            = "http://whatever.net"

这种方式如果我需要在开发中使用不同的基本URL我可以为baseHttp个人添加一个不同的变量我认为如果你想让baseurl不被弄错,那么它比在自己的类中包装更简单。有时OOP太多OOP。此外,它还可以使安装程序更易于管理。你甚至可以获得$ _SERVER变量来获取主机名并用http://

包装它

答案 2 :(得分:4)

Zend Framework总是返回当前页面,因为在调用 $ this-> baseUrl(); 之后您没有使用尾部斜杠。

要解决此问题,请在视图中调用 $ this-> baseUrl(); 后附加一个斜杠:


正确的方式

<a href="<?php echo $this->baseUrl() . "/"; ?>">Home Link</a>

<a href="<?php echo $this->baseUrl(); ?>/">Home Link</a>

省略尾部斜杠会生成指向您当前正在查看的页面的链接。

不正确的方式

<a href="<?php echo $this->baseUrl(); ?>">Home Link</a>

答案 3 :(得分:2)

我在视图中使用$ this-&gt; baseUrl时遇到了类似的问题。我发现使用它会给我当前页面的网址:

的baseUrl; ?&gt;“中&GT; http://www.yourwebaddress.com/current-page

这将为我提供真正的基础,无论当前页面如何(注意斜杠添加到网址的末尾)

的baseUrl; ?&GT; /“&GT; http://www.yourwebaddress.com/